1. 程式人生 > >OpenCV-Python教程(7、Laplacian運算元)

OpenCV-Python教程(7、Laplacian運算元)

本篇文章介紹如何用OpenCV-Python來使用Laplacian運算元。

提示:

  • 轉載請詳細註明原作者及出處,謝謝!
  • 本文介紹使用在OpenCV-Python中使用Laplacian函式
  • 本文不介詳細的理論知識,讀者可從其他資料中獲取相應的背景知識。筆者推薦清華大學出版社的《影象處理與計算機視覺演算法及應用(第2版) 》。

Laplacian運算元

影象中的邊緣區域,畫素值會發生“跳躍”,對這些畫素求導,在其一階導數在邊緣位置為極值,這就是Sobel運算元使用的原理——極值處就是邊緣。如下圖(下圖來自OpenCV官方文件):


如果對畫素值求二階導數,會發現邊緣處的導數值為0。如下(下圖來自OpenCV官方文件

):


Laplace函式實現的方法是先用Sobel 運算元計算二階x和y導數,再求和:(CSDN,你打水印,讓我的公式怎麼辦?)

函式原型

在OpenCV-Python中,Laplace運算元的函式原型如下:

dst = cv2.Laplacian(src, ddepth[, dst[, ksize[, scale[, delta[, borderType]]]]])
如果看了上一篇Sobel運算元的介紹,這裡的引數應該不難理解。

前兩個是必須的引數:

  • 第一個引數是需要處理的影象;
  • 第二個引數是影象的深度,-1表示採用的是與原影象相同的深度。目標影象的深度必須大於等於原影象的深度;

其後是可選的引數:

  • dst不用解釋了;
  • ksize是運算元的大小,必須為1、3、5、7。預設為1。
  • scale是縮放導數的比例常數,預設情況下沒有伸縮係數;
  • delta是一個可選的增量,將會加到最終的dst中,同樣,預設情況下沒有額外的值加到dst中;
  • borderType是判斷影象邊界的模式。這個引數預設值為cv2.BORDER_DEFAULT

使用

這裡還是以Sobel一文中的石獅作為測試影象,下面是測試程式碼:

#coding=utf-8
import cv2
import numpy as np  

img = cv2.imread("D:/lion.jpg", 0)

gray_lap = cv2.Laplacian(img,cv2.CV_16S,ksize = 3)
dst = cv2.convertScaleAbs(gray_lap)

cv2.imshow('laplacian',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
為了讓結果更清晰,這裡的ksize設為3,效果圖如下:

有點像粉筆畫,是吧。這是因為原影象未經過去噪就直接處理了。可以通過濾波一文中,使用低通濾波一節中高斯模糊來先處理一下再用拉普拉斯函式。

參考資料:

1、《Opencv2 Computer Vision Application Programming Cookbook》

2、《OpenCV References Manule》

如果覺得本文寫的還可以的話,請輕點“頂”,您的支援是我寫下去的動力之一。未完待續。。。如有錯誤請指正,本人會虛心接受並改正!謝謝!