本文共 1630 字,大约阅读时间需要 5 分钟。
void cvSetMouseCallback(const char* window_name,CvMouseCallback on_mouse,void* param=NULL);//window_name很简单,就是窗口的名字。//on_mouse就是对函数进行回调,我们的所有操作都要在这个函数里面进行。//param是可以传出值的自定义变量,默认值为空,可不写。void onMouse(int Event,int x,int y,int flags,void* param );//这是回调函数//xy坐标可以理解,图像cols为x,rows为y。而Event和flags则对应着不同的鼠标操作。
//回调函数void OnMouse(int event, int x, int y, int flags, void*param) { Mat &image = *(Mat*)param;if (event == 1) { cout << "输出成功" << endl; circle(image, Point(x,y), 100, Scalar(255, 0, 0),5,8); imshow("Mouse", image); }}
//主函数void main{ namedWindow("Mouse", WINDOW_FREERATIO); Mat img(500, 500, CV_8UC3, Scalar(255, 255, 255)); imshow("Mouse", img); setMouseCallback("Mouse", OnMouse, &img); waitKey(0);}
//原型int createTrackbar( const String &trackbarname, const String &winname, int* value, int count, TrackbarCallback onChange=0, void* userdata=0);//第一个参数是调节的参数名,即滑动条的名字; //第二个参数是窗口名;不要乱写,否则不出现滑动条;(NamedWindow创建) //第三个参数是当前滑动条的值 //第四个参数是调节参数最大值,可以直接数字表示; //第五个参数是回调函数名,即调节的参数被那个函数(自己创建的函数名)使用,就调哪个函数。
//回调函数void onChange(int pos, void* param){ // 强制类型转换 Mat src = *(Mat*)(param); Mat dst; // 二值化 threshold(src, dst, pos, 255, 0); //这里的imshow是对应滚动条的显示 imshow("二值化", dst);}
//主函数int main(){ //trackbar的值 int posTrackBar = 0; //trackbar的最大值 int maxValue = 255; //读入图像,以灰度图形式读入 Mat img = imread("E:\\OpenCV\\images\\fqy1.jpg", 0); //新建窗口 namedWindow("二值化"); //这里的imshow是为了避免我们没有拉动滚动条没有图像的显示 imshow("二值化", img); //创建trackbar,我们把img作为数据传进回调函数中,这里的posTrackBar会根据滚动条的拉动改变相应的值 createTrackbar("pos", "二值化", &posTrackBar, maxValue, onChange, &img); waitKey(0); return 0;}
转载地址:http://mkmzi.baihongyu.com/