C#/VB.NETで画像処理③<画像をぼかす(平滑化)>
こんにちは、SKです。
C#/VB.NETで画像処理シリーズの第3弾。
カメラの画像をぼかす(=平滑化)処理をかけていきます。
OpenCVSharpとは?
カメラ画像取得プロジェクト
動画手順
①画像処理用の関数を追加する
カメラ画像を加工する関数”Process”を追加します。引数に画像データ"img"を渡します。Mat型の引数は自動的に参照渡しになるので、後はこのimgを加工していくだけで、PictureBoxにその画像が表示されます。
②GaussianBlurでぼかす
OpenCVには平滑化処理がいくつか用意されていますが、代表的なGaussianBlur(ガウシアンブラー)を使います。
GaussianBlur関数
http://opencv.jp/opencv-2svn/cpp/imgproc_image_filtering.html#cv-gaussianblur
・第1引数:入力画像(Mat)
・第2引数:出力画像(Mat)
・第3引数:カーネルサイズ=ぼかしの強さ(Size型、正の奇数を指定)
・第4引数:0でOK
private void Process(Mat img) { Cv2.GaussianBlur(img, img, new Size(31, 31), 0); }
実行します。
画像全体が強めにぼかされました。
超簡単!このように、様々な画像の加工を関数1つ呼ぶだけで実現できるのがOpenCVというライブラリです。
最後に、コード全文を載せておきます。
C#
using System; using System.Threading.Tasks; using System.Windows.Forms; using OpenCvSharp; using OpenCvSharp.Extensions; namespace WindowsFormsApp1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { Task.Run(() => { using (VideoCapture v = new VideoCapture(0)) using (Mat img = new Mat()) { while (true) { v.Read(img); Process(img); pictureBox1.Image = BitmapConverter.ToBitmap(img); } } }); } private void Process(Mat img) { Cv2.GaussianBlur(img, img, new Size(31, 31), 0); } } }
Imports OpenCvSharp Imports OpenCvSharp.Extensions Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Task.Run(Sub() Using v As New VideoCapture(0) Using img As New Mat Do v.Read(img) Process(img) PictureBox1.Image = img.ToBitmap Loop End Using End Using End Sub) End Sub Private Sub Process(ByVal img As Mat) Cv2.GaussianBlur(img, img, New Size(31, 31), 0) End Sub End Class