Почему в одном коде функция cv2.findContours работает, а в другом нет? - PullRequest
1 голос
/ 09 мая 2019

Я новичок в компьютерном зрении и на самом деле не прошел ни одного урока по порогу, размытию или другим фильтрам.Я использую два приведенных ниже кода, которые определяют контуры изображения.С одной стороны, метод работает, а с другой - нет.Мне нужна помощь в понимании причины, по которой это происходит, чтобы убедить себя в том, что происходит в фоновом режиме.

Фрагмент рабочего кода:

    img=cv2.imread('path.jpg')
    imgBlurred = cv2.GaussianBlur(img, (5, 5), 0)
    gray = cv2.cvtColor(imgBlurred, cv2.COLOR_BGR2GRAY)

    sobelx = cv2.Sobel(gray, cv2.CV_8U, 1, 0, ksize=3)
    cv2.imshow("Sobel",sobelx)
    cv2.waitKey(0)
    ret2, threshold_img = cv2.threshold(sobelx, 120, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)


    im2, contours, hierarchy = cv2.findContours(threshold_img, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

Фрагмент неработающего кода

# read image
    src = cv2.imread(file_path, 1)

    # show source image
    cv2.imshow("Source", src)

    # convert image to gray scale
    gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)

    # blur the image
    blur = cv2.blur(gray, (3, 3))

    # binary thresholding of the image
    ret, thresh = cv2.threshold(blur, 200, 255, cv2.THRESH_BINARY)

    # find contours
    im2, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

Я был бы очень признателен, если бы кто-нибудь смог выяснить причину ошибки, которая здесь происходит.

Ошибка, с которой я сталкиваюсь:

Traceback (большинствопоследний вызов последним): файл "converxhull.py", строка 27, в im2, контур, иерархия = cv2.findContours (thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) ValueError: недостаточно значений для распаковки (ожидается 3, получено 2)

Дайте мне знать, требуется ли какая-либо другая информация.

1 Ответ

1 голос
/ 09 мая 2019

Это связано с изменением openCV.Начиная с версии 4.0 findContours возвращает только 2 значения: контуры и иерархия.Раньше в версии 3.x возвращалось 3 значения.Вы можете использовать документацию для сравнения различных версий.

Второй фрагмент кода должен работать при изменении кода на:

# find contours
    contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

Почему первый фрагмент выбираетдругая версия openCV не может быть определена на основании предоставленной информации.

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