• 締切済み

画像を組み合わせる。

VisualC++のMFCにて画像処理を行っています。 それぞれ二つの画像を2値化し、そのお互いの黒になっている部分を合わせ、一つの画像にしたいと思うのですが、合わせ方が分かりません。 2値化はOpenCVにて作成しました。 二つの画像はsrc_imgとtrc_imgとしています。 分かる方がいらっしゃいましたらよろしくお願いいたします。

みんなの回答

回答No.2

 こんばんは。 >>そのお互いの黒になっている部分を合わせ、一つの画像にしたい  [trc_img(x, y) = 0][src_img(x, y) = 0][0]  [trc_img(x, y) = 1][src_img(x, y) = 0][1]  [trc_img(x, y) = 0][src_img(x, y) = 1][1]  [trc_img(x, y) = 1][src_img(x, y) = 1][1]  ↓  ::cvOr(src_img, trc_img, trc_img/*output*/);  [trc_img(x, y) = 0][src_img(x, y) = 0][0]  [trc_img(x, y) = 1][src_img(x, y) = 0][0]  [trc_img(x, y) = 0][src_img(x, y) = 1][0]  [trc_img(x, y) = 1][src_img(x, y) = 1][1]  ↓  ::cvAnd(src_img, trc_img, trc_img/*output*/);  で出来ませんか(trc_imgに最終結果を出力してます)。

s0511146
質問者

お礼

ご回答ありがとうございます。 お二人のご意見を使い、考えてみたいと思います。 またの機会がありましたらよろしくお願いいたします。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

CDCのBitBltで SRCANDを使えな重ね合わせ出来ますよ 重ね合わせのソースがCBitmapオブジェクトで src_img1とsrc_img2 ターゲットが trc_imgならば CDC *pDCSrc1, *pDCSrc2; CDC *pDCDest; pDCSrc1 = new CDC(); pDCSrc2 = new CDC(); pDCDest = new CDC(); CDC* pDC = GetDC(); pDCSrc1->CreateCompatibleDC( pDC ); pDCSrc2->CreateCompatibleDC( pDC ); pDCDest->CreateCompatibleDC( pDC ); CBitmap* pOld[3] = {NUL}; pOld[0] = pDCSrc1->SelectObject( &src_img1 ); pOld[1] = pDCSrc2->SelectObject( &src_img2 ); pOld[2] = pDCDest->SelectObject( &trc_img ); // ビットマップの大きさは適宜修正してください pDCDest->PatBlt( 0, 0, 100, 100, WHITENESS ); pDCDest->BitBlt( 0, 0, 100, 100, pDCSrc1, 0, 0, SRCAND ); pDCDest->BitBlt( 0, 0, 100, 100, pDCSrc2, 0, 0, SRCAND ); // これで重ねあわされたイメージが trc_imgに作られます pDCSrc1->SelectObject( pOld[0] ); pDCSrc2->SelectObject( pOld[1] ); pDCDest->SelectObject( pOld[2] ); pDCSrc1->DeleteDC(); pDCSrc2->DeleteDC(); pDCDest->DeleteDC(); delete pDCSrc1; delete pDCSrc2; delete pDCDest; // ピクチャーコントロールに設定 ((CStatic*)GetDlgItem( IDC_IAMGE1 ))->SetBitmap( trc_img ); といった具合でしょう ・・・

関連するQ&A