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の初心者で、宿題のためにこれをやっています。
ありがとうございました。さらに情報が必要な場合は、お問い合わせください。