134 lines
4.3 KiB
C#
134 lines
4.3 KiB
C#
using System;
|
|
using Emgu.CV;
|
|
using Emgu.CV.Structure;
|
|
|
|
namespace ImageMinipulation {
|
|
|
|
public class vanGoghFilters
|
|
{
|
|
/// <summary>
|
|
/// Displays an image in a window and displays the same image but bluerd in a new window
|
|
/// </summary>
|
|
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();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Resizes and image to a predetermined amount
|
|
/// </summary>
|
|
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();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Rotates an image around the center 45 degrees
|
|
/// </summary>
|
|
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();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Changing the color of pixels inside a range to new colors
|
|
/// </summary>
|
|
public void Four()
|
|
{
|
|
Mat pic = CvInvoke.Imread("./img/StarryNight.jpg");
|
|
Image<Bgr, byte> convertPic = pic.ToImage<Bgr, byte>();
|
|
|
|
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();
|
|
}
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
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();
|
|
}
|
|
}
|
|
} |