我有一个Student类和一个imagehandler类(作为opencv图像处理程序)
Student对象有一个字段:
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;
现在在main中,我通过imagehandler指定的构造函数声明了一个新图像。
我用来制作图像的构造函数:
imagehandler::imagehandler(int width, int height)
: m_image(width, height, CV_8UC3){
}
在主要内容中,我声明了这样的图像:
imagehandler CSImg((4*300), (320 * ceil((float)(numOfCSStudents/4))));
相信我这一点:CSImg比我想在其中输入的所有图像都大。
现在我要复制某个学生的照片并将其输入CS Img。这就是我的工作:
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
我注意到这发生在roi中,我不知道为什么。我 - 我是openCV的初学者,我正在做这项工作。
谢谢。 如果您需要任何进一步的信息,请询问。
答案 0 :(得分:0)
我不确定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);