获取图像
Mat scrImg = new Mat("part.jpg", ImreadModes.Color);
灰度化
Mat scrGray = new Mat();
Cv2.CvtColor(scrImg, scrGray, ColorConversionCodes.BGR2GRAY);
Canny算子
Mat scrCanny = new Mat();
Cv2.Canny(scrGray, scrCanny, 100, 300, 3, false);
Sobel算子
Mat scrSobel = new Mat();
Cv2.GaussianBlur(scrGray, scrSobel, new OpenCvSharp.Size(3, 3), 5); //高斯
Mat M_X = new Mat();
Mat M_Y = new Mat();
Mat Abs_X = new Mat();
Mat Abs_Y = new Mat();
Cv2.Sobel(scrSobel, M_X, MatType.CV_16S, 1, 0);
Cv2.Sobel(scrSobel, M_Y, MatType.CV_16S, 0, 1);
Cv2.ConvertScaleAbs(M_X, Abs_X, 1.0);
Cv2.ConvertScaleAbs(M_Y, Abs_Y, 1.0);
Cv2.AddWeighted(Abs_X, 0.5, Abs_Y, 0.5, 0, scrSobel);
Laplacian算子
Mat scrLaplacian = new Mat();
Cv2.GaussianBlur(scrGray, scrLaplacian, new OpenCvSharp.Size(3, 3), 5); //高斯
Cv2.Laplacian(scrLaplacian, scrLaplacian, MatType.CV_8U, 1);
增强三类算子的灰度
for (int i = 0; i < scrImg.Height; i++)
{
for (int j = 0; j < scrImg.Width; j++)
{
byte tempCan = scrCanny.Get<byte>(i, j);
if (tempCan > 10)
{
scrCanny.Set<byte>(i, j, 255);
}
byte tempSob = scrSobel.Get<byte>(i, j);
if (tempSob > 10)
{
scrSobel.Set<byte>(i, j, 255);
}
byte tempLap = scrLaplacian.Get<byte>(i, j);
if (tempLap > 10)
{
scrLaplacian.Set<byte>(i, j, 255);
}
}
}