日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

OpenCV函数 Laplacian 算子实现

發布時間:2025/4/16 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenCV函数 Laplacian 算子实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • OpenCV函數?Laplacian?實現?Laplacian 算子?的離散模擬。

原理

  • 前一節我們學習了?Sobel 算子?,其基礎來自于一個事實,即在邊緣部分,像素值出現”跳躍“或者較大的變化。如果在此邊緣部分求取一階導數,你會看到極值的出現。正如下圖所示:

  • 如果在邊緣部分求二階導數會出現什么情況?

    你會發現在一階導數的極值位置,二階導數為0。所以我們也可以用這個特點來作為檢測圖像邊緣的方法。 但是, 二階導數的0值不僅僅出現在邊緣(它們也可能出現在無意義的位置),但是我們可以過濾掉這些點。

  • Laplacian 算子

  • 從以上分析中,我們推論二階導數可以用來?檢測邊緣?。 因為圖像是 “2維”, 我們需要在兩個方向求導。使用Laplacian算子將會使求導過程變得簡單。
  • Laplacian 算子?的定義:
  • OpenCV函數?Laplacian?實現了Laplacian算子。 實際上,由于 Laplacian使用了圖像梯度,它內部調用了?Sobel?算子。
  • 源碼

  • 本程序做什么?
    • 裝載圖像
    • 使用高斯平滑消除噪聲, 將圖像轉換到灰度空間。
    • 使用Laplacian算子作用于灰度圖像,并保存輸出圖像。
    • 輸出結果。
  • 下面是本教程的源碼,你也可以從?這里?下載。
  • #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" #include <stdlib.h> #include <stdio.h>using namespace cv;/** @函數 main */ int main( int argc, char** argv ) {Mat src, src_gray, dst;int kernel_size = 3;int scale = 1;int delta = 0;int ddepth = CV_16S;char* window_name = "Laplace Demo";int c;/// 裝載圖像src = imread( argv[1] );if( !src.data ){ return -1; }/// 使用高斯濾波消除噪聲GaussianBlur( src, src, Size(3,3), 0, 0, BORDER_DEFAULT );/// 轉換為灰度圖cvtColor( src, src_gray, CV_RGB2GRAY );/// 創建顯示窗口namedWindow( window_name, CV_WINDOW_AUTOSIZE );/// 使用Laplace函數Mat abs_dst;Laplacian( src_gray, dst, ddepth, kernel_size, scale, delta, BORDER_DEFAULT );convertScaleAbs( dst, abs_dst );/// 顯示結果imshow( window_name, abs_dst );waitKey(0);return 0;}

    解釋

  • 首先申明變量:

    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 算子实现的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。