ValueError: too many values to unpack (expected 2)

shruti A
shruti A used Ask the Experts™
on
ValueError: too many values to unpack (expected 2) this error occured when executing below program
# USAGE
# python distance_to_camera.py

# import the necessary packages
import numpy as np
import cv2

def find_marker(image):
	# convert the image to grayscale, blur it, and detect edges
	gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
	gray = cv2.GaussianBlur(gray, (5, 5), 0)
	edged = cv2.Canny(gray, 35, 125)

	# find the contours in the edged image and keep the largest one;
	# we'll assume that this is our piece of paper in the image
	(cnts, _) = cv2.findContours(edged.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
	c = max(cnts, key = cv2.contourArea)

	# compute the bounding box of the of the paper region and return it
	return cv2.minAreaRect(c)

def distance_to_camera(knownWidth, focalLength, perWidth):
	# compute and return the distance from the maker to the camera
	return (knownWidth * focalLength) / perWidth

# initialize the known distance from the camera to the object, which
# in this case is 24 inches
KNOWN_DISTANCE = 24.0

# initialize the known object width, which in this case, the piece of
# paper is 12 inches wide
KNOWN_WIDTH = 11.0

# initialize the list of images that we'll be using
IMAGE_PATHS = ["images/2ft.png", "images/3ft.png", "images/4ft.png"]

# load the furst image that contains an object that is KNOWN TO BE 2 feet
# from our camera, then find the paper marker in the image, and initialize
# the focal length
image = cv2.imread(IMAGE_PATHS[0])
marker = find_marker(image)
focalLength = (marker[1][0] * KNOWN_DISTANCE) / KNOWN_WIDTH

# loop over the images
for imagePath in IMAGE_PATHS:
	# load the image, find the marker in the image, then compute the
	# distance to the marker from the camera
	image = cv2.imread(imagePath)
	marker = find_marker(image)
	inches = distance_to_camera(KNOWN_WIDTH, focalLength, marker[1][0])

	# draw a bounding box around the image and display it
	box = np.int0(cv2.cv.BoxPoints(marker))
	cv2.drawContours(image, [box], -1, (0, 255, 0), 2)
	cv2.putText(image, "%.2fft" % (inches / 12),
		(image.shape[1] - 200, image.shape[0] - 20), cv2.FONT_HERSHEY_SIMPLEX,
		2.0, (0, 255, 0), 3)
	cv2.imshow("image", image)
	cv2.waitKey(0)
 

Open in new window




error came like this

Traceback (most recent call last):
  File "C:\Users\vip\AppData\Local\Programs\Python\Python36-32\distance-to-camera\distance_to_camera.py", line 41, in <module>
    marker = find_marker(image)
  File "C:\Users\vip\AppData\Local\Programs\Python\Python36-32\distance-to-camera\distance_to_camera.py", line 16, in find_marker
    (cnts, _) = cv2.findContours(edged.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
ValueError: too many values to unpack (expected 2)
>>> 

so what i need to do to execute it correctly
Comment
Watch Question

Do more with

Expert Office
EXPERT OFFICE® is a registered trademark of EXPERTS EXCHANGE®
First, what version of cv2 do you have?
print(cv2.__version__)

Open in new window

For version 3.3.0 on my machine, help(cv2.findContours) says that findContours returns 3 values: image, contours, hierarchy
Thus I would guess you need to change your call from
(cnts, _) = cv2.findContours(edged.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)

Open in new window

to
(_, cnts, _) = cv2.findContours(edged.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)

Open in new window

Again, that would be a guess

Commented:
mine also 3.3.0 version so its giving error still after editing what you have said

Commented:
Traceback (most recent call last):
  File "C:\Users\vip\AppData\Local\Programs\Python\Python36-32\distance-to-camera\distance_to_camera.py", line 54, in <module>
    box = np.int0(cv2.cv.BoxPoints(marker))
AttributeError: module 'cv2.cv2' has no attribute 'cv'

giving error like this
Become a Certified Penetration Testing Engineer

This CPTE Certified Penetration Testing Engineer course covers everything you need to know about becoming a Certified Penetration Testing Engineer. Career Path: Professional roles include Ethical Hackers, Security Consultants, System Administrators, and Chief Security Officers.

Seems like you're using code for an earlier version of cv2.
From where did you get the code? Perhaps they have an updated version somewhere.
or you can try to download an earlier version of cv2 and use that instead.
Question inactive

Do more with

Expert Office
Submit tech questions to Ask the Experts™ at any time to receive solutions, advice, and new ideas from leading industry professionals.

Start 7-Day Free Trial