OpenCVSharp 4.5 跑一遍OpenCV官方教程(全为手敲代码,如有雷同都是我的错)
OpenCVSharp 4.5 Sobel 算子
OpenCV教程链接:https://docs.opencv.org/4.5.0/d2/d2c/tutorial_sobel_derivatives.html
核心函数:
using System;
using OpenCvSharp;
namespace ConsoleApp1
{
class tutorial13 : ITutorial
{
public void Run()
{
Mat image, src, src_gray;
Mat grad;
const String window_name = "Sobel Demo - Simple Edge Detector";
int ksize = 3; //
int scale = 1;
int delta = 0;
MatType ddepth = MatType.CV_16S;
String imageName = "I:\\csharp\\images\\lena.jpg";
image = Cv2.ImRead(imageName, ImreadModes.Color); // Load an image
// Check if image is loaded fine
if (image.Empty())
{
Console.WriteLine("Error opening image: %s\n", imageName);
return;
}
src = new Mat();
src_gray = new Mat();
for (; ; )
{
// Remove noise by blurring with a Gaussian filter ( kernel size = 3 )
Cv2.GaussianBlur(image, src, new Size(3, 3), 0, 0, BorderTypes.Default);
// Convert the image to grayscale
Cv2.CvtColor(src, src_gray, ColorConversionCodes.BGR2GRAY);
Mat grad_x = new Mat();
Mat grad_y = new Mat();
Mat abs_grad_x = new Mat();
Mat abs_grad_y = new Mat();
Cv2.Sobel(src_gray, grad_x, ddepth, 1, 0, ksize, scale, delta, BorderTypes.Default);
Cv2.Sobel(src_gray, grad_y, ddepth, 0, 1, ksize, scale, delta, BorderTypes.Default);
// converting back to CV_8U
Cv2.ConvertScaleAbs(grad_x, abs_grad_x);
Cv2.ConvertScaleAbs(grad_y, abs_grad_y);
grad = new Mat();
Cv2.AddWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, 0, grad);
Cv2.ImShow(window_name, grad);
char key = (char)Cv2.WaitKey(0);
if (key == 27)
{
return;
}
if (key == 'k' || key == 'K')
{
ksize = ksize < 30 ? ksize + 2 : -1;
}
if (key == 's' || key == 'S')
{
scale++;
}
if (key == 'd' || key == 'D')
{
delta++;
}
if (key == 'r' || key == 'R')
{
scale = 1;
ksize = -1;
delta = 0;
}
}
}
}
}