C#

【WPF】OpenCvSharpの使い方を紹介

最近のスマートフォンやデジタルカメラで写真を撮ると、顔を自動で認識してピントをあわせてくれます。また、顔のパーツと輪郭の位置関係から登録されている顔であれば、スマホのロックを解除することもできます。顔認識機能てほんと身近なところで多く活用されていますよね。
こういうことができる様になったのも「画像処理」の技術が凄まじく発達したからでしょう。

この画像処理ですが、C#で扱うなら「OpenCVSharp」というパッケージをインストールして実装するのが一般的みたいです。この記事ではOpenCVSharpを使うまでの手順と簡単なサンプルを紹介しています。

OpenCVSharpとは

インテルが開発・公開した画像処理などを行うライブラリであるOpenCVを、C#で利用するためのラッパーです。

OpenCVは画像処理・画像分析及び機械学習の機能を持つC/C++、Python、MATLAB用のライブラリです。対象言語以外でこのライブラリを使いたいて時は、非公式にはなりますが各種言語に対応したはラッパーが存在します。

OpenCVSharpはC#で利用する場合のライブラリーでshimatさんという日本人の方が個人で開発されています。本家のOpenCVが更新されれば、OpenCVSharpも更新されています。
現在の最新バージョンは、4.5.1(2021年3月時点)です。他にも同じようなラッパーライブラリはいくつか存在しますが、今でも更新を続けているのはOpenCVSharpだけでしょう。

shimatさんのブログ(最近の更新はないようです。)

OpenCVSharpのGitHub

開発環境

  • OS:Windows 10 Home
  • 開発環境:Visual Studio 2019
  • 言語:C#
  • 開発プラットフォーム:WPF

OpenCVSharpのインストール

ソリューションエクスプローラーを開いて、プロジェクト名の上にカーソルを移動させて右クリックします。Nugetの管理画面を開いて検索欄に『OpenCVSharp』と入力します。
検索結果の一覧から下記のパッケージのインストールを行います。OpenCvSharp4をインストールすると関連パッケージも同時にインストールされます。

OpenCvSharp4
OpenCvSharp4.runtime.win
OpenCvSharp4.WpfExtensions

プログラムの実装

下準備はできたので、早速コードを実装していきます。まずOpenCvSharpを使える様にusingディレクティブへ追加します。

using OpenCvSharp;

次はMatクラスを使ってみましょう。Matクラスとは多次元配列を格納するためのクラスで、主に画像や2次元の行列を扱う時に利用します。
OpenCvSharpではよく使うので覚えておくといいでしょう。
以下にMatクラスを使ったサンプルを記載しています。

public partial class MainWindow : System.Windows.Window
{
    public MainWindow()
    {
        InitializeComponent();

        Loaded += (s, e) =>
        {
            Mat img = new Mat(300, 500, MatType.CV_8UC3, Scalar.Green);
            Cv2.ImShow("img", img);
            Cv2.WaitKey(1);
        };
    }
}

引数をとるコンストラクタを使ってMatのインスタンスを生成しています。
画像サイズとビット深度、チャンネル数、画像の色を指定しています。
サンプルは、以下のような意味になります。

画像サイズ縦:300、横:500
ビット深度符号なしの8bit整数
チャンネル数
画像の色緑色

cv2.imshow()は画像をウィンドウ上に表示します。第1引数は文字列型で指定するウィンドウ名です。第2引数は表示したい画像です。

cv2.waitKey()は指定された時間だけキーボード入力を受け付けます。入力待ちの間に何かのキーを打てば、プログラムはそれ以降の処理を実行します。引数に0を指定した時は、キーを打つまで無期限で待ち続けます。引数は入力待ち時間でミリ秒単位できます。

ビット深度とチャンネル数

よく分からない単語が出てきましたね。この単語について説明したいと思います。
ビット深度とは色数のことです。例えば、1ビットだと0,1の2種類の値を表せるので2色表現できます。8ビットだと0〜255で256色の表現ができます。OpenCV内に定義されるビット深度は以下の通りです。

CV_8U符号なしの8bit整数( 0~255 )
CV_8S符号付きの8bit整数( -128~127 )
CV_16U符号なしの16bit整数( 0~65535 )
CV_16S符号付きの16bit整数( -32768~32767 )
CV_32S符号付きの32bit整数( -2147483648~2147483647 )
CV_32F32bit浮動小数点数 ( -FLT_MAX..FLT_MAX, INF, NAN )
CV_64F64bit浮動小数点数( -DBL_MAX..DBL_MAX, INF, NAN )

チャンネル数とは簡単にいうと画像をモノクロやカラーにする変換するツールみたいなものです。グレースケール画像の場合は「1」、カラー画像の場合は「3」、アルファチャンネル付きのカラー画像の場合は「4」です。

アプリケーション起動

では、デバックしてみます。緑色の画像が表示されたウィンドウが出てくれば成功です。

まとめ

C#で画像処理ができるパッケージであるOpenCvSharpを紹介しました。今回紹介したのは、ほんの1部分でしかありません。
次回は画像を取り込んで加工をしてみたいと思います。

以上、最後まで読んでいただきありがとうございました。

プログラミングを学習したいなら…

プログラミングスキルを身に付けるなら、プログラミングを効率良く学べる
プログラミングスクール」がオススメです。

特にこんな方にオススメ!!
これからエンジニアを目指したい
プログラミングの専門性を高めたい
プログラミングを学んで副業をしたい
エンジニアに転職して年収をアップさせたい

プログラミングを触ったことがない未経験からでも、プログラミングスクールで学習すれば、エンジニアへ就職・転職することも可能です。

あなたの「行動力」と「やる気」で、あなたの人生を大きく変えるチャンスになることでしょう。

プログラミングスクールに興味がある方は是非チェックしてみてください。

> プログラミングを学ぶ <

COMMENT

メールアドレスが公開されることはありません。

CAPTCHA