私は、画像の「外側」にあるピクセルにボーダーを使用しました。 なぜ私の関数がinbuilt関数の出力と異なる出力を生成するのか分かりません - 私は両方の出力を慎重に調べて(画像に書き込み、ズームインしています)、非常に注意深く見ています!私のerode()関数は、openCVのerode関数と同じ出力を生成しません。
輸入CV2 輸入numpyのあなたのコードは、2つの小さな問題を除いて結構です
img = cv2.imread('lena.png',cv2.IMREAD_GRAYSCALE)
reflect = cv2.copyMakeBorder(img,3,3,3,3,cv2.BORDER_REFLECT)
cv2.imshow('img', reflect)
cv2.waitKey(0)
imgEroded = np.zeros((512+6,512+6,3), np.uint8)
for i in range(0,reflect.shape[0]):
for j in range(0,reflect.shape[1]):
n = np.matrix(reflect[i-3:i+2, j-3:j+2])
if n.size > 0:
imgEroded[i][j] = n.min()
imgEroded = imgEroded[3:512+3, 3:512+3]
kernel = np.ones((5,5),np.uint8)
erode = cv2.erode(img,kernel)
# print erode.shape[:2]
cv2.imshow('erosionCorrect',erode)
cv2.imshow('erosion',imgEroded)
cv2.imwrite('myOutput.png',imgEroded)
cv2.imwrite('correct.png',erode)
print(np.array_equal(erode, imgEroded))
# cv2.imshow('real',erode)
cv2.waitKey(0)