Python OpenCV Определение формы не работает на доске - PullRequest
0 голосов
/ 13 апреля 2020

Мы используем Python OpenCV Shape Detection. По некоторым причинам это не работает на картинке ниже. Существуют ли параметры, которые необходимо изменить для запуска, где цвета внутренней фигуры такие же, как цвета фона?

Это работает в примере с веб-сайтом, поскольку черный цвет - это цвет фона, а формы - разные цвета.

Исходный код здесь: https://www.pyimagesearch.com/2016/02/08/opencv-shape-detection/

В настоящее время не работает:

enter image description here

Запустить консоль программы:

$ python detect_shapes.py --image imagetest.png

shapedetector.py

# if the shape is a triangle, it will have 3 vertices
if len(approx) == 3:
    shape = "triangle"
# if the shape has 4 vertices, it is either a square or
# a rectangle
elif len(approx) == 4:
    # compute the bounding box of the contour and use the
    # bounding box to compute the aspect ratio
    (x, y, w, h) = cv2.boundingRect(approx)
    ar = w / float(h)
    # a square will have an aspect ratio that is approximately
    # equal to one, otherwise, the shape is a rectangle
    shape = "square" if ar >= 0.95 and ar <= 1.05 else "rectangle"
# if the shape is a pentagon, it will have 5 vertices
elif len(approx) == 5:
    shape = "pentagon"
# otherwise, we assume the shape is a circle
else:
    shape = "circle"
# return the name of the shape
return shape

detect_shape.py

# loop over the contours
for c in cnts:
    # compute the center of the contour, then detect the name of the
    # shape using only the contour
    M = cv2.moments(c)
    cX = int((M["m10"] / M["m00"]) * ratio)
    cY = int((M["m01"] / M["m00"]) * ratio)
    shape = sd.detect(c)
    # multiply the contour (x, y)-coordinates by the resize ratio,
    # then draw the contours and the name of the shape on the image
    c = c.astype("float")
    c *= ratio
    c = c.astype("int")
    cv2.drawContours(image, [c], -1, (0, 255, 0), 2)
    cv2.putText(image, shape, (cX, cY), cv2.FONT_HERSHEY_SIMPLEX,
        0.5, (255, 255, 255), 2)
    # show the output image
    cv2.imshow("Image", image)
    cv2.waitKey(0)

Работает здесь в учебнике:

enter image description here

1 Ответ

1 голос
/ 13 апреля 2020

Сделать двоичное изображение с белыми фигурами на черном фоне (инвертировать и порог).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...