有关cvSetImageROI()和cvResetImageROI()函数的困惑
int main(int argc,char*argv[])
{
IplImage * img = cvLoadImage("D:\\picture\\201310.jpg");
IplImage * dst = cvCreateImage(cvSize(img->width/2,img->height/2),img->depth,img->nChannels);
cvSetImageROI(img,cvRect(0,0,120,120));
dst = cvCloneImage(img);
cvResetImageROI(img);
cout<<"img width = "<< img->width<<endl;
cout<<"img height ="<< img->height<<endl;
cout<<"dst width = "<<dst->width<<endl;
cout<<"dst height ="<< dst->height<<endl;
cvShowImage("my img",img);
cvShowImage("dst",dst);
cvWaitKey();
return 0;
}
以上是我做的关于这两个函数的测试,因为在程序中涉及到。我先用cvSetImageROI获取感兴趣区域,并复制给dst,再使用cvResetImageROI()释放感兴趣区域,显示源图像img和dst(见下图),但是我获取两图像的width和height,却是一样大小,很困惑,求教~
cvSetImageROI(?) cvResetImageROI() opencv
[解决办法]
第一 声明 我只看过很少的学习opencv 我想你也是书上的例子吧
第二 遇到问题 分析问题 解决问题 其实你也可以得 只是你没静下心来
你可以去用程序验证你的问题了 其实你已经解决了百分之80了
剩下的就是反推了
cvSetImageROI(img,cvRect(0,0,120,120));
dst = cvCloneImage(img);
第一个函数
cvSetImageROI 里面的参数cvRect(0,0,120,120) 只是改变图片的显示位置 和像素的大小
并没有改变这副图片的像素
所以cout<<"img width = "<< img->width<<endl;
cout<<"img height ="<< img->height<<endl;
cout<<"dst width = "<<dst->width<<endl;
cout<<"dst height ="<< dst->height<<endl;
他们都是一样的
也就是说取cvResetImageROI() 只是改变img的显示位置的参数cvRect 这是一种类型 你按f12 查看
或者百度查看,这个函数并不改变图片的本身
推理完毕 按道理讲 没有第二种解释 会比我这个好 所以我的回答是正确的
我也是新手 只不过接触了2天opencv 剩下的就是你自己的逻辑分析 以结果 分析结果