《学习OpenCV》练习题第四章第三题a

来源:互联网 发布:linux beam.smp 编辑:程序博客网 时间:2024/06/07 15:44
#include <highgui.h>#include <cv.h>#include "opencv_libs.h"#pragma comment (lib,"opencv_calib3d231d.lib")#pragma comment (lib,"opencv_contrib231d.lib")#pragma comment (lib,"opencv_core231d.lib")#pragma comment (lib,"opencv_features2d231d.lib")#pragma comment (lib,"opencv_flann231d.lib")#pragma comment (lib,"opencv_gpu231d.lib")#pragma comment (lib,"opencv_haartraining_engined.lib")#pragma comment (lib,"opencv_highgui231d.lib")#pragma comment (lib,"opencv_imgproc231d.lib")#pragma comment (lib,"opencv_legacy231d.lib")#pragma comment (lib,"opencv_ml231d.lib")#pragma comment (lib,"opencv_objdetect231d.lib")#pragma comment (lib,"opencv_ts231d.lib")#pragma comment (lib,"opencv_video231d.lib")/* *《学习OpenCV》第四章第三题a * 完成时间:22:17 3/30 星期六 2013 *//* 矩形框 */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;}// drawdraw_rect(image, rect);}break;// 在右键按下时清除case CV_EVENT_RBUTTONDOWN:cvCopyImage(original, img);printf("clear.\n");break;}}int main(){img = cvLoadImage( "lena.bmp", 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;}

运行结果: