2

我想裁剪 1176*640 的图像以保存 1176*400 大小的 ROI。我正在使用以下代码片段来实现一点我仍然将原始图像作为输出。

IplImage *CMyFunction::ROI(IplImage *pImage, CvRect ROI)
{
   IplImage *mROI = cvCreateImage(cvGetSize(*pImage), IPL_DEPTH_8U, 1);
   cvSetImageROI(pImage, rect_ROI); 
   cvCopy(pImage, mROI);
   cvResetImageROI(pImage);
   return mROI;
}
4

2 回答 2

1

我知道离开函数时的指针不再稳定,并在函数之外声明了一个新的 IplImage* 并将其作为参数传递,这被证明是有效的。

IplImage *CMyFunction::ROI(IplImage *pImage, CvRect ROI, IplImage* FinalImage)
于 2013-11-11T14:23:45.923 回答
1

对于 cvCopy(),源和目标的大小和类型应该相同,即两个图像的宽度、高度、深度和通道数等参数应该相等。在您的情况下,您可以更改代码,例如

   IplImage *mROI = cvCreateImage(cvGetSize(pImage), pImage->depth, pImage->nChannels); //create dest with same size as source
   cvSetImageROI(pImage, rect_ROI); //Set roi on source
   cvSetImageROI(mROI, rect_ROI);  //set roi on dest
   cvCopy(pImage, mROI); 
   cvResetImageROI(pImage);
   cvResetImageROI(mROI);

或者

IplImage *mROI = cvCreateImage(cvSize(rect_ROI.width,rect_ROI.height), pImage->depth, pImage->nChannels); // create an image of size as rect
cvSetImageROI(pImage, rect_ROI); //set roi on source
cvCopy(pImage, mROI);
cvResetImageROI(pImage);
于 2013-11-11T05:15:44.287 回答