一。边缘检测的一般步骤
1.滤波 2.增强 3.检测
二。canny
void Canny(InputArray image,OutputArray edges, double threshold1, double threshold2, int apertureSize=3,bool L2gradient=false )
1 Mat src = imread("E:/test.jpg"); 2 Mat blur,gray,edge; 3 Mat dst(src.rows, src.cols, src.type()); 4 cvtColor(src, gray, CV_BGR2GRAY); //转换为灰度图 5 GaussianBlur(gray, blur, Size(3, 3), 0, 0); //降噪 6 Canny(blur, edge, 200, 100); //边缘检测 7 dst = Scalar::all(0); 8 src.copyTo(dst, edge); //edge作掩码将src拷贝到dst 9 imshow("src", src); 10 imshow("canny detect", dst); 11 waitKey(); 12 return 0;
三。sobel
void Sobel (
InputArray src,//输入图
OutputArray dst,//输出图
int ddepth,//输出图像的深度
int dx,
int dy,
int ksize=3,
double scale=1,
double delta=0,
int borderType=BORDER_DEFAULT );
1 Mat grad_x, grad_y; 2 Mat src = imread("E:/test.jpg",0); 3 Sobel(src, grad_x, src.depth(), 1, 0,3); //x方向梯度 4 Sobel(src, grad_y, src.depth(), 0, 1, 3);//y方向梯度 5 imshow("grad_x", grad_x); 6 imshow("grad_y", grad_y);
四。Laplacian
void Laplacian(InputArray src,OutputArray dst, int ddepth, int ksize=1, double scale=1, double delta=0, intborderType=BORDER_DEFAULT );
1 Mat src = imread("E:/test.jpg"); 2 Mat dst; 3 Laplacian(src, dst, src.depth(),3,1,0 ); 4 imshow("src", src); 5 imshow("dst", dst); 6 waitKey();
五。scharr滤波器
void Scharr(
InputArray src, //源图
OutputArray dst, //目标图
int ddepth,//图像深度
int dx,// x方向上的差分阶数
int dy,//y方向上的差分阶数
double scale=1,//缩放因子
double delta=0,// delta值
intborderType=BORDER_DEFAULT )// 边界模式
1 Mat grad_x, grad_y; 2 Mat src = imread("E:/test.jpg", 0); 3 Scharr(src, grad_x, src.depth(), 1, 0, 1, 0, BORDER_DEFAULT); //和sobel类似 4 Scharr(src, grad_y, src.depth(), 0 , 1, 1, 0, BORDER_DEFAULT); 5 imshow("grad_x", grad_x); 6 imshow("grad_y", grad_y);