OpenCV-Python教程(7、Laplacian運算元)
阿新 • • 發佈:2019-01-22
本篇文章介紹如何用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一文中的石獅作為測試影象,下面是測試程式碼:
為了讓結果更清晰,這裡的ksize設為3,效果圖如下:#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()
有點像粉筆畫,是吧。這是因為原影象未經過去噪就直接處理了。可以通過濾波一文中,使用低通濾波一節中高斯模糊來先處理一下再用拉普拉斯函式。
參考資料:
1、《Opencv2 Computer Vision Application Programming Cookbook》
2、《OpenCV References Manule》