Выходные данные для применения эрозии с использованием встроенной функции cv2.erode()
не совпадают с выходными данными без встроенной функции OpenCV для эрозии. И мой вопрос: «Является ли код для расширения с нуля (означает без использования cv2.dilate()
) одинаковым для эрозии?»
#Code for Erosion from scratch :
import cv2
import numpy as np
from dataPath import DATA_PATH
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['figure.figsize'] = (6.0, 6.0)
matplotlib.rcParams['image.cmap'] = 'gray'
im = np.zeros((10,10),dtype='uint8')
im[0,1] = 1
im[-1,0]= 1
im[-2,-1]=1
im[2,2] = 1
im[5:8,5:8] = 1
element = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3,3))
ksize = element.shape[0]
height,width = im.shape[:2]
border = ksize//2
# Create a padded image with zeros padding
#paddedIm = np.zeros((height + border*2, width + border*2))
paddedIm = cv2.copyMakeBorder(im, border, border, border, border, cv2.BORDER_CONSTANT, value = 1)
for h_i in range(border, height+border):
for w_i in range(border,width+border):
# When you find a white pixel
if im[h_i-border,w_i-border]:
print("White Pixel Found @ {},{}".format(h_i,w_i))
paddedIm[ h_i - border : (h_i + border)+1, w_i - border : (w_i + border)+1] = \
cv2.bitwise_and(paddedIm[ h_i - border : (h_i + border)+1, w_i - border : (w_i + border)+1],element)
# Print the intermediate result
print(paddedIm)
plt.imshow(paddedIm);plt.show()
erodedImage = paddedIm[border:border+height,border:border+width]
plt.imshow(erodedImage)
Входное изображение: Изображение для эрозии
Выходное изображение с использованием cv2.erode()
(Ожидаемое выходное изображение): Окончательное изображение с использованием cv2.erode
Выходное изображение без использования встроенной функции эрозии (Выходное изображение, которое я получаю): Выходное изображение без использования cv2.erode