Для поля «n%» (и заполнения) для того же для margin-top / margin-right / margin-bottom / margin-left, все четыре должны относиться к одному и тому же база. Если верхняя / нижняя область использовала другую базу, чем левая / правая, то маржа «n%» (и отступы) не будет означать одно и то же на всех четырех сторонах.
(Также обратите внимание, что верхнее / нижнее поле по отношению к ширине позволяет использовать странный CSS-хак, который позволяет вам указать поле с неизменным соотношением сторон ... даже если коробка перемасштабирована.)
Вместо того, чтобы выполнять размытие, набор номера, обнаружение неровных краев на моем уже пороговом изображении, я просто выполнил определение контура на своем исходном изображении.
Затем я смог найти приличный контур для контура моего изображения, изменив команду findContour.
_, контуры, _ = cv2.findContours (серый, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
заменяя cv2.RETR_TREE на cv2.RETR_EXTERNAL I был в состоянии получить только контуры, которые были связаны с контуром объекта, вместо того, чтобы пытаться получить контуры внутри объекта. Переключение на cv2.CHAIN_APPROX_NONE не показало каких-либо заметных улучшений, но оно может обеспечить лучшие контуры для более сложной геометрии.
for c in cnts:
# compute the center of the contour
M = cv2.moments(c)
cX = int(M["m10"] / M["m00"])
cY = int(M["m01"] / M["m00"])
# draw the contour and center of the shape on the image
cv2.drawContours(empty2, [c], -1, (255, 0, 0), thickness=1)
perimeter = np.around(cv2.arcLength(c, True), decimals=3)
area = np.around(cv2.contourArea(c), decimals=3)
cv2.circle(empty2, (cX, cY), 7, (255, 255, 255), -1)
cv2.putText(empty2, "center", (cX - 20, cY - 20),
cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 2)
cv2.putText(empty2, "P:{}".format(perimeter), (cX - 50, cY - 50),
cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 2)
cv2.putText(empty2, "A:{}".format(area), (cX - 100, cY - 100),
cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 2)
Используя приведенный выше код, я смог обозначить центроид каждого контура, а также информацию о периметре каждого контура и площади.
Однако я не смог выполнить тест, который бы выбрал, какой контур был моим желаемым контуром. У меня есть идея захватить мой объект в более идеальной обстановке и найти его центроид, периметр и связанную с ним область. Таким образом, когда я нахожу новый контур, я могу сравнить его с тем, насколько он близок к моим известным значениям.
Я думаю, что этот метод может работать, чтобы удалить слишком большие или слишком маленькие контуры.
Если кто-нибудь знает о лучшем решении, которое было бы фантастическим!