OpenCV之鼠标选定区域重放

这里主要的想法是鼠标在原始图像上选定区域,该区域图像在另外一个窗口中以原始大小进行显示。代码如下:

const char *window_original="original";
const char *window_test="test";
CvPoint p_start,p_end;
void mouse_callback(int event,int x,int y,int flags,void* param)
{
	IplImage *temp=(IplImage *)param;
	CvRect img_choose;
		switch(event)
	{
	case CV_EVENT_LBUTTONDOWN:
		cvDestroyWindow(window_test);
		p_start=cvPoint(x,y);
		break;
	case CV_EVENT_LBUTTONUP:
		p_end=cvPoint(x,y);
		img_choose=cvRect(p_start.x,p_start.y,CV_IABS(p_end.x-p_start.x),CV_IABS(p_end.y-p_start.y));
		cvSetImageROI(temp,img_choose);
		//cvNamedWindow(window_test,CV_WINDOW_AUTOSIZE);
		cvShowImage(window_test,temp);
		cvResetImageROI(temp);
		break;
	}
		
}
int main(int argc, char* argv[])
{	
	IplImage *img=NULL;
	img=cvLoadImage("E:/opencv_project/console/Debug/Lena.jpg");
	cvNamedWindow(window_original,CV_WINDOW_AUTOSIZE);
	cvNamedWindow(window_test,CV_WINDOW_AUTOSIZE);
	cvShowImage(window_original,img);
	cvShowImage(window_test,img);
	cvSetMouseCallback(window_original,mouse_callback,img);
	while(1)
	{
		if(cvWaitKey(15)==27)
			break;
	}
	cvDestroyWindow(window_original);
	cvDestroyWindow(window_test);
	cvReleaseImage(&img);
	return 0;
}


猜你喜欢

转载自blog.csdn.net/DY580C/article/details/31806327