Opencv HighGUI函数_用鼠标在窗口中画方形
来源:互联网 发布:nginx lua redis性能 编辑:程序博客网 时间:2024/05/18 14:27
要实现用鼠标在窗口中画方形,首先要实现鼠标事件。鼠标事件响应采用回调函数的方式来实现的。
所以为了响应鼠标事件首先需要创建一个回调函数,然后再注册这个函数。
回调函数格式
void CvMouseCallback(
int event,
int x,
int y,
int flags,
void* param
);
第一个参数event必须时一下值:
事件名称 数值
CV_EVENT_MOUSEMOVE 0
CV_EVENT_LBUTTONDOWN 1
CV_EVENT_RBUTTONDOWN 2
CV_EVENT_MBUTTONDOWN 3
CV_EVENT_LBUTTONUP 4
CV_EVENT_RBUTTONUP 5
CV_EVENT_MBUTTONUP 6
CV_EVENT_LBUTTONDBLCLK 7
CV_EVENT_RBUTTONDBLCLK 8
CV_EVENT_MBUTTONDBLCLK 9
第二个及第三个参数是事件发生时鼠标位置的x,y坐标值
第四个参数是事件发生时的不同状态:
标志名称 数值
CV_EVENT_FLAG_LBUUTON 1
CV_EVENT_FLAG_RBUUTON 2
CV_EVENT_FLAG_MBUUTON 4
CV_EVENT_FLAG_CTRLKEY 8
CV_EVENT_FLAG_SHIFTKEY 16
CV_EVENT_FLAG_ALTKEY 32
最后一个参数是void指针,可以用来以任何结构方式传递额外的参数信息,通常情况下,当回调函数为一个类的静态成员时,可能需要传递这个类的指针以确定对哪个类实例产生影响。
注册回调函数
void cvSetMouseCallback(
const char* window_name,
CvMouseCallbakc on_mouse,
void* param=NULL
);
第一个参数指定回调函数需要注册到的窗口,也就是事件产生的窗口
第二个参数为回调函数
第三个参数用来传递额外的信息给回调函数的void* param参数
实现代码:
#include "cv.h"#include "Highgui.h"void my_mouse_callback(int event,int x,int y,int flags,void* param);CvRect box;bool drawing_box = false;void draw_box(IplImage* img,CvRect rect){cvRectangle(img,CvPoint(box.x,box.y),CvPoint(box.x+box.width,box.y+box.height),CvScalar(0xff,0x00,0x00));}int main(int argc,char ** argv){box = cvRect(-1,-1,0,0);IplImage* image = cvCreateImage(CvSize(200,200),IPL_DEPTH_8U,3);cvZero(image);IplImage* temp = cvCloneImage(image);cvNamedWindow("Box Example");cvSetMouseCallback("Box Example",my_mouse_callback,(void*)image);while(1){cvCopy(image,temp);if (drawing_box){draw_box(temp,box);}cvShowImage("Box Example",temp);if(cvWaitKey(15)==27)break;}cvReleaseImage(&image);cvReleaseImage(&temp);cvDestroyWindow("Box Example");return 0;}void my_mouse_callback(int event,int x,int y,int flags,void* param){IplImage* image = (IplImage*)param;switch(event){case CV_EVENT_MOUSEMOVE:{if (drawing_box){box.width = x-box.x;box.height = y-box.y;}}break;case CV_EVENT_LBUTTONDOWN:{drawing_box = true;box = cvRect(x,y,0,0);}break;case CV_EVENT_LBUTTONUP:{drawing_box = false;if (box.width<0){box.x+=box.width;box.width*=-1;}if (box.height<0){box.y+=box.height;box.height*=-1;}draw_box(image,box);}break;}}
- Opencv HighGUI函数_用鼠标在窗口中画方形
- opencv用鼠标在窗口中画方形的程序
- openCV 用鼠标在窗口中画方形
- opencv用鼠标在窗口中画方形的程序
- Opencv 用鼠标在窗口中画方形的程序实现_第四章书中源码摘写
- Opencv HighGUI函数_窗口
- OPENCV中例4-1用鼠标在窗口中画方形的程序
- 用鼠标在窗口中画方形的程序------基于OpenCV+VS
- 例4-1 用鼠标在窗口中画方形
- opencv-鼠标在窗口中画矩形
- OpenCV学习笔记-用鼠标在窗口中画矩形
- opencv中highgui库中的函数集合
- Opencv HighGUI函数_载入,保存,显示图像
- 基于opencv用鼠标在窗口中画矩形和线段的程序
- linux 下调用opencv接口函数实现鼠标在窗口画方框操作
- opencv之highgui中createTrackbar
- 用鼠标在窗口中绘制矩形
- opencv c++函数 highgui模块 3
- 每天一道LeetCode-----字符串乘法
- Hadoop中Context类的作用
- 使用scrapy对大学生互联网+科技创业大赛的爬取
- 刚出来工作的程序员应当如何对待工作和学习的个人看法。
- 10.13日课程复习
- Opencv HighGUI函数_用鼠标在窗口中画方形
- CS231_A1:Two-layer Neural Net
- 数组总结
- LANP 环境搭建,git配置,ftp配置等
- 八大排序算法-直接插入排序
- hdoj-1418抱歉
- manytomany
- html,css总结
- xmlns是个什么东西