с Python и OpenCV Я обнаруживать контуры бинарной маски:Контурная двоичную маску с OpenCV/Python
import numpy as np
import cv2
import matplotlib.pyplot as plt
mask = np.zeros(20000, dtype=np.uint8).reshape(100, 200)
mask[5:-5,5:-5] = 255
mask[10:70,40:80] = 0
plt.subplot(121)
plt.imshow(mask, cmap='Greys_r', interpolation='none')
_, contours, hierarchy = cv2.findContours(mask.copy(),
cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE,
offset=(0, 0))
, выражающееся в ожидаемое поведение:
plt.subplot(122)
cv2.drawContours(mask, contours, -1, (127, 127, 127), 2)
plt.imshow(mask, cmap='Greys_r', interpolation='none')
plt.show()
Однако , Я не могу понять результат полной активированной маски:
mask = np.ones(20000, dtype=np.uint8).reshape(100, 200)
mask *=255
_, contours, hierarchy = cv2.findContours(mask.copy(),
cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE,
offset=(0, 0))
print contours[0]
Который производит:
(1 1), (1 98), (198 98), (198 1)
вместо (0 0), (0 99), (199, 99), (199, 0)
Почему OpenCV findcontours ведет себя так, со смещением на 1?
Выполнив точно ваш последний фрагмент кода, я получаю (0 0), (0 99), (199, 99), (199, 0) – Soltius