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