《学习OpenCV》第四章课后题3-a
来源:互联网 发布:大嘴猴淘宝旗舰店 编辑:程序博客网 时间:2024/06/05 09:04
题目说明:
创建一个程序读入并显示一幅图像。
a.允许用户在图像中选择一个矩形区域,然后通过按住鼠标按键画一个矩形。当鼠标键放开,高亮显示矩形框。注意,在内存中保留一个原始图像的副本,图像恢复为原始图像并重新开始绘矩形。
#include <highgui.h>#include <cv.h>/* 矩形框 */CvRect rect;bool draw = false; // 标记是否在画IplImage* img;IplImage * temp;IplImage * original;void draw_rect(IplImage* img, CvRect rect){ cvRectangle( img, cvPoint( rect.x, rect.y ), cvPoint( rect.x + rect.width, rect.y + rect.height), cvScalar( 0x00, 0x00, 0xff) ); printf("draw\n");}// 鼠标回调函数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(draw) { rect.width = x - rect.x; rect.height = y - rect.y; } } break; case CV_EVENT_LBUTTONDOWN: { draw = true; rect = cvRect( x, y, 0, 0 ); } break; case CV_EVENT_LBUTTONUP: { draw = false; if(rect.width < 0) { rect.x += rect.width; rect.width *= -1; } if(rect.height < 0) { rect.y += rect.height; rect.height *= -1; } // draw draw_rect(image, rect); } break; // 在右键按下时清除 case CV_EVENT_RBUTTONDOWN: cvCopyImage(original, img); printf("clear.\n"); break; }}int main(){ img = cvLoadImage( "E:/shark.jpg", 1 ); rect = cvRect( -1, -1, 0, 0); // 副本 temp = cvCloneImage( img ); original = cvCloneImage(img); cvNamedWindow("draw rect"); cvSetMouseCallback("draw rect", my_mouse_callback, (void*)img); while(1) { cvCopyImage(img, temp); if(draw) { draw_rect( temp , rect ); } cvShowImage( "draw rect", temp); if(cvWaitKey(15) == 27) break; } cvReleaseImage(&img); cvReleaseImage(&temp); cvReleaseImage(&original); cvDestroyAllWindows(); return 0;}
引用:qdsclove的专栏
http://blog.csdn.net/stk_overflow/article/details/8760086
0 0
- 《学习OpenCV》第四章课后题3-a
- 《学习OpenCV》第四章课后题1-a
- 《学习OpenCV》第四章课后题5-a
- 《学习OpenCV》第四章课后题2
- 《学习OpenCV》第四章课后题4
- 《学习OpenCV》第四章课后题6
- 《学习OpenCV》第四章课后题7
- 《学习OpenCV》第四章课后题8
- 《学习OpenCV》第四章课后题9
- 《学习opencv》第四章课后习题3
- 《学习OpenCV》第四章课后题3-b
- 《学习OpenCV》第四章课后题1-b&c
- 《学习opencv》第四章课后习题1
- 《学习opencv》第四章课后习题2
- 《学习opencv》第四章课后习题4
- 学习Opencv 第四章课后习题解答(Exercise 1a)
- 《学习OpenCV》第三章课后题8-a
- 学习OpenCV课后题3.8(a)
- 简单解决tomcat端口号被占用的问题
- HDU-1754-I Hate It-单点更新
- JAVA基础 - 删除字符串中指定字符串的方法
- 【TED】伟大的领袖如何激励行动
- 事务
- 《学习OpenCV》第四章课后题3-a
- USACO Combination Lock
- 各种配置环境变量总结
- WebApi有多个POSt方法。
- 想法很重要
- STM32学习--USART
- Wing IDE配置空格代替tab缩进+护眼背景色
- 如何解决:Android中 Error generating final archive: Debug Certificate expired on 10/09/18 16:30 的错误
- 机器学习性能评估指标