• 締切済み

OpenCV処理画像をpictureBoxへ。

VC++にて画像処理を行っています。 OpenCVのライブラリを使って画像処理をしようと考えているのですが、 処理した画像がMFCで作成したpitureBoxに表示の仕方が分かりません。 調べていくうちに、 「IplImage形式の画像を直接ウィンドウに描画することは出来ないので、 画像をDIBセクション形式に変換してWindows固有の描画処理を行うといい。」 ということが分かり、DIBセクション形式への変換には、IPLを入手し、 「iplConvertToDIB()関数」を使うということが分かりました。 このiplConvertToDIB()関数をつかって画像表示の方法を教えてはいただけないでしょうか?サンプルのソースなどありましたらよろしくお願いいたします。

みんなの回答

回答No.2

 こんばんは。補足いただきました。 >>このiplConvertToDIBSep関数を使うためには >>IPLを入手しなくてはいけないのでしょうか? >>OpenCVだけではいけないのでしょうか?  はい。自力での変換も可能では有りますが、非常に面倒です。 >>また、どこで入手できるのか教えていただければ幸いです。  此方に落ちていました。インストール後の設定も参考になると思います。  http://chihara.naist.jp/people/2004/kenta-t/OpenCV/pukiwiki/index.php?IPL%A4%CE%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB

回答No.1

 こんばんは。  iplConvertToDIB()よりもiplConvertToDIBSep()の方が使い勝手が良いそうです。  24ビットのDIBで表示するのが最も簡単です。  以下参考程度に。 ///////////////////////////////////////////////////////////////////////////// // どこかでボタンが押された //ファイルを読み込む 24ビット扱い m_pIpl = ::cvLoadImage("ファイル名"); ///////////////////////////////////////////////////////////////////////////// // iplの後始末 CPictureBox::~CPictureBox() { ::cvReleaseImage(&m_pIpl); } ///////////////////////////////////////////////////////////////////////////// // CPictureBox メッセージ ハンドラ void CPictureBox::OnPaint() { CPaintDC dc(this); // 描画用のデバイス コンテキスト // TODO: この位置にメッセージ ハンドラ用のコードを追加してください //読めていないので引き返す if(!m_pIpl)return; //DIBのヘッダ iplを24ビットのDIBに変換する BITMAPINFO bmi = {{sizeof(BITMAPINFOHEADER)}}; bmi.bmiHeader.biWidth = m_pIpl->width; bmi.bmiHeader.biHeight = m_pIpl->height; bmi.bmiHeader.biBitCount = 24; bmi.bmiHeader.biPlanes = 1; //DIBのバッファを割り当てる char* pDIB = static_cast<char*>(::malloc(m_pIpl->imageSize)); //iplからDIBへ変換 ::iplConvertToDIBSep(m_pIpl, &bmi.bmiHeader, pDIB, IPL_DITHER_NONE, IPL_PALCONV_NONE); //DIBをウィンドウに描く ::SetDIBitsToDevice(dc, 0, 0, m_pIpl->width, m_pIpl->height, 0, 0, 0, m_pIpl->width, pDIB, &bmi, DIB_RGB_COLORS); //DIBのバッファを後始末 ::free(pDIB); // 描画用メッセージとして CStatic::OnPaint() を呼び出してはいけません }

s0511146
質問者

補足

早速の回答ありがとうございます。 このiplConvertToDIBSep関数を使うためには IPLを入手しなくてはいけないのでしょうか? OpenCVだけではいけないのでしょうか? また、どこで入手できるのか教えていただければ幸いです。 よろしくお願いいたします。

関連するQ&A

専門家に質問してみよう