原文链接: opencv HITMISS 操作 边界处理 参数
上一篇: opencv HITMISS 基本操作
下一篇: scipy hit_or_miss 图像 处理 区域扩散
不同的边界处理参数得到的结果不同
一般使用 BORDER_REPLICATE 防止边界出现额外不满足条件的点
from scipy.ndimage import binary_hit_or_miss
import numpy as np
import cv2 as cv
img = np.array([
[0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 1, 0, 0, 0],
[0, 1, 1, 1, 1, 1, 0],
[0, 0, 0, 0, 0, 0, 0],
], dtype=np.uint8)
print(img)
img[img == 1] = 255
kernel = np.array([
[0, 0, 0],
[0, 0, 0],
[1, 1, 0],
])
# img = cv.morphologyEx(img, cv.MORPH_HITMISS, kernel, iterations=16)
# BORDER_REPLICATE 不加的话会在边界出现额外的点
hm = cv.morphologyEx(img, cv.MORPH_HITMISS, kernel, borderType=cv.BORDER_REPLICATE, iterations=1)
print('hm', hm)
nimg = np.logical_or(img, hm).astype(np.uint8)
print('nimg', nimg)
a = [
[0, 0, 0],
[0, 1, 0],
[1, 1, 1]
]
b = [
[1, 0, 0],
[0, 0, 0],
[0, 0, 0]
]
# 找白色像素下面三个白像素,左上角为黑像素
print(binary_hit_or_miss(img, a, b))
kernel = np.array([
[-1, 0, 0],
[0, 1, 0],
[1, 1, 1],
])
# img = cv.morphologyEx(img, cv.MORPH_HITMISS, kernel, iterations=16)
print(cv.morphologyEx(img, cv.MORPH_HITMISS, kernel, iterations=1))
a = [
[0, 0, 0],
[0, 0, 0],
[1, 1, 1]
]
b = [
[1, 0, 0],
[0, 1, 0],
[0, 0, 0]
]
# 找黑像素,下面三个白像素,左上角黑像素
print(binary_hit_or_miss(img, a, b))
kernel = np.array([
[-1, 0, 0],
[0, -1, 0],
[1, 1, 1],
])
print(cv.morphologyEx(img, cv.MORPH_HITMISS, kernel, borderType=cv.BORDER_REPLICATE, iterations=1))