Python 3-ValueError: недостаточно значений для распаковки (ожидается 3, получено 2) - PullRequest
0 голосов
/ 05 апреля 2020

Привет, я новичок в компьютерном зрении и переполнении стека, и у меня проблема с моей программой python 3 на Windows, так как функция cv2.findContours () возвращает 2 вместо трех значений, как в документации. Я передал 2 значения для возврата, чтобы решить ошибку, тип первого (изображение) является списком, а тип второго (cnts) - int32, но ни одно из них не может быть использовано в cv2.drawContours () без ошибок здесь я использую изображение в качестве параметра, потому что это единственный возвращаемый список, поэтому я предполагаю, что это список контуров cv2.drawContours (). Так вот код:

#This is the program for a document scanner so as to extract a document
#from any image and apply perspective transform to show it as final result
import numpy as np
import cv2
import imutils
from matplotlib import pyplot as plt
cap=cv2.VideoCapture(0)
ret,img=cap.read()
img1=img.copy()
cv2.imshow('Image',img1)
img1=cv2.cvtColor(img1,cv2.COLOR_BGR2GRAY)
img1=cv2.bilateralFilter(img1,7,17,17)
img1=cv2.Canny(img1,30,200)
image,cnts=cv2.findContours(img1,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
#cnts=np.asarray(cnts,dtype='uint8')
cnts=np.array(cnts)

cv2.imshow('Edge',img1)
print('cnts var  data type',cnts.dtype)
#print("Hi")

img=cv2.drawContours(img,[image],-1,(255,255,0),3)

Здесь python простоя результат оболочки появляется сейчас:

cnts var  data type is int32
Traceback (most recent call last):
  File "D:\PyCharm Projects\Test_1_docscanner.py", line 20, in <module>
    img=cv2.drawContours(img,[image],-1,(255,255,0),3)
TypeError: contours is not a numpy array, neither a scalar

1 Ответ

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

Наконец-то все заработало, и я сделал следующее:

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

  • Во-вторых, я удалил все остальные python версии (по крайней мере, я пытался) хотя кажется, что я все еще вижу их значки (кажется, что они "не могут быть восстановлены") и даже ту, которую я использовал (Python3 .7.3). Затем я устанавливаю Python 3.7.4.

  • В-третьих, и ответ должен быть таким: я добавил эту строку cnts = imutils.grab_contours (cnts) перед функциями cv2.drawContours (). Получаем это из пакета imutils от github Адриана Роузброка. мой код теперь работает из-за этой строки, которая помогает анализировать контуры для любой используемой вами версии openvv cv2.drawContours (), избегая, таким образом, конфликтов версий, происходящих из функции cv2.findContours (), используемой до cv2.drawContours ().

    В заключение я попытался imutils.grab_contours () ранее с этими изменениями на моем python3 .7.3, но это не сработало. Но я полагаю, что прежде всего комбинация «cnts = imutils.grab_contours (cnts)» и обновления до Python3 .7.4 - вот что решило проблему.

Надежда это полезно

...