在OpenCV中鼠标移动区域局部放大

这个程序类似于淘宝购物时,在商品图像上移动鼠标,会出现一个放大鼠标周围矩形区域内的局部图像的窗口。话不多说,直接贴代码。

#include <cv.h>   #include <highgui.h>   #include <stdio.h>   #pragma comment( lib, "cv.lib" )   #pragma comment( lib, "cxcore.lib" )   #pragma comment( lib, "highgui.lib" )    IplImage* org = 0;   IplImage* img = 0;    IplImage* dst = 0;    int foo=60;   void on_mouse( int eventint x, int y, int flags, void* ustc)   {       ifevent == CV_EVENT_MOUSEMOVE && !(flags & CV_EVENT_FLAG_LBUTTON))       {           cvCopy(org,img);           CvPoint p0;           CvPoint p1;           if(x<foo)           {               if(y<foo)               {                   p0=cvPoint(0,0);                   p1=cvPoint(2*foo,2*foo);               }               else if(y>img->height-foo)               {                    p0=cvPoint(0,img->height-2*foo);                   p1=cvPoint(2*foo,img->height);               }               else               {                   p0=cvPoint(0,y-foo);                   p1=cvPoint(2*foo,y+foo);               }           }           else if(x>img->width-foo)           {               if(y<foo)               {                   p0=cvPoint(img->width-2*foo,0);                   p1=cvPoint(img->width,2*foo);               }               else if(y>img->height-foo)               {                    p0=cvPoint(img->width-2*foo,img->height-2*foo);                   p1=cvPoint(img->width,img->height);               }               else               {                   p0=cvPoint(img->width-2*foo,y-foo);                   p1=cvPoint(img->width,y+foo);               }           }           else           {               if(y<foo)               {                   p0=cvPoint(x-foo,0);                   p1=cvPoint(x+foo,2*foo);               }               else if(y>img->height-foo)               {                    p0=cvPoint(x-foo,img->height-2*foo);                   p1=cvPoint(x+foo,img->height);               }               else               {                   p0=cvPoint(x-foo,y-foo);                   p1=cvPoint(x+foo,y+foo);               }           }           cvRectangle(img,p0,p1,CV_RGB(0,255,0));           cvSetImageROI(org,cvRect(p0.x,p0.y,p1.x-p0.x,p1.y-p0.y));           cvResize(org,dst);           cvResetImageROI(org);           cvShowImage( "img", img );           cvShowImage("dst",dst);       }   }   int main()   {       org=cvLoadImage("lena.jpg",1);       img=cvCloneImage(org);       dst=cvCreateImage(cvSize(foo*4,foo*4),org->depth,org->nChannels);       cvNamedWindow("img",1);       cvSetMouseCallback( "img", on_mouse, 0 );       cvShowImage("img",img);       cvNamedWindow("dst",1);       cvWaitKey(0);        cvDestroyAllWindows();       cvReleaseImage(&org);       cvReleaseImage(&img);       cvReleaseImage(&dst);       return 0;   }  

效果图如下

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/a2a4ae689d3957a3cc798c5cd03f007a.html