"ValueError: not enough values to unpack" when calling cv2.findContours()
"ValueError: not enough values to unpack" when calling cv2.findContours()
我在 运行 时从互联网上得到了这个脚本,我在这行中遇到了一些错误,有人可以帮忙吗?
我不知道错误到底在哪里我在互联网上搜索了一天得到类似的错误。
import cv2
import numpy as np
def main():
#window_name="Cam feed"
#cv2.namedWindow(window_name)
cap=cv2.VideoCapture("C:\Users\ccie\Desktop\768x576.avi")
#filename = 'F:\sample.avi'
#codec=cv2.VideoWriter_fourcc('X','V','I','D')
#framerate=30
#resolution = (500,500)
# VideoFileOutput = cv2.VideoWriter(filename,codec,framerate,resolution)
if cap.isOpened():
ret,frame = cap.read()
else:
ret =False
ret,frame1 = cap.read()
ret,frame2 = cap.read()
while ret:
ret,frame = cap.read()
#VideoFileOutput.write(frame)
d=cv2.absdiff(frame1,frame2)
grey=cv2.cvtColor(d,cv2.COLOR_BGR2GRAY)
blur =cv2.GaussianBlur(grey,(5,5),0)
ret,th=cv2.threshold(blur,20,255,cv2.THRESH_BINARY)
dilated=cv2.dilate(th,np.ones((3,3),np.uint8),iterations=3)
img,c,h=cv2.findContours(dilated,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
最后我得到了这个错误
PS C:\python3.6> .\python.exe .\Contours_Opencv.py
Traceback (most recent call last):
File ".\Contours_Opencv.py", line 51, in <module>
main()
File ".\Contours_Opencv.py", line 37, in main
img,c,h=cv2.findContours(dilated,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
ValueError: not enough values to unpack (expected 3, got 2)
PS C:\python3.6>
错误是因为openCV版本不同,其中findContours returns 3个值,你的版本returns 2个值。
改变
img,c,h=cv2.findContours(dilated,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
至
c,h=cv2.findContours(dilated,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
它应该可以工作。
为了完整性(因为你标记了 openCV3.1):直到 openCV 版本 3.1 findContours 返回 2 个值,版本 3.2 到 3.6 返回 3 个值,从版本 4.0 开始它再次 returns 2 个值。
我在 运行 时从互联网上得到了这个脚本,我在这行中遇到了一些错误,有人可以帮忙吗? 我不知道错误到底在哪里我在互联网上搜索了一天得到类似的错误。
import cv2
import numpy as np
def main():
#window_name="Cam feed"
#cv2.namedWindow(window_name)
cap=cv2.VideoCapture("C:\Users\ccie\Desktop\768x576.avi")
#filename = 'F:\sample.avi'
#codec=cv2.VideoWriter_fourcc('X','V','I','D')
#framerate=30
#resolution = (500,500)
# VideoFileOutput = cv2.VideoWriter(filename,codec,framerate,resolution)
if cap.isOpened():
ret,frame = cap.read()
else:
ret =False
ret,frame1 = cap.read()
ret,frame2 = cap.read()
while ret:
ret,frame = cap.read()
#VideoFileOutput.write(frame)
d=cv2.absdiff(frame1,frame2)
grey=cv2.cvtColor(d,cv2.COLOR_BGR2GRAY)
blur =cv2.GaussianBlur(grey,(5,5),0)
ret,th=cv2.threshold(blur,20,255,cv2.THRESH_BINARY)
dilated=cv2.dilate(th,np.ones((3,3),np.uint8),iterations=3)
img,c,h=cv2.findContours(dilated,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
最后我得到了这个错误
PS C:\python3.6> .\python.exe .\Contours_Opencv.py
Traceback (most recent call last):
File ".\Contours_Opencv.py", line 51, in <module>
main()
File ".\Contours_Opencv.py", line 37, in main
img,c,h=cv2.findContours(dilated,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
ValueError: not enough values to unpack (expected 3, got 2)
PS C:\python3.6>
错误是因为openCV版本不同,其中findContours returns 3个值,你的版本returns 2个值。
改变
img,c,h=cv2.findContours(dilated,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
至
c,h=cv2.findContours(dilated,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
它应该可以工作。
为了完整性(因为你标记了 openCV3.1):直到 openCV 版本 3.1 findContours 返回 2 个值,版本 3.2 到 3.6 返回 3 个值,从版本 4.0 开始它再次 returns 2 个值。