VC++にて画像処理を行っています。
OpenCVのライブラリを使って画像処理をしようと考えているのですが、
処理した画像がMFCで作成したpitureBoxに表示の仕方が分かりません。
調べていくうちに、
「IplImage形式の画像を直接ウィンドウに描画することは出来ないので、
画像をDIBセクション形式に変換してWindows固有の描画処理を行うといい。」
ということが分かり、DIBセクション形式への変換には、IPLを入手し、
「iplConvertToDIB()関数」を使うということが分かりました。
このiplConvertToDIB()関数をつかって画像表示の方法を教えてはいただけないでしょうか?サンプルのソースなどありましたらよろしくお願いいたします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
こんばんは。
補足いただきました。>>このiplConvertToDIBSep関数を使うためには
>>IPLを入手しなくてはいけないのでしょうか?
>>OpenCVだけではいけないのでしょうか?
はい。自力での変換も可能では有りますが、非常に面倒です。
>>また、どこで入手できるのか教えていただければ幸いです。
此方に落ちていました。インストール後の設定も参考になると思います。
http://chihara.naist.jp/people/2004/kenta-t/Open …
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() を呼び出してはいけません
}
この回答への補足
早速の回答ありがとうございます。
このiplConvertToDIBSep関数を使うためには
IPLを入手しなくてはいけないのでしょうか?
OpenCVだけではいけないのでしょうか?
また、どこで入手できるのか教えていただければ幸いです。
よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(OS) Windowsで大量の画像サイズを半自動で変更する方法 6 2023/02/17 08:45
- Excel(エクセル) EXCELのグラフを画像(JPG形式)で保存、通常実行がうまく行かない。ステップインはうまく行く 3 2022/08/30 12:06
- Excel(エクセル) エクセル、画像ファイル名の書かれたセル(複数個所)に画像を一括で表示させる方法 1 2023/04/19 00:19
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- Illustrator(イラストレーター) ワードに貼った画像のキャンバスと画像本体のサイズの調整 2 2022/05/19 18:31
- Visual Basic(VBA) エクセルマクロでアニメを作る方法を教えてください。 1 2023/02/07 14:27
- その他(プログラミング・Web制作) 監視カメラを水平につないでパノラマの映像を作りたい 1 2022/09/06 15:26
- HTML・CSS リンクバナーのHTMLタグ。画像を変えたり、設置位置を変えるとバナー貼付け側はどう見える? 2 2023/02/01 12:01
- 数学 数学 数と式 5 2023/04/08 15:47
- その他(Microsoft Office) Excelの時間変換について 300(分)→5(時間) を5:00とする表記する方法は、ありますでし 3 2022/07/29 16:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
MFCでOnPaintのタイミング
-
MFCのタイマーのつかい方を教え...
-
[VB.net] DataGridViewの列ヘッ...
-
画面リサイズ時のちらつきをな...
-
VB6,リストボックスの特定行の...
-
InvalidateRectの使い方について
-
WM_SIZEとWM_SIZINGの違い (Win...
-
VC++2010(MFC)での描画
-
画面全体を再描画させたい
-
ダイアログベースの再描画について
-
WM_PAINT
-
Windowsプログラミング:BitBlt...
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
連続で印刷すると画像が更新さ...
-
グラフの交点の求め方(Excel)
-
勝手にウィンドウが開いて止ま...
-
フォームでPDFを表示させた...
-
マインクラフト(pc版)で座標...
-
フォントの大きさ
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB6,リストボックスの特定行の...
-
[VB.net] DataGridViewの列ヘッ...
-
NVIDIAのシェーダーキャッシュ
-
MFCでOnPaintのタイミング
-
TextBoxに文字を書いても表示さ...
-
word
-
UpdateData( FALSE); による文...
-
VC++プログラムをつかったBMP画...
-
InvalidateRectの使い方について
-
StretchBlt関数について
-
OneNote 2010 文字と描画がずれる
-
C# ラバーバンドの描画を快適に...
-
エクセルでガンチャートを作成...
-
C++にて、塗りつぶされた円を描...
-
VBAにGDI+を参照させる方法
-
GDI+で高速な描画
-
MFC DrawText 背景色とフォント
-
MFCのタイマーのつかい方を教え...
-
FlexGridの一部のみ表示を更新...
-
Labelの文字をスクロールする際...
おすすめ情報