OpenCVSharp跑一遍OpenCV官方教程(全为手敲代码,如有雷同都是我的错)
图像滤波
OpenCV教程链接:https://docs.opencv.org/4.5.0/dc/dd3/tutorial_gausian_median_blur_bilateral_filter.html
核心函数:
- blur()
- GaussianBlur()
- medianBlur()
- bilateralFilter()
using OpenCvSharp;
using System;
namespace ConsoleApp1
{
class tutorial3 : ITutorial
{
int DELAY_CAPTION = 1500;
int DELAY_BLUR = 100;
int MAX_KERNEL_LENGTH = 31;
Mat src;
Mat dst;
string window_name = "Smoothing Demo";
public void Run()
{
Cv2.NamedWindow(window_name, WindowFlags.AutoSize);
string filename = "I:\\csharp\\images\\lena.jpg";
src = Cv2.ImRead(filename, ImreadModes.Color);
if (src.Empty())
{
Console.WriteLine(" Error opening image{0}\n", filename);
}
if (display_caption("Original Image") != 0)
{
return ;
}
dst = src.Clone();
if (display_dst(DELAY_CAPTION) != 0)
{
return ;
}
if (display_caption("Homogeneous Blur") != 0)
{
return ;
}
for (int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2)
{
Cv2.Blur(src, dst, new Size(i, i), new Point(-1, -1));
if (display_dst(DELAY_BLUR) != 0)
{
return ;
}
}
if (display_caption("Gaussian Blur") != 0)
{
return ;
}
for (int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2)
{
Cv2.GaussianBlur(src, dst, new Size(i, i), 0, 0);
if (display_dst(DELAY_BLUR) != 0)
{
return;
}
}
if (display_caption("Median Blur") != 0)
{
return;
}
for (int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2)
{
Cv2.MedianBlur(src, dst, i);
if (display_dst(DELAY_BLUR) != 0)
{
return ;
}
}
if (display_caption("Bilateral Blur") != 0)
{
return ;
}
for (int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2)
{
Cv2.BilateralFilter(src, dst, i, i * 2, i / 2);
if (display_dst(DELAY_BLUR) != 0)
{
return ;
}
}
display_caption("Done!");
return;
}
private int display_caption(string caption)
{
dst = Mat.Zeros(src.Size(), src.Type());
Cv2.PutText(dst, caption,
new Point(src.Cols / 4, src.Rows / 2),
HersheyFonts.HersheyComplex, 1, new Scalar(255, 255, 255));
return display_dst(DELAY_CAPTION);
}
private int display_dst(int delay)
{
Cv2.ImShow(window_name, dst);
int c = Cv2.WaitKey(delay);
if (c >= 0) { return -1; }
return 0;
}
}
}