OpenCV函数 Laplacian 算子实现
生活随笔
收集整理的這篇文章主要介紹了
OpenCV函数 Laplacian 算子实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
- OpenCV函數?Laplacian?實現?Laplacian 算子?的離散模擬。
原理
前一節我們學習了?Sobel 算子?,其基礎來自于一個事實,即在邊緣部分,像素值出現”跳躍“或者較大的變化。如果在此邊緣部分求取一階導數,你會看到極值的出現。正如下圖所示:
如果在邊緣部分求二階導數會出現什么情況?
你會發現在一階導數的極值位置,二階導數為0。所以我們也可以用這個特點來作為檢測圖像邊緣的方法。 但是, 二階導數的0值不僅僅出現在邊緣(它們也可能出現在無意義的位置),但是我們可以過濾掉這些點。
Laplacian 算子
源碼
- 裝載圖像
- 使用高斯平滑消除噪聲, 將圖像轉換到灰度空間。
- 使用Laplacian算子作用于灰度圖像,并保存輸出圖像。
- 輸出結果。
解釋
首先申明變量:
Mat src, src_gray, dst; int kernel_size = 3; int scale = 1; int delta = 0; int ddepth = CV_16S; char* window_name = "Laplace Demo";裝載原圖像:
src = imread( argv[1] );if( !src.data ){ return -1; }高斯平滑降噪:
GaussianBlur( src, src, Size(3,3), 0, 0, BORDER_DEFAULT );使用?cvtColor?轉換為灰度圖
cvtColor( src, src_gray, CV_RGB2GRAY );#.對灰度圖使用Laplacian算子:
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: 使用默認值。
將輸出圖像的深度轉化為?CV_8U?:
convertScaleAbs( dst, abs_dst );顯示結果:
imshow( window_name, abs_dst );結果
#.在編譯上面的代碼之后, 我們可以運行結果,將圖片路徑輸入,如下圖:
我們得到下圖所示的結果。 注意觀察樹木和牛的輪廓基本上很好的反映出來(除了像素值比較接近的地方, 比如奶牛的頭部)。 此外,注意樹木(右方)后面的房子屋頂被明顯的加強顯示出來,這是由于局部對比度比較強的原因。
總結
以上是生活随笔為你收集整理的OpenCV函数 Laplacian 算子实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: opencv sobel导数
- 下一篇: OpenCV函数 Canny 检测边缘