C#/VB.NETで画像処理④<画像にモザイクをかける>
こんにちは、SKです。
C#/VB.NETで画像処理シリーズの第4弾。
カメラの画像にモザイク処理をかけていきます。
OpenCVSharpとは?
(前回)カメラ画像をぼかす
動画手順
①モザイク処理をかける
画像にモザイクをかけるには、一度画像を縮小し画素情報を減らし、そして元のサイズに戻すだけです。
OpenCVの"Resize"関数を使い、簡単に画像の拡大/縮小ができます。
Resize関数
http://opencv.jp/opencv-2svn/cpp/geometric_image_transformations.html#cv-resize
・第1引数:入力画像(Mat)
・第2引数:出力画像(Mat)
・第3引数:変換サイズ
前回同様、Process関数に処理を記述していきます。
ここでは、画像サイズを1/10に縮小した後、元のサイズに戻します。
private void Process(Mat img) { int w = img.Width; int h = img.Height; Cv2.Resize(img, img, new Size(w / 10, h / 10)); Cv2.Resize(img, img, new Size(w, h)); }
実行します。
画像全体にモザイクがかかりました。
↓前回のGaussianBlurと似ているようで違う処理なのが分かりますでしょうか?
最後に、コード全文を載せておきます。
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) { int w = img.Width; int h = img.Height; Cv2.Resize(img, img, new Size(w / 10, h / 10)); Cv2.Resize(img, img, new Size(w, h)); } } }
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) Dim w As Integer = img.Width Dim h As Integer = img.Height Cv2.Resize(img, img, New Size(w / 10, h / 10)) Cv2.Resize(img, img, New Size(w, h)) End Sub End Class