我想裁剪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;
}
最佳答案
对于 cvCopy(),源和目标应该具有相同的大小和类型,即两个图像的宽度、高度、深度和 channel 数等参数应该相同。根据您的情况,您可以更改代码,例如
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);
关于visual-studio-2010 - 如何在 Opencv 中使用 Cv Rect 裁剪图像。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19889710/