2015年8月20日木曜日

OpenCV で別に取得した二つの画像を合成して表示

2つのWebカメラで取得した画像を1枚のWindowで表示させようと思い、チャレンジしていたら、アホなことで1時間ほど悩んでしまいました。

まず、やり方としては、

1.合成後のイメージを作る
2.合成前のイメージを合成後のイメージにコピーする領域を作り、2つを関連付ける。
3.合成前のイメージを合成後のイメージにコピーする。
4.表示

ではソースは。(簡易ソースなのでWebカメラの分は抜いています。また、合成前のイメージは640x480としています。)

// 合成前のイメージ Windowの準備
cv::Mat cam1image;
cv::Mat cam2image;
cv::namedWindow("Camera Image", CV_WINDOW_AUTOSIZE);

// 1. 合成後のイメージを作る
cv::Mat combinedImage(cv::Size(1280, 480), CV_8UC3);

// 2. 合成前のイメージを合成後のイメージにコピーする領域を作り、2つを関連付ける。
cv::Mat imageLeft(combinedImage, cv::Rect(0, 0, cam1image.cols, cam1image.rows));
cv::Mat imageRight(combinedImage, cv::Rect(640, 0, cam2image.cols, cam2image.rows));

// 3.合成前のイメージを合成後のイメージにコピーする。
cam1image.copyTo(imageLeft);
cam2image.copyTo(imageRight);

// 4.表示
cv::imshow("Camera Image", combinedImage);



ちなみに悩んでいたのは、2のところの3番目と4番目の引数を次のように書いていたからです。実行後にエラーがでます。
cv::Mat imageRight(combinedImage, cv::Rect(640, 0, cam2image.cols+640, cam2image.rows));

関数のマニュアルはちゃんと読みましょうって教訓でした。

参考:
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14117591624

0 件のコメント:

コメントを投稿