原文链接: opencv HITMISS 基本操作
上一篇: gym atari 游戏安装和使用
下一篇: opencv HITMISS 操作 边界处理 参数
先用canny算法检测边缘,在对边缘进行扩充
原图
canny边缘
腐蚀填充
hitmiss 填充
import numpy as np
import pylab as pl
import cv2 as cv
import time
def skeleton(img):
img = cv.resize(img, (640, 480))
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
kernel = cv.getStructuringElement(cv.MORPH_RECT, (5, 5))
canny = cv.Canny(gray, 30, 150)
pl.imshow(canny)
pl.show()
closed = cv.morphologyEx(canny, cv.MORPH_CLOSE, kernel, iterations=5)
pl.imshow(closed)
pl.show()
# -1 0 1 黑 都可以 白
kernel = np.array(
[
[
[0, 0, 0],
[1, -1, 0],
[0, 1, 0],
],
[
[1, 0, 0],
[1, -1, 0],
[1, 0, 0],
],
]
)
kernels = []
for k in kernel:
for i in range(4):
kernels.append(np.rot90(k, i))
img = closed
sst = time.time()
for k in kernels * 5:
# st = time.time()
hm = cv.morphologyEx(img, cv.MORPH_HITMISS, k, borderType=cv.BORDER_REPLICATE, iterations=1)
# ed = time.time()
img = cv.bitwise_or(img, hm)
# print('time ', ed - st)
print(np.max(img))
eed = time.time()
print(eed - sst)
pl.imshow(img)
pl.show()
return img
a = cv.imread('test.jpg')
b = skeleton(a)