如何在 Opencv 中使用 CgRect 裁剪图像。

Posted

技术标签:

【中文标题】如何在 Opencv 中使用 CgRect 裁剪图像。【英文标题】:How to crop an Image using CvRect in Open CV. 【发布时间】:2013-11-10 12:31:48 【问题描述】:

我想裁剪 1176*640 的图像以保存 1176*400 大小的 ROI。我正在使用以下 sn-p 来实现位我仍然将原始图像作为输出。

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;

【问题讨论】:

这篇文章有一个在图像上设置 ROI 的示例。 ***.com/questions/8206466/how-to-set-roi-in-opencv 感谢 Alek 的链接,事实证明它提供了丰富的信息 【参考方案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);

【讨论】:

【参考方案2】:

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

IplImage *CMyFunction::ROI(IplImage *pImage, CvRect ROI, IplImage* FinalImage)

【讨论】:

以上是关于如何在 Opencv 中使用 CgRect 裁剪图像。的主要内容,如果未能解决你的问题,请参考以下文章

通过在 imageview 中绘制圆圈裁剪图像

python 使用opencv库通过智能裁剪生成给定形状的缩略图。

opencv图像裁剪与拼接

如何在python opencv中简单地裁剪边界框[重复]

如何在目标 c 中裁剪图像?

使用 OpenCV 如何根据 x 和 y 坐标裁剪图像,并允许 x 和 y 坐标成为裁剪的中心?