看了很多人的例子 貌似不应该用 cvCloneImage而应该用cvCloneCopy吧
#include #include #include void main() { IplImage*src_img=cvLoadImage("054A.bmp"0); IplImage*dst_img; //ROI CvRect rect_roi; rect_roi.x=100; rect_roi.y=100; rect_roi.height=300; rect_roi.width=300; cvSetImageROI(src_imgrect_roi); dst_img=cvCloneImage(src_img); cvNamedWindow("054A.bmp"CV_WINDOW_AUTOSIZE); cvNamedWindow("ROI.bmp"CV_WINDOW_AUTOSIZE); cvShowImage("054A.bmp"src_img); cvShowImage("ROI.bmp"dst_img); cvWaitKey(2000); cvResetImageROI(dst_img); //释放dst_img的ROI cvShowImage("ROI.bmp"dst_img); // 对比dst_img中ROI释放前后图像显示的不同,可以看出, // dst_img将设置了ROI的src_img图像进行复制时,复制的内容不仅仅是ROI区域中的像素, // 而是全部的像素内容和ROI结构,显示的时候根据其ROI显示,在释放ROI之后,则显示完整图像 cvWaitKey(0); cvDestroyWindow("054A.bmp"); cvDestroyWindow("ROI.bmp"); cvReleaseImage(&src_img); cvReleaseImage(&dst_img); }
这个似乎不行吧?!!!我曾经使用过,虽然通过屏显显示的是一个子图像块,其实并非只拷贝了ROI区域,而是将ROI标志传递给了拷贝目的图像,所以显示的是ROI区域子图像块,不要被表象给蒙蔽了啊!!!!
看了很多人的例子 貌似不应该用 cvCloneImage而应该用cvCloneCopy吧
#include
#include
#include
void main()
{
IplImage*src_img=cvLoadImage("054A.bmp"0);
IplImage*dst_img;
//ROI
CvRect rect_roi;
rect_roi.x=100;
rect_roi.y=100;
rect_roi.height=300;
rect_roi.width=300;
cvSetImageROI(src_imgrect_roi);
dst_img=cvCloneImage(src_img);
cvNamedWindow("054A.bmp"CV_WINDOW_AUTOSIZE);
cvNamedWindow("ROI.bmp"CV_WINDOW_AUTOSIZE);
cvShowImage("054A.bmp"src_img);
cvShowImage("ROI.bmp"dst_img);
cvWaitKey(2000);
cvResetImageROI(dst_img); //释放dst_img的ROI
cvShowImage("ROI.bmp"dst_img);
// 对比dst_img中ROI释放前后图像显示的不同,可以看出,
// dst_img将设置了ROI的src_img图像进行复制时,复制的内容不仅仅是ROI区域中的像素,
// 而是全部的像素内容和ROI结构,显示的时候根据其ROI显示,在释放ROI之后,则显示完整图像
cvWaitKey(0);
cvDestroyWindow("054A.bmp");
cvDestroyWindow("ROI.bmp");
cvReleaseImage(&src_img);
cvReleaseImage(&dst_img);
}
这个似乎不行吧?!!!我曾经使用过,虽然通过屏显显示的是一个子图像块,其实并非只拷贝了ROI区域,而是将ROI标志传递给了拷贝目的图像,所以显示的是ROI区域子图像块,不要被表象给蒙蔽了啊!!!!