• ベストアンサー

opencvでの画像貼り付け

OpenCVを用いて,入力画像の右半分をコピーし、入力画像の右側に貼り付ける方法はどのようなものがあるのでしょうか。 コピーはROIだと思うのですが、貼り付ける方法が分かりません。 分かる方、よろしくお願いします。 こんな感じです。 入力画像が[1|2]とすると、 右半分[2]をコピーし、入力画像に貼り付け[1|2|2]

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

 こんばんは。  cvResize()ですと、  http://opencv.jp/sample/sampling_and_geometricaltransforms.html  イメージの拡大も行う為、[1|2a|2b]の出力画像を作成するしか無いかもしれません。  手順としては、 (1)[1|2a|2b]の出力画像を作成。 (2)出力画像にROIを設定して[1|2a]の領域に制限。 (3)出力画像に向かって入力画像[1|2]をコピー。 (4)入力画像にROIを設定して[2]の領域に制限。 (5)出力画像に向かってROIを設定して[2b]の領域に制限。 (6)出力画像に向かって入力画像[2]をコピー。 (7)入力、出力画像のROIを解除してセーブ。  です。  以下は[1|2]で64x32、[1|2a|2b]で96x32です。もっと良い方法があるかもしれませんので、参考程度に。   int main() { //読み込み IplImage* pSrc = ::cvLoadImage("test.bmp", CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR); //(1) IplImage* pNew = ::cvCreateImage(::cvSize(pSrc->width + 32, pSrc->height), pSrc->depth, pSrc->nChannels); //(2) ::cvSetImageROI(pNew, ::cvRect(0, 0, pSrc->width, pSrc->height)); //(3) ::cvCopy(pSrc, pNew); //(4) ::cvSetImageROI(pSrc, ::cvRect(32, 0, pSrc->width, pSrc->height)); //(5) ::cvSetImageROI(pNew, ::cvRect(pSrc->width, 0, 32, pSrc->height)); //(6) ::cvCopy(pSrc, pNew); //(7) ::cvResetImageROI(pSrc); ::cvResetImageROI(pNew); ::cvSaveImage("result.bmp", pNew); //後始末 ::cvReleaseImage(&pNew); ::cvReleaseImage(&pSrc); return 0; }  尚、プログラム内で使用を継続する場合は、pSrcを開放し、pNewを使用します。

negative-X
質問者

補足

ご回答、サンプルありがとうございます。 申し訳ないのですが,cしか学んでいないため,c++が分かりません。 ソース中の::はcではどのように置き換えれば良いのでしょうか。 宜しければ、教えていただけませんか。

その他の回答 (1)

回答No.2

 こんばんは。補足頂きました。  ::を消去すればOKです。

negative-X
質問者

お礼

ご回答ありがとうございました。 やりたかったことが出来ました。 先ほどのNo.1のご回答を良回答とさせていただきます。 ありがとうございました。

関連するQ&A