我有一个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/