OpenCV Python 頂帽黑帽和形態學梯度

2021-10-11 04:25:54 字數 4065 閱讀 4344

(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...