OpenCV四种边缘检测算法步骤及代码
Canny
流程:
代码:
Mat srcImg, dstImg;
srcImg = imread("1.jpg");
cvtColor(srcImg, srcImg, COLOR_BGR2GRAY);
blur(srcImg, srcImg, Size(3, 3));
Canny(srcImg, dstImg, 30, 90, 3);
imshow("dst", dstImg);
Sobel
流程:
代码:
Mat grad_x, grad_y;
Mat abs_grad_x, abs_grad_y, dst;
Mat src = imread("1.jpg");
imshow("src", src);
Sobel(src, grad_x, CV_16S, 1, 0, 3, 1, 1, BORDER_DEFAULT);
convertScaleAbs(grad_x, abs_grad_x);
imshow("x_", grad_x);
imshow("x", abs_grad_x);
Sobel(src, grad_y, CV_16S, 0, 1, 3, 1, 1, BORDER_DEFAULT);
convertScaleAbs(grad_y, abs_grad_y);
imshow("y_", grad_y);
imshow("y", abs_grad_y);
addWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, 0, dst);
imshow("dst", dst);
Laplace
流程:
代码:
Mat src = imread("1.jpg"), gray, dst, abs_dst;
imshow("src", src);
cvtColor(src, gray, COLOR_BGR2GRAY);
GaussianBlur(gray, gray, Size(3, 3), 0, 0);
Laplacian(gray, dst, CV_16S, 3, 1, 0, BORDER_DEFAULT);
convertScaleAbs(dst, abs_dst);
imshow("dst", abs_dst);
Scharr
流程:
代码:
Mat grad_x, grad_y,
abs_grad_x, abs_grad_y;
Mat srcImg = imread("../../data/sea1.jpg"), dstImg;
imshow("src", srcImg);
Scharr(srcImg, grad_x, CV_16S, 1, 0, 1, 0, BORDER_DEFAULT);
convertScaleAbs(grad_x, abs_grad_x);
Scharr(srcImg, grad_y, CV_16S, 0, 1, 1, 0, BORDER_DEFAULT);
convertScaleAbs(grad_y, abs_grad_y);
addWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, 0, dstImg);
imshow("dst",dstImg);
waitKey(0);