import cv2 as cv
import numpy as np
def tophat_demo(image):
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
kernel = cv.getStructuringElement(cv.MORPH_RECT, (15, 15))
dst = cv.morphologyEx(gray, cv.MORPH_TOPHAT, kernel)
cimage = np.array(gray.shape, np.uint8)
cimage = 100
dst = cv.add(dst, cimage)
cv.imshow("tophat", dst)
def blackhat_demo(image):
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
kernel = cv.getStructuringElement(cv.MORPH_RECT, (15, 15))
dst = cv.morphologyEx(gray, cv.MORPH_BLACKHAT, kernel)
cimage = np.array(gray.shape, np.uint8)
cimage = 100
dst = cv.add(dst, cimage)
cv.imshow("blackhat", dst)
def tophat_binary_demo(image):
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)
kernel = cv.getStructuringElement(cv.MORPH_RECT, (15, 15))
dst = cv.morphologyEx(binary, cv.MORPH_TOPHAT, kernel)
cv.imshow("tophat binary", dst)
def blackhat_binary_demo(image):
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)
kernel = cv.getStructuringElement(cv.MORPH_RECT, (15, 15))
dst = cv.morphologyEx(binary, cv.MORPH_BLACKHAT, kernel)
cv.imshow("blackhat binary", dst)
def base_gradient_demo(image):
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)
kernel = cv.getStructuringElement(cv.MORPH_RECT, (3, 3))
dst = cv.morphologyEx(binary, cv.MORPH_GRADIENT, kernel)
cv.imshow("base gradient", dst)
def gradient2_demo(image):
kernel = cv.getStructuringElement(cv.MORPH_RECT, (3, 3))
pengzhang = cv.dilate(image, kernel)
fushi = cv.erode(image, kernel)
dst1 = cv.subtract(image, fushi)
dst2 = cv.subtract(pengzhang, image)
cv.imshow("internal gradient", dst1)
cv.imshow("external gradient", dst2)
src = cv.imread("1.png")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
tophat_demo(src)
blackhat_demo(src)
tophat_binary_demo(src)
blackhat_binary_demo(src)
base_gradient_demo(src)
gradient2_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()