- 締切済み
画像を組み合わせる。
VisualC++のMFCにて画像処理を行っています。 それぞれ二つの画像を2値化し、そのお互いの黒になっている部分を合わせ、一つの画像にしたいと思うのですが、合わせ方が分かりません。 2値化はOpenCVにて作成しました。 二つの画像はsrc_imgとtrc_imgとしています。 分かる方がいらっしゃいましたらよろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- machongola
- ベストアンサー率60% (434/720)
こんばんは。 >>そのお互いの黒になっている部分を合わせ、一つの画像にしたい [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に最終結果を出力してます)。
- redfox63
- ベストアンサー率71% (1325/1856)
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 ); といった具合でしょう ・・・
お礼
ご回答ありがとうございます。 お二人のご意見を使い、考えてみたいと思います。 またの機会がありましたらよろしくお願いいたします。