using System; using Emgu.CV; using Emgu.CV.Structure; namespace ImageMinipulation { public class vanGoghFilters { /// /// Displays an image in a window and displays the same image but bluerd in a new window /// public void One() { Mat pic = new Mat(); Mat gaussianBlur = new Mat(); pic = CvInvoke.Imread("./img/StarryNight.jpg"); CvInvoke.GaussianBlur(pic, gaussianBlur, new System.Drawing.Size(15, 15), 5.0); CvInvoke.Imshow("starry night", pic); CvInvoke.Imshow("blurry night", gaussianBlur); CvInvoke.WaitKey(); } /// /// Resizes and image to a predetermined amount /// public void Two() { Mat pic = CvInvoke.Imread("./img/StarryNight.jpg"); Mat resizedPic = new Mat(); int height = pic.Rows; int width = pic.Cols; Console.WriteLine($"Starry Night is : {width} x {height}"); CvInvoke.Resize(pic, resizedPic, new System.Drawing.Size(400, 500)); CvInvoke.Imshow("Starry Night", pic); CvInvoke.Imshow("resized Night", resizedPic); CvInvoke.WaitKey(); } /// /// Rotates an image around the center 45 degrees /// public void Three() { Mat pic = CvInvoke.Imread("./img/StarryNight.jpg"); Mat rotatedPic = new Mat(); double angleFortyFive = 45; int width = pic.Cols; int height = pic.Rows; System.Drawing.PointF center = new System.Drawing.PointF((width - 1) / 2.0f, (height - 1) / 2.0f); Mat rotationMatrix = new Mat(); CvInvoke.GetRotationMatrix2D(center, angleFortyFive, 1.0, rotationMatrix); CvInvoke.WarpAffine(pic, rotatedPic, rotationMatrix, new System.Drawing.Size(width, height)); CvInvoke.Imshow("Rotated Night", rotatedPic); CvInvoke.WaitKey(); } /// /// Changing the color of pixels inside a range to new colors /// public void Four() { Mat pic = CvInvoke.Imread("./img/StarryNight.jpg"); Image convertPic = pic.ToImage(); int width = pic.Cols; int height = pic.Rows; var image = convertPic.InRange(new Bgr(75, 0, 0), new Bgr(255, 125, 125)); for (int i = 0; i < image.Rows; i++) { for (int j = 0; j < image.Cols; j++) { var num = image[i, j]; if (num.Intensity > 0) { convertPic[i, j] = new Bgr(convertPic[i, j].MCvScalar.V0 - 50, convertPic[i, j].MCvScalar.V1 + 100, convertPic[i, j].MCvScalar.V2 - 50); } } } Mat changedPic = convertPic.Mat; CvInvoke.Imshow("Starry Night", pic); CvInvoke.Imshow("Color-Shifted Night", changedPic); CvInvoke.WaitKey(); } /// /// /// public void Five() { Mat pic = CvInvoke.Imread("./img/StarryNight.jpg"); /// This is a 3D matrix, and we will be using a process called convoluion /// Convolution is the application of a kernel to each individual pixal and it's surrounding pixels /// then you take that value and put it back in the pixel and some effect happens depending on the valuse /// in the kernel /// A new convoluted kernal can be looked up for the effect you want (this kernal is basic sharpen) float[,] kernalArray = new float[3, 3] { { 0, -1, 0}, { -1, 5, -1}, { 0, -1, 0} }; ConvolutionKernelF kernal = new ConvolutionKernelF(kernalArray); Mat filteredPic = new Mat(); pic.CopyTo(filteredPic); CvInvoke.Filter2D(pic, filteredPic, kernal, new System.Drawing.Point(0, 0)); CvInvoke.Imshow("Convoluted Night", filteredPic); CvInvoke.WaitKey(); } } }