Added four new functions and three new pictures
This commit is contained in:
1 parent
424280a29c
commit
3ed4f996e7
15 files changed
+142
-3
No files matched your search
+124
-1
@@ -1,9 +1,14 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Numerics;
|
||||||
using Emgu.CV;
|
using Emgu.CV;
|
||||||
using Emgu.CV.Structure;
|
using Emgu.CV.Structure;
|
||||||
|
using Emgu.CV.Util;
|
||||||
|
|
||||||
namespace ImageMinipulation {
|
namespace ImageMinipulation {
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// All programs are made using videos from (Programming with Chris) video seiress
|
||||||
|
/// </summary>
|
||||||
public class vanGoghFilters
|
public class vanGoghFilters
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -101,7 +106,7 @@ namespace ImageMinipulation {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
/// Adds a sharpen filter to a picture based on an array
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void Five()
|
public void Five()
|
||||||
{
|
{
|
||||||
@@ -130,5 +135,123 @@ namespace ImageMinipulation {
|
|||||||
|
|
||||||
CvInvoke.WaitKey();
|
CvInvoke.WaitKey();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Uses the sobel edge detection to output just the edges in the image
|
||||||
|
/// </summary>
|
||||||
|
public void Six()
|
||||||
|
{
|
||||||
|
Mat pic = CvInvoke.Imread("./img/iPhone.jpg");
|
||||||
|
|
||||||
|
Mat guassianBlur = new Mat();
|
||||||
|
Mat sobelX = new Mat();
|
||||||
|
Mat sobelY = new Mat();
|
||||||
|
Mat sobelXY = new Mat();
|
||||||
|
|
||||||
|
pic.CopyTo(sobelX);
|
||||||
|
pic.CopyTo(sobelY);
|
||||||
|
pic.CopyTo(sobelXY);
|
||||||
|
|
||||||
|
CvInvoke.GaussianBlur(pic, guassianBlur, new System.Drawing.Size(3, 3), 5.0);
|
||||||
|
|
||||||
|
CvInvoke.Sobel(guassianBlur, sobelX, Emgu.CV.CvEnum.DepthType.Default, 1, 0, 5);
|
||||||
|
CvInvoke.Sobel(guassianBlur, sobelY, Emgu.CV.CvEnum.DepthType.Default, 0, 1, 5);
|
||||||
|
CvInvoke.Sobel(guassianBlur, sobelXY, Emgu.CV.CvEnum.DepthType.Default, 1, 1, 5);
|
||||||
|
|
||||||
|
CvInvoke.Imshow("sobelX", sobelX);
|
||||||
|
CvInvoke.Imshow("sobelY", sobelY);
|
||||||
|
CvInvoke.Imshow("sobelXY", sobelXY);
|
||||||
|
|
||||||
|
CvInvoke.WaitKey();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Uses the canny edge detection to output the edges in an image (this method can be a little sharper depending on the image)
|
||||||
|
/// </summary>
|
||||||
|
public void Seven()
|
||||||
|
{
|
||||||
|
Mat pic = CvInvoke.Imread("./img/iPhone.jpg");
|
||||||
|
|
||||||
|
Mat guassianBlur = new Mat();
|
||||||
|
Mat cannyPic = new Mat();
|
||||||
|
|
||||||
|
var averge = pic.ToImage<Gray, byte>().GetAverage();
|
||||||
|
|
||||||
|
var lowerthreshold = Math.Max(0, (1.0 - 0.33) * averge.Intensity);
|
||||||
|
var upperthreshold = Math.Max(255, (1.0 + 0.33) * averge.Intensity);
|
||||||
|
|
||||||
|
CvInvoke.GaussianBlur(pic, guassianBlur, new System.Drawing.Size(3, 3), 5.0);
|
||||||
|
CvInvoke.Canny(guassianBlur, cannyPic, lowerthreshold, upperthreshold, 3);
|
||||||
|
|
||||||
|
CvInvoke.Imshow("Canny", cannyPic);
|
||||||
|
|
||||||
|
CvInvoke.WaitKey();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Makes a threshold image to tell us where the contours are then defines those contours with green lines and fills the contourd parts in with blue
|
||||||
|
/// </summary>
|
||||||
|
public void Eight()
|
||||||
|
{
|
||||||
|
Mat pic = CvInvoke.Imread("./img/iPhone.jpg");
|
||||||
|
Mat thresholdPic = new Mat();
|
||||||
|
Mat hierarchy = new Mat();
|
||||||
|
|
||||||
|
VectorOfVectorOfPoint contours = new VectorOfVectorOfPoint();
|
||||||
|
|
||||||
|
Image<Gray, byte> grayPic = pic.ToImage<Gray, byte>();
|
||||||
|
|
||||||
|
CvInvoke.Threshold(grayPic, thresholdPic, 210, 255, Emgu.CV.CvEnum.ThresholdType.Binary);
|
||||||
|
CvInvoke.FindContours(thresholdPic, contours, hierarchy, Emgu.CV.CvEnum.RetrType.Tree, Emgu.CV.CvEnum.ChainApproxMethod.ChainApproxNone);
|
||||||
|
CvInvoke.DrawContours(pic, contours, -1, new MCvScalar(0, 255, 0), 2);
|
||||||
|
|
||||||
|
CvInvoke.FillPoly(pic, contours, new MCvScalar(255, 0, 0));
|
||||||
|
|
||||||
|
CvInvoke.Imshow("Threshold", thresholdPic);
|
||||||
|
CvInvoke.Imshow("pic with contours", pic);
|
||||||
|
|
||||||
|
CvInvoke.WaitKey();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void Nine()
|
||||||
|
{
|
||||||
|
Mat answeredPic = CvInvoke.Imread("./img/GraderPage-Answered.jpg");
|
||||||
|
Mat aWasAnswered = CvInvoke.Imread("./img/A_abcd.jpg");
|
||||||
|
Mat templateOuput = new Mat();
|
||||||
|
|
||||||
|
CvInvoke.Resize(answeredPic, answeredPic, new System.Drawing.Size(0, 0), 0.7d, 0.7d);
|
||||||
|
CvInvoke.Resize(aWasAnswered, aWasAnswered, new System.Drawing.Size(0, 0), 0.7d, 0.7d);
|
||||||
|
|
||||||
|
CvInvoke.MatchTemplate(answeredPic, aWasAnswered, templateOuput, Emgu.CV.CvEnum.TemplateMatchingType.CcoeffNormed);
|
||||||
|
|
||||||
|
double minVal = 0.0d;
|
||||||
|
double maxVal = 0.0d;
|
||||||
|
System.Drawing.Point minLoc = new System.Drawing.Point();
|
||||||
|
System.Drawing.Point maxLoc = new System.Drawing.Point();
|
||||||
|
|
||||||
|
CvInvoke.MinMaxLoc(templateOuput, ref minVal, ref maxVal, ref minLoc, ref maxLoc);
|
||||||
|
CvInvoke.Threshold(templateOuput, templateOuput, 0.85, 1, Emgu.CV.CvEnum.ThresholdType.ToZero);
|
||||||
|
|
||||||
|
var matches = templateOuput.ToImage<Gray, byte>();
|
||||||
|
|
||||||
|
for (int i = 0; i < matches.Rows; i++)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < matches.Cols; j++)
|
||||||
|
{
|
||||||
|
if (matches[i, j].Intensity > .8)
|
||||||
|
{
|
||||||
|
System.Drawing.Point loc = new System.Drawing.Point(j, i);
|
||||||
|
System.Drawing.Rectangle box = new System.Drawing.Rectangle(loc, aWasAnswered.Size);
|
||||||
|
|
||||||
|
CvInvoke.Rectangle(answeredPic, box, new MCvScalar(0, 255, 0), 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CvInvoke.Imshow("template detected", answeredPic);
|
||||||
|
|
||||||
|
CvInvoke.WaitKey();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -33,6 +33,22 @@ namespace ImageMinipulation
|
|||||||
vanGoghFilters sharpendNight = new vanGoghFilters();
|
vanGoghFilters sharpendNight = new vanGoghFilters();
|
||||||
sharpendNight.Five();
|
sharpendNight.Five();
|
||||||
break;
|
break;
|
||||||
|
case "Six":
|
||||||
|
vanGoghFilters sobelEdgeDetection = new vanGoghFilters();
|
||||||
|
sobelEdgeDetection.Six();
|
||||||
|
break;
|
||||||
|
case "Seven":
|
||||||
|
vanGoghFilters cannyEdgeDetection = new vanGoghFilters();
|
||||||
|
cannyEdgeDetection.Seven();
|
||||||
|
break;
|
||||||
|
case "Eight":
|
||||||
|
vanGoghFilters contour = new vanGoghFilters();
|
||||||
|
contour.Eight();
|
||||||
|
break;
|
||||||
|
case "Nine":
|
||||||
|
vanGoghFilters templateMatching = new vanGoghFilters();
|
||||||
|
templateMatching.Nine();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
Console.WriteLine("That command didn't match any command on record.");
|
Console.WriteLine("That command didn't match any command on record.");
|
||||||
break;
|
break;
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 9.8 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 247 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 8.9 KiB |
@@ -13,7 +13,7 @@ using System.Reflection;
|
|||||||
[assembly: System.Reflection.AssemblyCompanyAttribute("Vision")]
|
[assembly: System.Reflection.AssemblyCompanyAttribute("Vision")]
|
||||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
||||||
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
||||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+4a46119095f143590950b4c187458a1070c574b7")]
|
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+424280a29c9881a5ecf2ff086dd56660a7dfb2b8")]
|
||||||
[assembly: System.Reflection.AssemblyProductAttribute("Vision")]
|
[assembly: System.Reflection.AssemblyProductAttribute("Vision")]
|
||||||
[assembly: System.Reflection.AssemblyTitleAttribute("Vision")]
|
[assembly: System.Reflection.AssemblyTitleAttribute("Vision")]
|
||||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
e17d606bef8dc49ab9098d852070f254921c1acafd1e4b9c0a795a2c3ae7c891
|
be2338dcd47ff95872abf6d323fccdcf0b3d6fd8fe8e4067c056329d421dd863
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in new issue
Block a user