(1)頂帽
頂帽 = 原始影象 - 開操作
(2)黑帽
黑帽 = 閉操作 - 原始影象
(3)形態學梯度
1)基本梯度
基本梯度 = 膨脹後的影象 - 腐蝕後的影象
2)內部梯度
內部梯度 = 原始影象-腐蝕後的影象
3)外部梯度
外部梯度 = 膨脹後的影象-原始影象
#引入opencv模組
import cv2 as cv
#引入numpy模組
import numpy as np
#引入sys模組
import sys
#頂帽灰度圖操作
def top_hat_gray_test(img):
gray = cv.cvtcolor(img,cv.color_bgr2gray)
kernel = cv.getstructuringelement(cv.morph_rect,(5,5))
#kernel = cv.getstructuringelement(cv.morph_rect,(15,15))
dst = cv.morphologyex(gray,cv.morph_tophat,kernel)
cv.namedwindow("top_hat_gray_test",cv.window_normal)
cv.imshow("top_hat_gray_test",dst)
#頂帽二值圖操作
def top_hat_binary_test(img):
gray = cv.cvtcolor(img,cv.color_bgr2gray)
ret,binary = cv.threshold(gray,0,255,cv.thresh_binary|cv.thresh_otsu)
print("threshold value: %s"%(ret)) #分割的閾值
kernel = cv.getstructuringelement(cv.morph_rect,(5,5))
#kernel = cv.getstructuringelement(cv.morph_rect,(15,15))
dst = cv.morphologyex(binary,cv.morph_tophat,kernel)
cv.namedwindow("top_hat_binary_test",cv.window_normal)
cv.imshow("top_hat_binary_test",dst)
#黑帽灰度圖操作
def black_hat_gray_test(img):
gray = cv.cvtcolor(img,cv.color_bgr2gray)
kernel = cv.getstructuringelement(cv.morph_rect,(5,5))
#kernel = cv.getstructuringelement(cv.morph_rect,(15,15))
dst = cv.morphologyex(gray,cv.morph_blackhat,kernel)
cv.namedwindow("black_hat_gray_test",cv.window_normal)
cv.imshow("black_hat_gray_test",dst)
#黑帽二值圖操作
def black_hat_binary_test(img):
gray = cv.cvtcolor(img,cv.color_bgr2gray)
ret,binary = cv.threshold(gray,0,255,cv.thresh_binary|cv.thresh_otsu)
print("threshold value: %s"%(ret)) #分割的閾值
kernel = cv.getstructuringelement(cv.morph_rect,(5,5))
#kernel = cv.getstructuringelement(cv.morph_rect,(15,15))
dst = cv.morphologyex(binary,cv.morph_blackhat,kernel)
cv.namedwindow("black_hat_binary_test",cv.window_normal)
cv.imshow("black_hat_binary_test",dst)
#影象梯度二值圖操作
def gradient_binary_test(img):
gray = cv.cvtcolor(img,cv.color_bgr2gray)
ret,binary = cv.threshold(gray,0,255,cv.thresh_binary|cv.thresh_otsu)
print("threshold value: %s"%(ret)) #分割的閾值
kernel = cv.getstructuringelement(cv.morph_rect,(5,5))
#kernel = cv.getstructuringelement(cv.morph_rect,(15,15))
dst = cv.morphologyex(binary,cv.morph_gradient,kernel)
cv.namedwindow("gradient_binary_test",cv.window_normal)
cv.imshow("gradient_binary_test",dst)
#影象內/外梯度
def outiner_gradient_test(img):
kernel = cv.getstructuringelement(cv.morph_rect,(5,5))
#kernel = cv.getstructuringelement(cv.morph_rect,(15,15))
dm = cv.dilate(img,kernel)
em = cv.erode(img,kernel)
out_dst = cv.subtract(dm,img) #外梯度
iner_dst = cv.subtract(img,em) #內梯度
#判斷是否讀取成功
if img is none:
print("could not read the image,may be path error")
return
cv.namedwindow("origin pic",cv.window_normal)
cv.imshow("origin pic",img)
top_hat_gray_test(img)
top_hat_binary_test(img)
black_hat_gray_test(img)
black_hat_binary_test(img)
gradient_binary_test(img)
outiner_gradient_test(img)
#讓顯示等待鍵盤輸入維持在那裡,否則程式跑完就閃退啦!
cv.waitkey(0)
#銷毀視窗
cv.destroyallwindows()
if __name__ == '__main__':
sys.exit(img_test() or 0)
形態學處理梯度 頂帽 黑帽
基本梯度 經過膨脹操作的影象與經過腐蝕操作影象的差值影象,可以用來提取出物體的邊緣部分。內部梯度 原影象與經過腐蝕操作的影象的差值影象。外部梯度 經過膨脹操作的影象與原影象的差值影象。opencv中支援的是基本梯度,下面放一段 和執行結果更直觀的理解 原影象與經過開運算操作的影象的差值影象,作用是可...
OpenCV學習筆記 頂帽 黑帽 形態學梯度
一 頂帽 又稱禮帽,是原始影象與進行開運算之後得到的影象的差。因為開運算到來的結果是放大了裂痕或者區域性低亮度的區域,因此,從原圖中減去運算後的圖,得到的效果圖突出了比原圖輪廓周圍的區域更明亮的區域,且這一操作和選擇的核的大小相關。頂帽運算往往用來分離比鄰近點亮一些的斑塊。當一幅影象具有大幅的背景的...
OpenCV 21頂帽 黑帽 形態學梯度
頂帽 又稱禮帽,原影象與開操作後的影象之間的差值影象 黑帽 閉操作影象與原影象的差值影象 增加亮度 cv.imshow tophat dst defblack hat demo image gray cv.cvtcolor image,cv.color bgr2gray kernel cv.gets...