У меня есть класс 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 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
Я заметил, что это происходит в Рой, я понятия не имею, почему. Я — абсолютный новичок в 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);
Других решений пока нет …