Avatar of shruti A
shruti A
 asked on

ValueError: too many values to unpack (expected 2)

ValueError: too many values to unpack (expected 2) this error occured when executing below program
# 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

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

# 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)

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
Python* Opencv

Avatar of undefined
Last Comment
Flabio Gates

8/22/2022 - Mon
Flabio Gates

First, what version of cv2 do you have?

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

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

Open in new window

Again, that would be a guess
shruti A

mine also 3.3.0 version so its giving error still after editing what you have said
shruti A

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
I started with Experts Exchange in 2004 and it's been a mainstay of my professional computing life since. It helped me launch a career as a programmer / Oracle data analyst
William Peck
Flabio Gates

View this solution by signing up for a free trial.
Members can start a 7-Day free trial and enjoy unlimited access to the platform.
See Pricing Options
Start Free Trial
Ask your own question & get feedback from real experts
Find out why thousands trust the EE community with their toughest problems.
Flabio Gates

or you can try to download an earlier version of cv2 and use that instead.
Flabio Gates

Question inactive