三種常見的邊緣檢測算子。
#include "cv.h" #include "highgui.h" using namespace cv; int main(int argc, char* argv[]) { Mat src = imread("misaka.jpg"); Mat dst; //輸入圖像 //輸出圖像 //輸入圖像顏色通道數 //x方向階數 //y方向階數 Sobel(src,dst,src.depth(),1,1); imwrite("sobel.jpg",dst); //輸入圖像 //輸出圖像 //輸入圖像顏色通道數 Laplacian(src,dst,src.depth()); imwrite("laplacian.jpg",dst); //輸入圖像 //輸出圖像 //彩色轉灰度 cvtColor(src,src,CV_BGR2GRAY); //canny只處理灰度圖 //輸入圖像 //輸出圖像 //低閾值 //高閾值,opencv建議是低閾值的3倍 //內部sobel濾波器大小 Canny(src,dst,50,150,3); imwrite("canny.jpg",dst); imshow("dst",dst); waitKey(); return 0; }
原圖:
sobel算子:
laplacian算子:
canny算子: