• 締切済み

画像を組み合わせる。

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

  • OpenCVでの画像読み込みについて

    OpenCVのファイルの読み込み部分がわからなくて困っています。 IplImage *src_img, *dst_img; if (argc < 2 || (src_img = cvLoadImage (argv[1], CV_LOAD_IMAGE_COLOR)) == 0) return -1; ここの処理は一体何を行っているのでしょうか? どのように動いているのか教えていただけないでしょうか? 一応調べた際、cvloadImage(ファイル名、状態)のようなことが書いてあったのでargv[1]を"test.jpg"に変更しても動きませんでした。

  • OpenCVで画像の一部を取り出す。

    VC++でOpenCVにて画像処理をしています。 CvRect rec = cvRect(30,120,160,50); cvSetImageROI(tmp_img1, rec); これを使って画像の一部を取り出そうと思うのですが、 取り出した部分以外を白にする仕方が分かりません。 分かる方がいらっしゃいましたらよろしくお願いいたします。

  • opencvで画像上に丸を描画の方法

    opencv初心者です。 visualstudio2012 C++でopencvを動かすことはできているのですが、目的としてフルスクリーンに表示した画像の上に2点を丸でいいので表示したいのですが、画像しか表示されない、もしくは画像とは別のウィンドウで丸が表示される状態になっています。 // OpenCV2.4Sample.cpp : コンソール アプリケーションのエントリ ポイントを定義します。 // #include "stdafx.h" //プロジェクトのプロパティ⇒C/C++⇒全般 の追加のインクルードディレクトリに // opencv2のあるフォルダ『C:\OpenCV\include』などを追加のこと #include "opencv2\opencv.hpp" #include <opencv2/core/core.hpp> #ifdef _DEBUG //Debugモードの場合 #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_core243d.lib") #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_imgproc243d.lib") #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_highgui243d.lib") #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_objdetect243d.lib") #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_contrib243d.lib") #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_features2d243d.lib") #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_flann243d.lib") #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_gpu243d.lib") #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_haartraining_engined.lib") #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_legacy243d.lib") #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_ts243d.lib") #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_video243d.lib") #else //Releaseモードの場合 #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_core243.lib") #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_imgproc243.lib") #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_highgui243.lib") #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_objdetect243.lib") #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_contrib243.lib") #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_features2d243.lib") #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_flann243.lib") #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_gpu243.lib") #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_haartraining_engined.lib") #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_legacy243.lib") #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_ts243.lib") #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_video243.lib") #endif //int _tmain(int argc, _TCHAR* argv[]) int gazouhyouzi(){ //画像データの読込 IplImage* src_img = cvLoadImage("C:\\opencv\\samples\\c\\fruits.jpg", CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR); if (src_img == NULL){ std::exit(0); } //処理後画像データの確保 // IplImage* dst_img = cvCreateImage(cvGetSize(src_img), src_img->depth, src_img->nChannels); //画像処理例(ガウシアンフィルタ) // cvSmooth(src_img, dst_img, CV_GAUSSIAN, 9); //表示ウィンドウの作成 cvNamedWindow("src",0); //srcというwindowをフルスクリーンに設定 cvSetWindowProperty("src",CV_WND_PROP_FULLSCREEN,CV_WINDOW_FULLSCREEN); //画像の表示 cvShowImage ("src", src_img); //キー入力待ち cvWaitKey (0); cv::Mat img = cv::Mat::zeros(500, 500, CV_8UC3); // 画像,円の中心座標,半径,色,線太さ,種類 cv::circle(img, cv::Point(100, 100), 20, cv::Scalar(200,0,0), -1, CV_AA); //画像データの解放 cvReleaseImage(&src_img); //全てのウィンドウの削除 cvDestroyAllWindows(); return 0; } とても見づらいとは思いますが間違っている部分の訂正をお願いしたく、投稿しました。 初心者なもので言葉の表現が間違っているかも知れませんが、よろしくおねがいします。 ちなみに上記のプログラムで実行すると、画像だけがフルスクリーンに表示されるだけです。

  • 画像と文章の作り方

    HTML文 (1)<Img Src="画像データ" Align="left"> ~~~文章~~~ <BR> (2)<Img Src="画像データ" Align="left"> ~~~文章~~~ といった感じの場合、(1)の所は左に画像、画像の横に 文章が作成されるんですが (2)の部分を作成すると(1)のような感じで 左に画像、画像の横に文章が並ばないのですが どうすれば解決するのか教えていただけないでしょうか? よろしくお願いします。

  • 【VisualC++.NET】画像の表示に関して質問です

     『VisualC++.NET』を使用して画像処理プログラムを作成している高専生なのですが、表示方法に関して質問です。  今現在は『MFCアプリケーション』の『シングルドキュメント』で画像処理プログラムを作成し、画像を表示させていますが、このままでは、元画像を表示させたまま処理後の画像を表示させることができません。  そのため、処理後の画像を「ダイアログ」に表示させたいのですが、その方法やそれにつながる良い情報をご存知の方がいらっしゃるようでしたら、お教え願います。

  • 【OpenCV】BGRからHSVへの画像変換

    OpenCVを使って任意の画像データをBGR表色系からHSV表色系に変換するプログラムです。 コンパイルして実行してみたところ、添付画像のように元画像とは色味が異なった画像が出力されてしまいます。 他の画像ファイルを使ってみましたが結果は同じでした。 HSVへの変換がうまくいってないのでしょうが、調べても原因は分かりませんでした。 どなたか分かる方がいらっしゃいましたらご指摘お願いします。 以下にコードを載せます。 #include <cv.h> #include <highgui.h> int main (int argc, char **argv){ IplImage *src_img=0; // 入力画像 IplImage *hsv_img=0; // hsvに変換された画像 // (1)画像を読み込む src_img = cvLoadImage (argv[1], CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR); // (2)読み込んだ画像をhsvに変換する hsv_img = cvCreateImage (cvGetSize (src_img), IPL_DEPTH_8U, 3); cvCvtColor (src_img, hsv_img, CV_BGR2HSV); // (3)画像を表示,キーが押されたときに終了 cvNamedWindow ("Source_Image", CV_WINDOW_AUTOSIZE); cvNamedWindow ("HSV_Image", CV_WINDOW_AUTOSIZE); cvShowImage ("Source_Image", src_img); cvShowImage ("HSV_Image", hsv_img); cvWaitKey (0); // (4)メモリ解放 cvDestroyWindow ("Source_Image"); cvDestroyWindow ("HSV_Image"); cvReleaseImage (&src_img); cvReleaseImage (&hsv_img); return 0; } OS:Windows7 OpenCVのバージョン:2.1 添付画像で用いた画像の形式:png

  • OpenCVによる動画の連続再生

    現在OpenCVを用いて1秒間の動画のを連続再生しているのですが、時間経過とともに、処理が遅くなってしまいます。 //処理ループの開始 for(;;){ //AVIファイルからフレーム画像を取り出す if(NULL==(src_img=cvQueryFrame(capture))){         capture = cvCaptureFromAVI(filename);     src_img=cvQueryFrame(capture); } 上記で再生の繰り返し処理を行っているのですが、解決方法がわかりません。 この問題の解決方法がわかる方がおられましたら、よろしくお願いいたします。

  • ヤフオクに載せる4~7枚目の画像が、ど~しても小さくなります。。

    ヤフーオークションの出品時に掲載する画像についてです。 【画像の4枚目~7枚目を掲載するには、HTML式で掲載する】との事なので、Yahoo!フォトに画像をアップロードし、その画像URLを出品文に盛り込んで作成し、確認してみたところ、4~7枚目が、ものすっごい小さくなってしまいます。 ※◆以下の様にして作成しました↓◆ <center><img src="画像4URL"> <br> <img src="画像5URL"> <br> <img src="画像6URL"> <br> <img src="画像7URL"></center> そこで、ピクセルを指定して掲載してみたところ、今度はサイズは大きくなったのですが、モザイクの様になり、見るに耐えられない画像になってしまいました。 ※◆以下の様に作成しました↓◆ <center> <img src="画像アドレス" width="640" height="480"> </center> アップロードする前の画像サイズは、55KB位でヤフオクの上限基準はクリアしているのですが、どうやらYahoo!フォトにアップロードする際にとても小さいサイズ(0,5KBなど)に自動変換されている?ようなのです。それを回避できればいいのかも知れませんが、設定方法も見当たりません…。 どうやったら、4~7枚目画像が大きく綺麗に掲載できるのでしょうか?? 私では知識が乏しく、もうお手上げ状態です。どうかご教授下さい。宜しくお願い致します。 (1~3枚目の画像掲載は正常に行えるのですが…。)

  • 組み込みでの画像処理

    こんにちは 最近組み込みプログラミングについて勉強し始めました初心者ですので、質問に稚拙な部分等があっても目をつぶっていただけるとありがたいです。 今まで、スタンドアローンのPCで画像処理(OpenCVを使用)をしたことがあるのですが、組み込み機器上で画像処理を行う場合にもOpenCVは使用できるのでしょうか? また使用できない場合は、どのように画像処理を行うのでしょうか? お答えよろしくお願いいたします。

  • 画像タグについて

    画像タグについて テキストエディタにHTML(タグ)を入力してホームページの作成を目指して勉強しています。 ボタンの画像を横一列で4つ並べる場合のでタグの入力の仕方なんですが、 使用しているテキストでは改行せずに横に並べてタグを入力していきましょう。 となっています。 正解→<img src="A" ><img src="B" ><img src="C" ><img src="D" > 不正解↓ <img src="A" > <img src="B" > <img src="C" > <img src="D" > 理由としてはブラウザできれいに表示されるからだそうです。 実際にやってみると確かに不正解パターンより正解パターンの方がブラウザで隙間なくきれいに表示されています。 疑問なのですが、同じタグを縦で入力するか横に入力するかで なぜ、ブラウザの表示に違いで出るのでしょうか? また、<img src="" >タグ以外でも,改行しないで横に入力するタグはあるのでしょうか? それはどうやって見分けるのでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • HTML

専門家に質問してみよう