cropping IplImage most effectively
在Iplimage格式图像下高效设置ROI
IplImage* orig = cvLoadImage("test.jpg");
if (!orig)
{
return -1;
}
printf("Orig dimensions: %dx%d\n", orig->width, orig->height);
cvSetImageROI(orig, cvRect(0, 250, 350, 350));
IplImage *tmp = cvCreateImage(cvGetSize(orig),
orig->depth,
orig->nChannels);
cvCopy(orig, tmp, NULL);
cvResetImageROI(orig);
orig = cvCloneImage(tmp);
printf("Orig dimensions after crop: %dx%d\n", orig->width, orig->height);
cvNamedWindow( "result", CV_WINDOW_AUTOSIZE );
cvShowImage( "result", orig);
cvWaitKey( 0 );
cvDestroyWindow( "result" );
Unfortunately, it's imperative that you create a temporary image to store the result of
cvCopy()
.
进行ROI方面的考虑主要是因为最近处理的图像太大,不能完全显示,由
http://comments.gmane.org/gmane.comp.lib.opencv/22573
you can either resize the image before display it or create a new temporary image that hold the ROI and display the cropped image.
得到提示,显示超大的图像有两种方式:
1.重新设置图像的size
2.创建一个临时图像,然后保存ROI同时显示出来;
之后又搜索了一下,发现有种很简单的方式显示超大图像:
IplImage* src = cvLoadImage("../image/1.jpg", CV_LOAD_IMAGE_GRAYSCALE);
cvNamedWindow("widows", CV_WINDOW_NORMAL);
cvShowImage("widows", src);