opencv學習筆記4 邊緣檢測


一。邊緣檢測的一般步驟

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);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM