OpenCV图像处理->鼠标移动区域放大


调用OpenCV函数里面的鼠标响应函数:

	cvSetMouseCallback( "img", on_mouse, 0 );

鼠标响应具体实现的函数:
int foo=100;//调节窗口大小,也称为比例系数。
void on_mouse( int event, int x, int y, int flags, void* ustc)
{
	if( event == 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);
	}
}

OpenCV图像处理->鼠标移动区域放大_第1张图片

你可能感兴趣的:(OpenCV图像处理->鼠标移动区域放大)