Как я могу получить правильный периметр контура с помощью Opencv cv2.arcLength ()? - PullRequest
0 голосов
/ 26 апреля 2020

введите описание изображения здесь

привет, я хочу рассчитать периметр контура. Но теперь я действительно запутался в результатах функции opencv cv2.arcLength (). На самом деле на картинке в основном только один контур. Тем не менее, результат показывает, что периметр возвращается от cv2.arclength() почти вдвое больше, чем должен быть контур? что тут может быть не так? Спасибо!

Периметр контура: count Пиксель: 43, cv2.arcLength: 95

Вот мой код ниже:

cnt = self._get_contours(new_roi)

if len(cnt) >1:
    container = []

    for c in cnt:
        length = cv2.arcLength(c, closed = False) 
        container.append(length)

    max_length = max(container)
    real_cnt = dict(zip(container, cnt)).get(max_length)

    filterded_new_roi = np.zeros(new_roi.shape, dtype = np.uint8)  
    cv2.drawContours(filterded_new_roi, [real_cnt], -1, 255, 1)  
    plt.imshow(filterded_new_roi, cmap= 'gray')
    plt.show()
    new_roi = filterded_new_roi[:]


labeled_roi = label(new_roi)
unique, counts = np.unique(labeled_roi, return_counts=True)
# 0 black always the most
d = dict(zip(unique, counts))
print(d)
l = cv2.arcLength(cnt[0], True)
print('Contour Perimeter: count Pixel: %d, cv2.arcLength: %d' % (counts[1], int(l)))
...