我有一个Student类和一个imagehandler类(作为opencv图像处理程序)

学生对象具有一个字段:

imagehandler img;

在imagehandler类中,具有将图像从一个图像复制到另一个图像到特定位置的功能。
void imagehandler::copy_paste_image(imagehandler& dst, int xLoc, int yLoc){
 cv::Rect roi(xLoc, yLoc, m_image.size().width, m_image.size().height);
 cv::Mat imageROI (dst.m_image, roi);
 m_image.copyTo(imageROI);
}

并且imagehandler类具有Mat对象m_image:
private:
 cv::Mat m_image;

现在,在主体中,我已经通过指定的imagehandler构造函数声明了一个新图像。

我用来制作图像的构造函数:
imagehandler::imagehandler(int width, int height)
: m_image(width, height, CV_8UC3){


}

在主要方面,我声明这样的图像:
imagehandler CSImg((4*300), (320 * ceil((float)(numOfCSStudents/4))));

请相信我:CSImg比我要在其中输入的所有图像大得多。

现在,我想复制某位学生的照片并将其输入到CS图中。我就是做这个的:
studentsVector.at(i)->getImg().copy_paste_image(CSImg, CSWidthCount*300, CSHeightCount*320);

我得到这个错误:
OpenCV Error: Assertion failed (0 <= roi.x && 0 <= roi.width && roi.x + roi.width <= m.cols && 0 <= roi.y && 0 <= roi.height && roi.y + roi.height <= m.rows) in Mat, file /build/buildd/opencv-2.3.1/modules/core/src/matrix.cpp, line 303
terminate called after throwing an instance of 'cv::Exception'
  what():  /build/buildd/opencv-2.3.1/modules/core/src/matrix.cpp:303: error: (-215) 0 <= roi.x && 0 <= roi.width && roi.x + roi.width <= m.cols && 0 <= roi.y && 0 <= roi.height && roi.y + roi.height <= m.rows in function Mat

我注意到这发生在投资返回率中,我不知道为什么。我是openCV的一个初学者,我正在做作业。

谢谢。
如果您需要任何其他信息,请询问。

最佳答案

我不确定C++ API,但这是我在C API中所做的。

CvRect ROI = cvRect(x, y, width, height);
cvSetImageROI(srcImg, ROI);
IplImage* cropImg = cvCreateImage(cvGetSize(srcImg), IPL_DEPTH_8U, 1);//this part very important
cvCopy(srcImg, cropImg);
cvResetImageROI(srcImg);

关于c++ - ROI声明失败(C++和openCV),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13461781/

10-09 02:34