1

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;

ここまでで、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の初心者で、宿題のためにこれをやっています。

ありがとうございました。さらに情報が必要な場合は、お問い合わせください。

4

1 に答える 1

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);
于 2012-11-20T09:55:19.067 に答える