2021年3月19日金曜日

【C#】OpenCvSharpでの画像読み込み、表示、色変換

前回C#環境でOpenCvSharpを導入することで
OpenCVを使った開発環境を簡単に構築することができた…と。
(思い返し)

んで、だんだんOpenCVを使い始めていきましょうということでですね。
先ずは画像の読み込みや表示、色変換等をやりたいなということで、
こんなのをやってみようかと思います。

そんなに難しい内容ではないんですが、
C++とちょっとだけ記述が違ってつまるところあったりするからね。
自分用に。




一番はじめに

OpenCvSharpを使用する箇所にはusingで下記の記載を入れておいた方がよさそう。
using OpenCvSharp;

画像の読み込み方法

画像の読み込みは「Cv2.ImRead」メソッドで読み込みます。
ファイル名を指定して、Matデータ型で返す。
大体C++と同じですかね。
こんな感じで使用できる。
Mat image = Cv2.ImRead( filepath );
Matに読み込んだ画像の情報が返ってきますね。
image.Widthとかimage.Heightみたいな感じで縦横のサイズを取得したりもできます。

第2引数でImreadModes.Colorというのがあって、
どうも減色させて読み込んだりできるのかな?
そっちはまだ試していないですね…。

読み込んだ画像の表示方法

上記のCv2.ImReadで画像ファイルを読み込んだら、
Cv2.ImShowで表示できます。
この時にウィンドウ名を指定します。
既に指定しているウィンドウ名を指定した場合は、そのウィンドウの内容が更新されます。
下記のような形で表示できる。
Mat image = Cv2.ImRead( filepath );
Cv2.ImShow( "loadimage", image );

 


読み込んだ画像ファイルの確認であったりとか、
画像処理した後の内容の確認だったりとかで、
結構ひんぱんに使うんではないでしょうかね?

色変換の方法

読み込んだ画像の色変換を行う際の方法を最後に。
これは「CvtColor」を使用します。
Mat情報から呼び出す方法は下記のような感じ。
Mat image = Cv2.ImRead( filepath );
Mat cnv_image = image.CvtColor( 変換コード );

「Cv2.CvtColor」メソッドで変換する方法もあります。
こちらは変換元と変換先を指定して使用するみたいですね。
こっちで呼び出す際は下記のような感じ。
Mat image = Cv2.ImRead( filepath );
Mat cnv_image = new Mat();
Cv2.CvtColor( image, cnv_image, 変換コード );
で、変換コード部分に定義値を指定して、
グレイスケールに変換したり、という色変換を行います。
通常、何も指定しない場合はImReadで読み込んだデータはBGR形式になっているので、
「ColorConversionCodes.BGR2...」の定義を使用します。
結構いろいろ変換の種類がありますが、その一部のみ。

/* BGR画像からグレイスケール */
dst = image.CvtColor(ColorConversionCodes.BGR2GRAY);
/* BGR画像からRGBに変換 */
dst = image.CvtColor(ColorConversionCodes.BGR2RGB);
/* BGR画像からLUV色空間に変換 */
dst = image.CvtColor(ColorConversionCodes.BGR2Luv);
/* BGR画像からHSV色空間に変換 */
dst = image.CvtColor(ColorConversionCodes.BGR2HSV);
/* BGR画像からLAB色空間に変換 */
dst = image.CvtColor(ColorConversionCodes.BGR2Lab);

それぞれImShowで表示すると下記のような感じになります。
下の段の左からグレースケール、 LUV、HSV、LABです。


おわり

画像の表示は処理の過程中にデバッグ用で使用したりするので、
結構頻繁に使用しますね。

色変換はグレースケール変換はよく使用する印象ですね。
HSV変換とかは…ほかの画像処理とかで使用するんですかね?

とりあえず今回はこんな感じです。





0 件のコメント:

コメントを投稿