一、概述
二、canny邊緣檢測
1 #include "opencv2/opencv.hpp" 2 using namespace cv; 3 4 void main() 5 { 6 //Canny邊緣檢測 7 Mat srcImg = imread("E://1.png",0); //0表示以灰度圖讀入,彩色圖和灰度圖進行邊緣檢測時略有不同,建議使用灰度圖 8 //medianBlur(srcImg, srcImg,5);//中值濾波 9 imshow("src", srcImg); 10 11 Mat dstImg; 12 Canny(srcImg, dstImg, 30, 80); 13 imshow("Canny", dstImg); 14 waitKey(0); 15 }
Canny邊緣檢測小應用——檢測工件是否平整,檢測布料是否平滑
1 #include "opencv2/opencv.hpp" 2 using namespace cv; 3 4 Mat src,dst; 5 int min_thres=30,max_thres=100;//不能直接命名為min,max,標准庫std里有min和max方法 6 7 void onCanny(int,void*){ 8 Canny(src, dst,min_thres,max_thres); 9 imshow("src",src); 10 imshow("Canny", dst); 11 } 12 13 void main() 14 { 15 src=imread("E://9.jpg",0); 16 namedWindow("Canny",CV_WINDOW_AUTOSIZE); 17 createTrackbar("min_thres","Canny",&min_thres,255,onCanny,0); 18 createTrackbar("max_thres","Canny",&max_thres,255,onCanny,0); 19 20 onCanny(min_thres,0);//回調函數初始化 21 onCanny(max_thres,0); 22 23 waitKey(0); 24 destroyAllWindows(); 25 }
注意:canny邊緣檢測后,圖像為灰度圖!
三、Sobel算子(帶方向,分x,y方向)
1 #include "opencv2/opencv.hpp" 2 using namespace cv; 3 4 void main() 5 { 6 Mat grad_x, grad_y; 7 Mat abs_grad_x, abs_grad_y, dst; 8 9 Mat src = imread("E://5.jpg", 0); 10 imshow("src", src); 11 12 Sobel(src, grad_x, CV_16S, 1, 0, 3);//16位有符號(求導時有正負),x方向參數設置為1,0 13 convertScaleAbs(grad_x, abs_grad_x);//轉為無符號 14 imshow("X方向", abs_grad_x); 15 16 Sobel(src, grad_y, CV_16S, 0, 1, 3);//y方向參數設置為0,1 17 convertScaleAbs(grad_y, abs_grad_y); 18 imshow("Y方向", abs_grad_y); 19 20 addWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, 0, dst); 21 imshow("合並效果", dst); 22 23 waitKey(0); 24 destroyAllWindows(); 25 }
四、Laplacian算子(二階,帶方向)
1 #include "opencv2/opencv.hpp" 2 using namespace cv; 3 4 void main() 5 { 6 Mat src,dst,abs_dst; 7 src = imread("E://lena.jpg", 0); 8 imshow("src", src); 9 10 Laplacian(src, dst, CV_16S, 3); 11 convertScaleAbs(dst, abs_dst); 12 imshow("Laplacian", abs_dst); 13 14 waitKey(0); 15 destroyAllWindows(); 16 }
五、其他
Z1 | Z2 | Z3 |
Z4 | Z5 | Z6 |
Z7 | Z8 | Z9 |
Robets交叉梯度算子:▽f≈|Z9-Z5|+|Z8-Z6|
Prewitt梯度算子:▽f≈|(Z7+Z8+Z9)-(Z1+Z2+Z3)|+|(Z3+Z6+Z9)-(Z1+Z4+Z7)|
Sobel梯度算子:▽f≈|(Z7+2Z8+Z9)-(Z1+2Z2+Z3)|+|(Z3+2Z6+Z9)-(Z1+2Z4+Z7)|