Ask Your Question
0

Error when running example code

asked 2020-03-25 13:54:22 -0600

HunterP gravatar image

I've been following this tutorial, but once I ran the second script when analyzing the white car moving, I received the following error in Python's shell:

usage: VisionTest2.py [-h] image
VisionTest2.py: error: the following arguments are required: image

My code is as follows:

import numpy as np
import cv2 as cv
import argparse

parser = argparse.ArgumentParser(description='This sample demonstrates the meanshift algorithm. \
                                              The example file can be downloaded from: \

https://www.bogotobogo.com/python/OpenCV_Python/images/mean_shift_tracking/slow_traffic_small.mp4')
parser.add_argument('image', type=str, help = r"C:\Users\Hunter\Desktop\123.PNG")
args = parser.parse_args()

cap = cv.VideoCapture(args.image)

# take first frame of the video
ret,frame = cap.read()

# setup initial location of window
x, y, w, h = 300, 200, 100, 50 # simply hardcoded the values
track_window = (x, y, w, h)

# set up the ROI for tracking
roi = frame[y:y+h, x:x+w]
hsv_roi =  cv.cvtColor(roi, cv.COLOR_BGR2HSV)
mask = cv.inRange(hsv_roi, np.array((0., 60.,32.)), np.array((180.,255.,255.)))
roi_hist = cv.calcHist([hsv_roi],[0],mask,[180],[0,180])
cv.normalize(roi_hist,roi_hist,0,255,cv.NORM_MINMAX)

# Setup the termination criteria, either 10 iteration or move by atleast 1 pt
term_crit = ( cv.TERM_CRITERIA_EPS | cv.TERM_CRITERIA_COUNT, 10, 1 )

while(1):
    ret, frame = cap.read()

if ret == True:
    hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)
    dst = cv.calcBackProject([hsv],[0],roi_hist,[0,180],1)

    # apply meanshift to get the new location
    ret, track_window = cv.meanShift(dst, track_window, term_crit)

    # Draw it on image
    x,y,w,h = track_window
    img2 = cv.rectangle(frame, (x,y), (x+w,y+h), 255,2)
    cv.imshow('img2',img2)

    k = cv.waitKey(30) & 0xff
    if k == 27:
        break
else:
    break

I'm using python 3.6.5 and OpenCV 4.2.0 installed via pip.

Also, something to point out in this line,

parser.add_argument('image', type=str, help = r"C:\Users\Hunter\Desktop\123.PNG")

the "r" before the path to the image is supposed to denote a raw string in order to prevent python from reading the \U as Unicode, however, in my python IDLE, it seems to indicate the r as part of the string. Furthermore, the r denoted with the code feature on this forum is not part of the string. Maybe this is an issue?

Quick update, the r does not seem to cause the issue. I placed the same image in my C: directory and adressed it with no "R", and the same error occurred.

edit retag flag offensive close merge delete

Comments

just use forward slashes, even on windows ...

berak gravatar imageberak ( 2020-03-25 13:59:15 -0600 )edit

I tried that too, same exact error

HunterP gravatar imageHunterP ( 2020-03-25 14:02:38 -0600 )edit
1

add_argument just describes the arguments to the app. The path in "help" is a help string. You need to pass the image path on the command line. If you don't wish to do that, don't use any argument parsers.

mvuori gravatar imagemvuori ( 2020-03-25 14:47:20 -0600 )edit

Okay, I believe I've removed the argument parsers correctly, but I'm not sure. The upper part of my code looks like this:

import numpy as np
import cv2 as cv
cap = cv.VideoCapture('C:/Users/Hunter/Desktop/123.png')

However, when I run the script, nothing seems to happen or pop up. Also, if you can't tell, I'm an OpenCV noob

HunterP gravatar imageHunterP ( 2020-03-25 16:45:56 -0600 )edit

@HunterP It worked for me.

  • Did you downloaded mp4?
  • How did you write command?
  • Did you get help VisionTest2.py [-h] image?
supra56 gravatar imagesupra56 ( 2020-03-26 12:16:34 -0600 )edit

1 answer

Sort by ยป oldest newest most voted
1

answered 2020-10-03 12:29:02 -0600

HunterP gravatar image

Looking back at this, I was attempting to open a png file with VideoCapture()

When opening a png file, you must use cv2.imread("path/to/image")

when opening a video, you must use cv2.VideoCapture("/path/to/video")

when accessing a webcam, you must use cv2.VideoCapture(webcam_device_id), where webcam_device_id is an integer, usually 0, 1, or 2

edit flag offensive delete link more

Question Tools

1 follower

Stats

Asked: 2020-03-25 13:51:05 -0600

Seen: 1,150 times

Last updated: Oct 03 '20