OpenCV Python 核心操作 邊緣檢測

2021-08-20 17:55:52 字數 3222 閱讀 7049

邊緣檢測其實就是利用乙個高通濾波器和影象進行卷積,影象中的邊緣(即高頻部分)在濾波器

的作用下,保留高頻部分,也就是留下邊緣

或者換乙個角度考慮,對影象進行

x方向和

y方向的差分,在影象的邊緣差分結果會比別的地方大,再利用差分可以計算出梯度,邊緣總會出現在梯度最大的地方

1.幾個基本運算元

常用的邊緣檢測運算元有

sobel, scharr, laplacian

運算元,這幾個運算元本質上都是高通濾波器,使用這些運算元和影象卷積即可獲得影象邊緣圖形。

sobel

運算元如下:

螢幕剪輯的捕獲時間

:2018/4/13 20:2

scharr

運算元如下:

螢幕剪輯的捕獲時間

:2018/4/13 20:29

laplacian

運算元如下:

螢幕剪輯的捕獲時間

:2018/4/13 20:30

opencv

分別提供一下三個函式進行

sobel,scharr ,laplacian

運算

cv2.sobel( src, ddepth,dx,dy, ksize)

ddepth

表示輸出影象的資料型別,選擇

-1時表示和原圖一致

dx ,dy

表示對該方向進行幾階導,

一般可以選擇

0,1,2

ksize

表示卷積核的大小

cv2.scharr( src, ddepth, dx, dy, ksize)

引數和上面一樣

cv2.laplacian(src, ddepth)

引數和上面一樣

例子:img = cv2.imread("lena.jpg",0)

1)使用這幾個運算元,其本質上還是卷積,所以,如果使用

filter2d

函式直接將影象和運算元進行

2d卷積,其結果和直接使用運算元並沒有什麼不同

例如:kernel= np.matrix('0 1 0; 1 -4 1; 0 1 0')

螢幕剪輯的捕獲時間

:2018/4/13 21:19(2

)使用sobel

運算元時有個問題,對於我們常用的

rgb格式,儲存一種顏色用的是

8bit

儲存,所以在做從高到低的差分時,比如白色到黑色,算出來的差分是負數,而對於

rgb通道的,負數溢位沒有意義,所以會出現從高到低差分

bug,如下所示:

螢幕剪輯的捕獲時間

:2018/4/13 22:01

解決辦法如下:

將sobel

運算元的資料格式,換到更大的,比如

cv2.cv_64f

,再計算

帶負數的結果

的絕對值,再將這個絕對值轉回到

8bit

的格式。如下所示:

螢幕剪輯的捕獲時間

:2018/4/13 22:06

2.canny

檢測 canny檢測是一套成熟的邊緣檢測演算法,其具體實現方法此處不進行分析,只說一下大概(1

)雜訊去除,可以使用高斯濾波器去除雜訊

(2)計算影象梯度,利用

sobel

運算元分別計算x

,y方向的導數,再計算出梯度

(3)非極大值移植,逐個掃瞄每個畫素的梯度,如果乙個畫素的梯度是兩邊最大的,則保

留,如果不是則去除

(4)滯後閾值,設定一組閾值

maxval

和minval

,在閾值之外的部分去除,所以閾值的選取非常重要

open

cv直接提供cv

2.canny(src,minval, maxval,

aperturesize

, l2gradient)

函式來進行canny檢測。其中ksize是卷積核大小,l

2gradient

用於設定求梯度大小的方程

如果為true,

計算方程為:

如果為false,計算方程為:

例子:img = cv2.imread("lena.jpg",0)

螢幕剪輯的捕獲時間

: 2018/4/13 22:25

OpenCV Python 核心操作 幾何變換

1.幾何變換的實際意義 從線性代數角度來看,在乙個向量 x,y 前面乘以乙個矩陣 其本質上,是將向量 x,y 轉換到 a1,b1 a2,b2 的座標系中,即實現向量 x,y 的位移 2.擴充套件縮放 opencv 提供cv2.resize 圖形檔案,x方向長度,y方向高度 轉換模式 或者 cv2.r...

OpenCV Python 核心操作 模板匹配

在opencv裡,模板匹配和卷積原理很像,模板在原影象上從原點開始滑動,計算模板與 影象被模板覆蓋的地方 的差別程度,這個差別程度的計算方法在opencv裡有 6種,然後將每次計算的結果放入乙個矩陣裡,作為結果輸出。假如原圖形是 axb大小,而模板是 axb大小,則輸出結果的矩陣是 a a 1 x ...

linux降核心版本 Linux核心降級操作

linux 核心降級操作 環境 機器型號 hp proliant bl685c g7 系統版本 redhat 6.0 核心版本 2.6.32 504.16.2.el6.x86 64 ip位址 10.221.18.47 操作目的 因為移動補丁下發平台下發了核心公升級補丁,導致系統重啟後,核心版本被從原...