original image
applied adaptive mean thresholding
after threshold, applied dilation
after threshold, applied corrosion
after threshold, applied corrosion then dilation (opening)
after threshold, applied dilation then corrosion (closing)
morphological gradient is the difference between dilation and corrosion
top hat is the difference between opening and original image
#main.py
import numpy as np
import cv2
cap = cv2.VideoCapture("assets/Santa Barbara.mp4")
while True:
ret, frame = cap.read()
width = int(cap.get(3))
height = int(cap.get(4))
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
#adaptive threshold (frame, max pixel value, adaptive method, threshold type, neighbour block size, c constant)
th1 = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)
#th2 = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)
kernal = np.ones((5, 5), np.uint8)
dilation = cv2.dilate(th1, kernal, iterations=1)
erosion = cv2.erode(th1, kernal, iterations=1)
#erosion then dilation
opening = cv2.morphologyEx(th1, cv2.MORPH_OPEN, kernal)
#dilation then erosion
closing = cv2.morphologyEx(th1, cv2.MORPH_CLOSE, kernal)
#morphological gredient, difference between dilation and erosion
mg = cv2.morphologyEx(th1, cv2.MORPH_GRADIENT, kernal)
#top hat, difference between image and opening of image
top_hat = cv2.morphologyEx(th1, cv2.MORPH_TOPHAT, kernal)
cv2.imshow('frame', frame)
cv2.imshow('mask', th1)
cv2.imshow('dilation', dilation)
cv2.imshow('erosion', erosion)
cv2.imshow('opening', opening)
cv2.imshow('closing', closing)
cv2.imshow('morphological', mg)
cv2.imshow('top hat', top_hat)
if cv2.waitKey(1) == ord('q'):
break
if cv2.waitKey(1) == ord('p'):
# wait until any key is pressed
cv2.waitKey(-1)
cap.release()
cv2.destroyAllWindows()
reference:
adaptive threshold
No comments:
Post a Comment