C# BitmapとIplImage->Bitmapの相違について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
kazuoni
記事: 17
登録日時: 14年前
住所: 愛知
連絡を取る:

C# BitmapとIplImage->Bitmapの相違について

#1

投稿記事 by kazuoni » 9年前

お久しぶりです。kazuoniです。

少し気になったことがあるので質問させていただきます。
環境は以下の通りです。

開発環境 MicroSoft Visual Studio Community 2013
使用ライブラリ OpenCvSharp

C#標準で用意されているBitmapで画像を読み込んだ画像(Image A)と
OpenCvSharpで一度読み込んだのち、Bitmap変換した画像(Image B)で格納値が微妙に異なる
ことがあります。(この現象が生じる画像を添付いたしました。)

二画像の格納値を比較してみたところ、以下の点が異なっていました。
以下、相違のあったプロパティ名です。
・Flags
・HorizontalResolution (※)
・PropertyIdList
・PropertyItems
・VerticalResolution(※)

特に(※)の部分で相違があると少々困ってしまうのですが、なぜこのようなことが起きてしまうのでしょうか。
現状はImage Bの方で当方の仕様を満たしているので、問題ないのですが、
少し腑に落ちない結果となっているため質問させていただきました。

ご回答のほどよろしくお願い致します。

コード:

                Bitmap bitmap = new Bitmap(filename); // Image A
                Bitmap bitmap_ = BitmapConverter.ToBitmap(Cv.LoadImage(filename)); // Image B
添付ファイル
image.zip
対象画像
(5.09 KiB) ダウンロード数: 126 回

YuO
記事: 947
登録日時: 14年前
住所: 東京都世田谷区

Re: C# BitmapとIplImage->Bitmapの相違について

#2

投稿記事 by YuO » 9年前

OpenCVの方は試していませんが,BITMAPINFOHEADERにある情報と,System.Drawing.Bitmapから得られる情報は一致しています。
元々の想定自体が間違っていませんか。

ちなみに,チェックは添付のプログラムで行いました。
  • ConsoleApplication5がC++で単純にBITMAPFILEHADERとBITMAPINFOHEADERを読んでBITMAPINFOHEADERにあるResolutionを表示するものと,GDI+を使ってResolutionを表示するもの。
    Reference Sourceを元にGDI+における対応を決定しています。
  • ConsoleApplication1はC#でResolutionを読み出すもの。
添付ファイル
ConsoleApplication5.zip
Visual Studio 2015 Solution (Compatible with Visual Studio 2013)
(29 KiB) ダウンロード数: 132 回

アバター
kazuoni
記事: 17
登録日時: 14年前
住所: 愛知
連絡を取る:

Re: C# BitmapとIplImage->Bitmapの相違について

#3

投稿記事 by kazuoni » 9年前

Yuo様

ご回答ありがとうございました。
確認してみたところ、おっしゃる通り、前提条件が間違っておりました。

コントロール描画の際に、Graphicオブジェクトを自前で生成しており、解像度が未設定(初期値xdpi=ydpi=96)でした。
自前で描画画像に合わせて生成することで、System.Drawing.Bitmapで生成した画像でも仕様を満たすようになりました。

Yuoさんのご提示していただいたサンプルでIplImage -> Bitmapと変換してみましたが、
xdpi = ydpi = 96となるようです。(本来は72dpi)
調べてみたらOpenCVは仕様でdpi=96で吐き出すんですね。調べて初めて知りました。
Change dpi of an image in OpenCV

これにて解決とさせていただきます。
解決まで導いていただき誠にありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る