1.laplace算子
一階導數的極值位置,二階導數為0。所以我們也可以用這個特點來作為檢測圖像邊緣的方法。
Laplacian 算子 的定義:

OpenCV函數 Laplacian 實現了Laplacian算子。 實際上,由于 Laplacian使用了圖像梯度,它內部調用了 Sobel 算子
對應函數:Laplacian( src_gray, dst, ddepth, kernel_size, scale, delta, BORDER_DEFAULT );函數接受了以下參數:src_gray: 輸入圖像。dst: 輸出圖像ddepth: 輸出圖像的深度。 因為輸入圖像的深度是 CV_8U ,這里我們必須定義 ddepth =CV_16S 以避免外溢。kernel_size: 內部調用的 Sobel算子的內核大小,此例中設置為3。scale, delta 和 BORDER_DEFAULT: 使用默認值以下是源代碼:
#include <cv.h>#include <opencv2/core/core.hpp> #include <opencv2/imgPRoc/imgproc.hpp> #include <opencv2/highgui/highgui.hpp>using namespace std;using namespace cv;int main( int argc, char** argv ){//Laplacian( src_gray, dst, ddepth, kernel_size, scale, delta, BORDER_DEFAULT );/*函數接受了以下參數: src_gray: 輸入圖像。 dst: 輸出圖像 ddepth: 輸出圖像的深度。 因為輸入圖像的深度是 CV_8U ,這里我們必須定義 ddepth = CV_16S 以避免外溢。 kernel_size: 內部調用的 Sobel算子的內核大小,此例中設置為3。 scale, delta 和 BORDER_DEFAULT: 使用默認值。*/ int kernel_size=3; int scale = 1; int delta = 0; Mat image=imread("./1.jpg",CV_LOAD_IMAGE_GRAYSCALE); Mat lap; Laplacian(image,lap,CV_16S,kernel_size,scale,delta,BORDER_DEFAULT); //convertScaleAbs( dst, abs_dst ); //將輸出圖像的深度轉化為 CV_8U : Mat lap_image; convertScaleAbs(lap,lap_image); imwrite("./lap.jpg",lap_image); imshow("laplace",lap_image); waitKey(0); return 0;}原圖片:
效果圖:
新聞熱點
疑難解答