有关opencv的学习(11)—有关回调函数

来源:互联网 发布:下载淘宝网2015新版 编辑:程序博客网 时间:2024/06/05 20:41

       什么叫回调函数?

回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。

回调函数使用步骤:

(1)、回调函数签名———在main()函数之前声明

(2)、定义回调函数———在main()函数之前定义回调函数执行代码

(3)、注册回调函数———在main()函数中关联回调函数与变量。

代码如下:

#ifndef onMouse_h#define onMouse_h#include <opencv2/opencv.hpp>#include <opencv2/highgui/highgui.hpp>#include <opencv2/core/core.hpp>using namespace cv;using namespace std;//1.回调函数签名void onMouse(int event,int x,int y,int flags,void*param);//2.定义回调函数void onMouse(int event,int x,int y,int flags,void*param){    cv::Mat *im=reinterpret_cast<Mat*>(param);    switch (event) {        case  CV_EVENT_LBUTTONDOWN:            std::cout<<"at("<<x<<","<<y<<")value is:"            <<static_cast<int>(im->at<uchar>(cv::Point(x,y)))<<std::endl;                        break;                    case  CV_EVENT_RBUTTONDOWN:            std::cout<<"input(x,y)"<<endl;            std::cout<<"x="<<endl;            cin>>x;            std::cout<<"y="<<endl;            cin>>y;            std::cout<<"at("<<x<<","<<y<<")value is:"            <<static_cast<int>(im->at<uchar>(cv::Point(x,y)))<<std::endl;                        break;    }        }#endif /* onMouse_h */

主函数:

#include <iostream>#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp>#include <opencv2/opencv.hpp>#include "onMouse.h"using namespace cv;using namespace std;int main(){    Mat image=imread("/Users/zhangxiaoyu/Desktop/1.png",0);//538*716        if(image.empty())    {        cout<<"Error!cannot be read...../n";        return -1;    }        cv::setMouseCallback("original image", onMouse,reinterpret_cast<void*>(&image));            cv::namedWindow("original image");    while(1)    {        cv::imshow("original image", image);        waitKey(40);    }        return 0;}



0 0
原创粉丝点击