<一>新手学opencv之cvSetMouseCallback笔记
来源:互联网 发布:adobe软件 mac百度云 编辑:程序博客网 时间:2024/05/16 17:05
opencv中鼠标操作涉及到第一个函数cvSetMouseCallback。这个函数注册一个回调函数。
下面程序是 《学习opencv》中的一题,在一幅图片中,鼠标画矩形,并且加亮这个区域。
#include<cv.h>#include<highgui.h>void my_backcall(int events,int x,int y,int flags,void *pagam);int g_isdown=0;void high_light(IplImage *image,CvRect rect);void draw_hist(IplImage *image,CvRect rect);CvRect box;int main(){IplImage *image=cvLoadImage("C:\\Users\\hongbing\\Desktop\\f.jpg");//image保存原图cvNamedWindow("show");IplImage *temp_image=cvCreateImage(cvGetSize(image),image->depth,image->nChannels);//temp_image作为最终被显示的图片 cvCreateImage创建图片并申请内存空间cvSetMouseCallback("show",my_backcall,(void *)temp_image);while(1){//cvCloneImage开辟的内存要记得释放 临时申请temp对其进行操作IplImage *temp=cvCloneImage(image);high_light(temp,box);cvCopyImage(temp,temp_image);cvShowImage("show",temp_image);//temp操作最终结果赋值temp_image并将其显示cvReleaseImage(&temp);if(27==cvWaitKey(30))break;}cvReleaseImage(&image);cvReleaseImage(&temp_image);cvDestroyWindow("show");return 0;}void my_backcall(int events,int x,int y,int flags,void *pagam){IplImage *image=(IplImage *)pagam;switch(events){case CV_EVENT_LBUTTONDOWN://鼠标左键按下{g_isdown=1;box=cvRect(x,y,0,0);}break;case CV_EVENT_MOUSEMOVE://鼠标移动(按着左键移动){if(g_isdown==1){ box.width=x-box.x; box.height=y-box.y;}}break;case CV_EVENT_LBUTTONUP://鼠标左键松开{g_isdown=0;if(box.width<0)//计算小于0时以下是为了计算high_light中的rect参数{box.x+=box.width;box.width*=-1;}if(box.height<0){box.y+=box.height;box.height*=-1;}}break;}}void high_light(IplImage *image,CvRect rect){int i,j;for(i=box.y;i<box.y+box.height;i++){uchar *ptr=(uchar *)(image->imageData+i*image->widthStep);//当前行的像素位置for(j=box.x;j<box.x+box.width;j++){ptr[(j*3+1)]+=20;ptr[(j*3+2)]+=20;ptr[(j*3+32)]+=20;}}}参考:《学习opencv》于仕琪,刘瑞祯译;
0 0
- <一>新手学opencv之cvSetMouseCallback笔记
- <二>新手学opencv之cvCreateTrackbar笔记
- 新手学LINUX下C++编程之路(一)
- 新手学自定义View系列(一)之canvas绘制API
- 《新手学HTML5》学习笔记
- 新手学习opencv一:opencv分析
- 新手学angularjs之指令
- C# OpenCV学习笔记一之准备工作
- 新手学Python 第十一篇 函数(一)
- 新手学Python 第十六篇 多线程(一)
- 新手学Android【一】环境搭建
- 新手学HighCharts(一)----基本使用
- 新手学Linux(一)----安装JDK
- 新手学自定义View系列(一)Demo
- 新手学PHP之-PHP运算符与应用(一)
- 新手学xingo golang服务器之-修改xingo 支持字符协议(一)
- 新手笔记之print(?)
- OpenCV中响应鼠标信息cvSetMouseCallback函数的使用
- java集合(HashSet)
- JDK环境配置与Tomcat
- Java基础--字符串操作
- hibernate jar包介绍
- 深入android Unable to resolve target 'android-XX'详解
- <一>新手学opencv之cvSetMouseCallback笔记
- JNI传递字符串数组J-StringArray
- 2013年各大小IT公司待遇,绝对真实,一线数据!(初版)
- If you object has an "Id' property, it will be set with the generated Id from MongoDB.
- VS2010中使用C#实现向EXCEL文档中写入数据
- VirtualBox访问外网,并能从主机访问的设置
- flash随机数问题
- Java与JSON相互转换
- SharePoint 2013 开发——搜索架构及扩展