Не удалось подтвердить ROI (C ++ и openCV)

У меня есть класс 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, и я делаю это для домашней работы.

Спасибо.
Если вам нужна дополнительная информация, пожалуйста, спросите.

1

Решение

Я не уверен насчет 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);
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector