跳转到主内容
极星编程网:以代码为星,赴技术山海!

OpenCV鼠标绘制矩形和截取矩形区域图像

本文实例为大家分享了OpenCV鼠标绘制截取矩形区域图像的具体代码,供大家参考,具体内容如下在opencv中利用鼠标绘制矩形,代码如下:#include #include #include #pragma comment( lib, "cv.lib" )#pragma comment( lib, "cxcore.lib" )#pragma comment( lib, "highgui.lib" ) IplImage* src = 0;IplImage* dst = 0;void on_mouse( int event, int x, int y, int flags, void* ustc){static CvPoint pre_pt = {-1,-1};static CvPoint cur_pt = {-1,-1};CvFont font;cvInitFont(&font, CV_FONT_HERSHEY_SIMPLEX, 0.5, 0.5, 0, 1, CV_AA);char temp[16];

if( event == CV_EVENT_LBUTTONDOWN ){cvCopy(dst,src);sprintf(temp,"(%d,%d)",x,y);pre_pt = cvPoint(x,y);cvPutText(src,temp, pre_pt, &font, cvScalar(0,0, 0, 255));cvCircle( src, pre_pt, 3,cvScalar(255,0,0,0) ,CV_FILLED, CV_AA, 0 );cvShowImage( "src", src );cvCopy(src,dst);}else if( event == CV_EVENT_MOUSEMOVE && !(flags & CV_EVENT_FLAG_LBUTTON)){cvCopy(dst,src);sprintf(temp,"(%d,%d)",x,y);cur_pt = cvPoint(x,y);cvPutText(src,temp, cur_pt, &font, cvScalar(0,0, 0, 255));cvShowImage( "src", src );}else if( event == CV_EVENT_MOUSEMOVE && (flags & CV_EVENT_FLAG_LBUTTON)){cvCopy(dst,src);sprintf(temp,"(%d,%d)",x,y);cur_pt = cvPoint(x,y);cvPutText(src,temp, cur_pt, &font, cvScalar(0,0, 0, 255));cvRectangle(src, pre_pt, cur_pt, cvScalar(0,255,0,0), 1, 8, 0 );cvShowImage( "src", src );}else if( event == CV_EVENT_LBUTTONUP ){sprintf(temp,"(%d,%d)",x,y);cur_pt = cvPoint(x,y);cvPutText(src,temp, cur_pt, &font, cvScalar(0,0, 0, 255));cvCircle( src, cur_pt, 3,cvScalar(255,0,0,0) ,CV_FILLED, CV_AA, 0 );cvRectangle( src, pre_pt, cur_pt, cvScalar(0,255,0,0), 1, 8, 0 );cvShowImage( "src", src );cvCopy(src,dst);}}int main(){src=cvLoadImage("lena.jpg",1);dst=cvCloneImage(src);cvNamedWindow("src",1);cvSetMouseCallback( "src", on_mouse, 0 );

cvShowImage("src",src);cvWaitKey(0);cvDestroyAllWindows();cvReleaseImage(&src);cvReleaseImage(&dst);return 0;

在opencv中利用鼠标绘制矩形并截取该矩形区域的图像

测试代码如下:

#include #include #include #pragma comment( lib, "cv.lib" )#pragma comment( lib, "cxcore.lib" )#pragma comment( lib, "highgui.lib" ) IplImage* org = 0;IplImage* img = 0;IplImage* tmp = 0;IplImage* dst = 0;void on_mouse( int event, int x, int y, int flags, void* ustc){static CvPoint pre_pt = {-1,-1};static CvPoint cur_pt = {-1,-1};CvFont font;cvInitFont(&font, CV_FONT_HERSHEY_SIMPLEX, 0.5, 0.5, 0, 1, CV_AA);char temp[16];

if( event == CV_EVENT_LBUTTONDOWN ){cvCopy(org,img);sprintf(temp,"(%d,%d)",x,y);pre_pt = cvPoint(x,y);cvPutText(img,temp, pre_pt, &font, cvScalar(0,0, 0, 255));cvCircle( img, pre_pt, 3,cvScalar(255,0,0,0) ,CV_FILLED, CV_AA, 0 );cvShowImage( "img", img );cvCopy(img,tmp);}else if( event == CV_EVENT_MOUSEMOVE && !(flags & CV_EVENT_FLAG_LBUTTON)){cvCopy(tmp,img);sprintf(temp,"(%d,%d)",x,y);cur_pt = cvPoint(x,y);cvPutText(img,temp, cur_pt, &font, cvScalar(0,0, 0, 255));cvShowImage( "img", img );}else if( event == CV_EVENT_MOUSEMOVE && (flags & CV_EVENT_FLAG_LBUTTON)){cvCopy(tmp,img);sprintf(temp,"(%d,%d)",x,y);cur_pt = cvPoint(x,y);cvPutText(img,temp, cur_pt, &font, cvScalar(0,0, 0, 255));cvRectangle(img, pre_pt, cur_pt, cvScalar(0,255,0,0), 1, 8, 0 );cvShowImage( "img", img );}else if( event == CV_EVENT_LBUTTONUP ){cvCopy(tmp,img);sprintf(temp,"(%d,%d)",x,y);cur_pt = cvPoint(x,y);cvPutText(img,temp, cur_pt, &font, cvScalar(0,0, 0, 255));cvCircle( img, cur_pt, 3,cvScalar(255,0,0,0) ,CV_FILLED, CV_AA, 0 );cvRectangle( img, pre_pt, cur_pt, cvScalar(0,255,0,0), 1, 8, 0 );cvShowImage( "img", img );cvCopy(img,tmp);int width=abs(pre_pt.x-cur_pt.x);int height=abs(pre_pt.y-cur_pt.y);if(width==0 || height==0){cvDestroyWindow("dst");return;}dst=cvCreateImage(cvSize(width,height),org->depth,org->nChannels);CvRect rect;if(pre_pt.xcur_pt.x && pre_pt.ycur_pt.x && pre_pt.y>cur_pt.y){rect=cvRect(cur_pt.x,cur_pt.y,width,height);}else if(pre_pt.xcur_pt.y){rect=cvRect(pre_pt.x,cur_pt.y,width,height);}cvSetImageROI(org,rect);cvCopy(org,dst);cvResetImageROI(org);cvDestroyWindow("dst");cvNamedWindow("dst",1);cvShowImage("dst",dst);cvSaveImage("dst.jpg",dst);}}int main(){org=cvLoadImage("lena.jpg",1);img=cvCloneImage(org);tmp=cvCloneImage(org);cvNamedWindow("img",1);cvSetMouseCallback( "img", on_mouse, 0 );

cvShowImage("img",img);cvWaitKey(0);cvDestroyAllWindows();cvReleaseImage(&org);cvReleaseImage(&img);cvReleaseImage(&tmp);cvReleaseImage(&dst);return 0;}以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

您可能感兴趣的文章:详解Python+opencv裁剪/截取图片的几种方式C#使用opencv截取旋转矩形区域图像的实现示例python+openCV对视频进行截取的实现Python OpenCV视频截取并保存实现代码python用opencv批量截取图像指定区域的方法python3+opencv3识别图片中的物体并截取的方法python使用opencv按一定间隔截取视频帧opencv python截取圆形区域的实现

相关文章