Координаты с использованием OpenCV - PullRequest
1 голос
/ 01 апреля 2020

Я работаю над python и openCV как новичок ie, и я хотел бы, чтобы вы, ребята, помогли мне проверить, почему я получаю небольшую python ошибку.

Основной Цель этого кода - найти углы данного изображения. Это не полностью написано мной, я изучаю код людей, чтобы увидеть, что они сделали, чтобы я мог использовать это в своих интересах.

Вот код:

import cv2


img = cv2.imread("sudoku_midterm/sudoku13.png")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, threshold = cv2.threshold(gray,150,255,cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(threshold,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)
contours.sort(key=lambda c: np.min(c[:,:,1]))
j = 1

if len(contours) > 0:
    for i in range(0, len(contours)):
        size = cv2.contourArea(contours[i])
        if 90 < size < 140:
            if j == 1:
                c1 = contours[i]
                j += 1
            elif j == 2:
                c2 = contours[i]
                j += 1
            elif j == 3:
                c3 = contours[i]
                j += 1
            elif j == 4:
                c4 = contours[i]
                break

Top = tuple(c1[c1[:, :, 1].argmin()][0])
Right = tuple(c2[c2[:, :, 0].argmax()][0])
Left = tuple(c3[c3[:, :, 0].argmin()][0])
Bottom = tuple(c4[c4[:, :, 1].argmax()][0])

cv2.circle(img, Top, 2, (0, 255, 0), -1)
cv2.circle(img, Right, 2, (0, 255, 0), -1)
cv2.circle(img, Left, 2, (0, 255, 0), -1)
cv2.circle(img, Bottom, 2, (0, 255, 0), -1)

cv2.imshow("Image", img)
cv2.waitKey(0)

Я получаю сообщение об ошибке:

name 'c1' is not defined

Что может быть причиной этого?

1 Ответ

0 голосов
/ 01 апреля 2020

Проблема в том, что c1, c2, c3, c4 будут определены только в том случае, если существует контур с размером от 90 до 140. Вам нужно иметь альтернативное значение / значение по умолчанию для них. Я бы предложил установить их как массивы 0.0 с той же формой, что и contours[0], что-то вроде

import numpy as np

# ...
contours, hierarchy = cv2.findContours(threshold,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)

c1 = np.zeros_like(contours[0])
c2 = np.zeros_like(contours[0])
c3 = np.zeros_like(contours[0])
c4 = np.zeros_like(contours[0])
# ...

Это предотвратит ошибку, хотя вам может потребоваться отфильтровать их перед рисованием кругов.

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