Quantcast
Channel: SourceChord
Viewing all articles
Browse latest Browse all 153

OpenCvSharp3を使ってみた

$
0
0

以前、C#からOpenCVを扱うためのラッパーライブラリのOpenCvSharpというライブラリを使ってみました↓
http://sourcechord.hatenablog.com/entry/2014/09/22/010344

OpenCV3.0に対応した、このライブラリの新バージョンOpenCvSharp3を使ってみたのでφ(..)メモメモ

変更点については、作者さんの↓の記事を参照

よく使うクラスなどに関わる、大きな変更点は以下のような点でしょうか。

  • IplImage型がなくなった
  • Cvクラス、CvWindowクラスなどがなくなった⇒Cv2クラス、Windowクラスを使う

今回のサンプル類一式は、以下の場所に置いてます。
https://github.com/sourcechord/OpenCvSharp3Sample

コンソールアプリ

とりあえず、GitHubのReadMeを見ながら、最低限のサンプルコードを動かしてみます。

class Program
    {
        staticvoid Main(string[] args)
        {
            var src = new Mat(@"Images/1.jpg");
            var dst = new Mat();

            Cv2.CvtColor(src, dst, ColorConversionCodes.BGRA2GRAY);

            using (new Window("dst image", dst))
            {
                Cv2.WaitKey();
            }
        }
    }

画像データは、IplImage型を使わずにMat型で扱うということを意識すれば、だいたい同じ感覚で書けそうですね。

f:id:minami_SC:20160811121338p:plain:w400

WPFとの連携

以前のサンプルと同じように、OpenCVSharpで加工した画像を、WPFのImageコントロールで表示してみます。

MatからWriteableBitmapへの変換

Mat型にもToWriteableBitmapという拡張メソッドが用意されていて、IplImageと同じようにWriteableBitmapに変換できます。

サンプルコード

ボタンを押すと、このように画像をグレースケールで表示します。
f:id:minami_SC:20160811121355p:plain:w400

MainWindow.xaml

<Window x:Class="WpfSample.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:local="clr-namespace:WpfSample"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"Title="MainWindow"Width="525"Height="350"mc:Ignorable="d"><Grid><Grid.RowDefinitions><RowDefinition /><RowDefinition Height="Auto" /></Grid.RowDefinitions><Image x:Name="imgResult"Margin="10" /><Button Grid.Row="1"Width="75"Margin="10"HorizontalAlignment="Right"VerticalAlignment="Top"Click="Button_Click"Content="表示" /></Grid></Window>

MainWindow.xaml.cs

/// <summary>/// MainWindow.xaml の相互作用ロジック/// </summary>publicpartialclass MainWindow : System.Windows.Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        privatevoid Button_Click(object sender, RoutedEventArgs e)
        {
            var src = new Mat(@"Images/1.jpg");
            var dst = new Mat();
            Cv2.CvtColor(src, dst, ColorConversionCodes.BGRA2GRAY);
            imgResult.Source = dst.ToWriteableBitmap();
        }
    }

注意点
System.WindowsOpenCvSharp名前空間に、それぞれWindowという同名のクラスが定義されています。
そのため、usingでどちらの名前空間も読み込んでいる場合には、MainWindowの親クラス指定で、明示的にクラス名を指定する必要があります。


Viewing all articles
Browse latest Browse all 153

Trending Articles