OpenCVSharp跑一遍OpenCV官方教程(全为手敲代码,如有雷同都是我的错)
腐蚀与膨胀
OpenCV教程链接:https://docs.opencv.org/4.5.0/db/df6/tutorial_erosion_dilatation.html
核心函数:
- Erode()
- Dilate()
using OpenCvSharp;
using System;
namespace ConsoleApp1
{
class tutorial4 : ITutorial
{
Mat src, erosion_dst, dilation_dst;
int erosion_elem = 0;
int erosion_size = 0;
int dilation_elem = 0;
int dilation_size = 0;
int max_elem = 2;
int max_kernel_size = 21;
//TrackbarCallbackNative 本质为 delegate
/* public delegate void TrackbarCallbackNative( int pos, IntPtr userData)*/
public void Run()
{
src = Cv2.ImRead("LinuxLogo.jpg", ImreadModes.Color);
if (src.Empty())
{
Console.WriteLine("Could not open or find the image!");
return;
}
erosion_dst = new Mat();
dilation_dst = new Mat();
Cv2.NamedWindow("Erosion Demo",WindowFlags.Normal);
Cv2.NamedWindow("Dilation Demo", WindowFlags.Normal);
Cv2.MoveWindow("Dilation Demo", src.Cols, 0);
Cv2.CreateTrackbar("Element", "Erosion Demo",
ref erosion_elem, max_elem,
new TrackbarCallbackNative(Erosion));
Cv2.CreateTrackbar("Kernel size:", "Erosion Demo",
ref erosion_size, max_kernel_size,
Erosion);
Cv2.CreateTrackbar("Element", "Dilation Demo",
ref dilation_elem, max_elem,
new TrackbarCallbackNative( Dilation));
Cv2.CreateTrackbar("Kernel size", "Dilation Demo",
ref dilation_size, max_kernel_size,
new TrackbarCallbackNative( Dilation));
Erosion(0, IntPtr.Zero );
Dilation(0, IntPtr.Zero);
Cv2.WaitKey(0);
}
private void Erosion(int erosion_elem, IntPtr userData)
{
MorphShapes erosion_type = 0;
if (erosion_elem == 0)
{
erosion_type = MorphShapes.Rect;
}
else if (erosion_elem == 1)
{
erosion_type = MorphShapes.Cross;
}
else if (erosion_elem == 2)
{
erosion_type = MorphShapes.Ellipse;
}
Mat element = Cv2.GetStructuringElement(erosion_type,
new Size(2 * erosion_size + 1, 2 * erosion_size + 1),
new Point(erosion_size, erosion_size));
Cv2.Erode(src, erosion_dst, element);
Cv2.ImShow("Erosion Demo", erosion_dst);
}
private void Dilation(int erosion_elem, IntPtr userData)
{
MorphShapes dilation_type = 0;
if (dilation_elem == 0)
{
dilation_type = MorphShapes.Rect;
}
else if (dilation_elem == 1) { dilation_type = MorphShapes.Cross; }
else if (dilation_elem == 2) { dilation_type = MorphShapes.Ellipse; }
Mat element = Cv2.GetStructuringElement(dilation_type,
new Size (2 * dilation_size + 1, 2 * dilation_size + 1),
new Point(dilation_size, dilation_size));
Cv2.Dilate(src, dilation_dst, element);
Cv2.ImShow("Dilation Demo", dilation_dst);
}
}
}