opencv学习(三)书本《学习Opencv》(中文版)第四章的样例Ex4-1(opencv3.0.0+VS2012+win7)
2015-08-04 20:01
357 查看
第一个样例需要改的地方就是 cvCopy( image, temp );找不到cvCopyImage, 应该也是由于opencv3.0和以前版本的不同
void my_mouse_callback( int event, int x, int y, int flags, void* param );
参数:第一个参数是事件类型如CV_EVENT_MOUSEMOVE,第二,三个参数是事件发生时鼠标位置的x,y坐标, 第四个参数指定事件发生时的状态如CV_EVENT_FLAG_SHIFTKEY,第五个参数是void指针,传递额外任何结构信息
cvSetMouseCallback( "Box Example", my_mouse_callback, (void*) image );
参数:第一个参数是产生事件的窗口,第二个参数是回调函数,第三个是额外信息
非常精彩的一个样例,稳定性很好:
void my_mouse_callback( int event, int x, int y, int flags, void* param );
参数:第一个参数是事件类型如CV_EVENT_MOUSEMOVE,第二,三个参数是事件发生时鼠标位置的x,y坐标, 第四个参数指定事件发生时的状态如CV_EVENT_FLAG_SHIFTKEY,第五个参数是void指针,传递额外任何结构信息
cvSetMouseCallback( "Box Example", my_mouse_callback, (void*) image );
参数:第一个参数是产生事件的窗口,第二个参数是回调函数,第三个是额外信息
非常精彩的一个样例,稳定性很好:
/*总体的程序结构是先在temp图像上进行画矩阵, 然后将其画到image中,while循环中不断的将image拷贝到temp中,否则会有很多矩形框 再画下一个矩阵*/ #include <cv.h> #include <highgui.h> // Define our callback which we will install for // mouse events. // 定义我们的为鼠标事件安装的回调函数 void my_mouse_callback( int event, int x, int y, int flags, void* param ); CvRect box;//全局变量 bool drawing_box = false; // A litte subroutine to draw a box onto an image // 一个小的用来在图像上画方框的副进程 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) /* red *///RGB,但是画出来的是蓝色的? //还是因为黑底填充了红色所以看不见,那线条的蓝色怎么来的? ); } int main( int argc, char* argv[] ) { box = cvRect(-1,-1,0,0);//int x, y, width, height IplImage* image = cvCreateImage( cvSize(400,400), IPL_DEPTH_8U, 3 ); cvZero( image ); //void cvZero( CvArr* arr ); //This function sets all values in all channels of the array to 0. //这个函数把阵列所有通道的值均设为0 IplImage* temp = cvCloneImage( image ); cvNamedWindow( "Box Example" ); // Here is the crucial moment that we actually install // the callback. Note that we set the value ‘param’ to // be the image we are working with so that the callback // will have the image to edit. // 这就是我们安装回调函数的关键时刻。 // 注意我们把param设为了image,因此该回调函数有图像能编辑 cvSetMouseCallback( "Box Example", my_mouse_callback, (void*) image ); // The main program loop. Here we copy the working image // to the ‘temp’ image, and if the user is drawing, then // put the currently contemplated box onto that temp image. // display the temp image, and wait 15ms for a keystroke, // then repeat… // while( 1 ) { cvCopy( image, temp );//Copy elements of one array to another //void cvCopy(const CvArr* src,CvArr* dst,const CvArr* mask = NULL); if( drawing_box ) draw_box( temp, box ); cvShowImage( "Box Example", temp ); if( cvWaitKey( 15 )==27 ) break; } // Be tidy // cvReleaseImage( &image ); cvReleaseImage( &temp ); cvDestroyWindow( "Box Example" ); } // This is our mouse callback. If the user // presses the left button, we start a box. // when the user releases that button, then we // add the box to the current image. When the // mouse is dragged (with the button down) we // resize the box. // 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; } }
相关文章推荐
- Deep Learning: Assuming a deep neural network is properly regulated, can adding more layers actually make the performance degrade?
- 阅读linux内核需要的名词注释
- hdu5348(2015多校5)--MZL's endless loop(搜索)
- opencv 2.4.11 cuda5.5 总结
- 用 VIPER 构建 iOS 应用架构(1)
- 半自动化运维之服务器信息维护
- [MetaHook] Quake OpenGL function
- Linux C语言程序设计(十)——makefile
- linux 把文件安装到指定路径
- [MetaHook] Load DTX texture to OpenGL
- 用 VIPER 构建 iOS 应用架构(1)
- linux echo命令的-n、-e两个参数
- ORA-27041: unable to open file--恢复被rm意外删除数据文件
- VMware centos 设置上网的步骤
- linux回调函数
- 在Linux下安装和使用MySQL
- hdu 5349 维护序列 OR Treap
- 使用 jsch 连接linux
- shell知识点小结
- 微信公众号开发之被逼学web服务端1-----使用SecureCRT连接Linux服务器