OpenCV将为多边形轮廓注册内部和外部轮廓。
使用以下测试代码运行
import cv2
import numpy as np
def extract_contours():
path = 'test.png'
blank = np.zeros((184,184,3), np.uint8)
blank[:] = (255,255,255)
raw = cv2.imread(path, cv2.IMREAD_UNCHANGED)
raw = 255-raw
img = cv2.cvtColor(raw, cv2.COLOR_BGR2GRAY)
contours, hierarchy = cv2.findContours(img, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
print(len(contours))
for cnt in contours:
area = cv2.contourArea(cnt)
if area > 400:
approx = cv2.approxPolyDP(cnt, 0.009 * cv2.arcLength(cnt, True), True)
cv2.drawContours(blank, [approx], 0, (0, 0, 255), 1)
cv2.imwrite('contours.png', blank)
extract_contours()
在这张图片上
将会在外圆和内圆边缘上产生两组轮廓,如下所示
是否有一种快速的方法可以将这两个轮廓集合折叠成一个单独的轮廓,最好是两者的平均值?我对CV2和计算机视觉都很新,不知道很多技巧。我不想使用RETR_EXTERNAL
,因为我不想错过任何嵌套的形状。
contourArea
函数来获取一个有符号的结果,然后相应地筛选轮廓。 - Christoph Rackwitz