Python、cvzone - 为什么我会收到此 ValueError?
Python, cvzone - why do i get this ValueError?
我正在尝试使用两只手(手势控制图像缩放)放大图片,但是当尝试使用两只手时出现此错误,但我不知道为什么。在制作我的程序时,我遵循了本教程:https://www.youtube.com/watch?v=VPaFV3QBsEw&t=675s。这很奇怪,因为这个程序对他有用。
这是我得到的错误:
hands, img = detector.findHands(img)
ValueError: too many values to unpack (expected 2)
这是我的代码:
import cv2
from cvzone.HandTrackingModule import HandDetector
cap = cv2.VideoCapture(0)
cap.set(3, 1280)
cap.set(4, 720)
detector = HandDetector(detectionCon=0.7)
startDist = None
scale = 0
cx, cy = 500,500
while True:
success, img = cap.read()
hands, img = detector.findHands(img)
img1 = cv2.imread("kung_fu_panda.png")
if len(hands) == 2:
if detector.fingersUp(hands[0]) == [1, 1, 0, 0, 0] and \
detector.fingersUp(hands[1]) == [1, 1, 0, 0, 0]:
lmList1 = hands[0]["lmList"]
lmList2 = hands[1]["lmList"]
# point 8 is the tip of the index finger
if startDist is None:
length, info, img = detector.findDistance(hands[0]["center"], hands[1]["center"], img)
startDist = length
length, info, img = detector.findDistance(hands[0]["center"], hands[1]["center"], img)
scale = int((length - startDist) // 2)
cx, cy = info[4:]
print(scale)
else:
startDist = None
try:
h1, w1, _= img1.shape
newH, newW = ((h1+scale)//2)*2, ((w1+scale)//2)*2
img1 = cv2.resize(img1, (newW,newH))
img[cy-newH//2:cy+ newH//2, cx-newW//2:cx+ newW//2] = img1
except:
pass
cv2.imshow("Image", img)
cv2.waitKey(1)
cvzone 图书馆每次都在更新他们的图书馆。正如您在视频开头看到的那样,当他导入 cvzone 包时,他使用的是 cvzone 版本 1.5.0.
我用其他版本尝试了您的代码,得到了与您的类似的错误,但在 1.5.0 版本中,您的代码运行良好。
您可以使用 my answer here 将项目中的 cvzone 库的版本更改为 1.5.0。
我正在尝试使用两只手(手势控制图像缩放)放大图片,但是当尝试使用两只手时出现此错误,但我不知道为什么。在制作我的程序时,我遵循了本教程:https://www.youtube.com/watch?v=VPaFV3QBsEw&t=675s。这很奇怪,因为这个程序对他有用。
这是我得到的错误:
hands, img = detector.findHands(img)
ValueError: too many values to unpack (expected 2)
这是我的代码:
import cv2
from cvzone.HandTrackingModule import HandDetector
cap = cv2.VideoCapture(0)
cap.set(3, 1280)
cap.set(4, 720)
detector = HandDetector(detectionCon=0.7)
startDist = None
scale = 0
cx, cy = 500,500
while True:
success, img = cap.read()
hands, img = detector.findHands(img)
img1 = cv2.imread("kung_fu_panda.png")
if len(hands) == 2:
if detector.fingersUp(hands[0]) == [1, 1, 0, 0, 0] and \
detector.fingersUp(hands[1]) == [1, 1, 0, 0, 0]:
lmList1 = hands[0]["lmList"]
lmList2 = hands[1]["lmList"]
# point 8 is the tip of the index finger
if startDist is None:
length, info, img = detector.findDistance(hands[0]["center"], hands[1]["center"], img)
startDist = length
length, info, img = detector.findDistance(hands[0]["center"], hands[1]["center"], img)
scale = int((length - startDist) // 2)
cx, cy = info[4:]
print(scale)
else:
startDist = None
try:
h1, w1, _= img1.shape
newH, newW = ((h1+scale)//2)*2, ((w1+scale)//2)*2
img1 = cv2.resize(img1, (newW,newH))
img[cy-newH//2:cy+ newH//2, cx-newW//2:cx+ newW//2] = img1
except:
pass
cv2.imshow("Image", img)
cv2.waitKey(1)
cvzone 图书馆每次都在更新他们的图书馆。正如您在视频开头看到的那样,当他导入 cvzone 包时,他使用的是 cvzone 版本 1.5.0.
我用其他版本尝试了您的代码,得到了与您的类似的错误,但在 1.5.0 版本中,您的代码运行良好。
您可以使用 my answer here 将项目中的 cvzone 库的版本更改为 1.5.0。