Cv2.videocapture.read () does not return a numpy array

I have this code that is trying to capture a frame from my webcam on a raspberry pi and save it as an image. I use opencv 2, but strange errors occur when I run the code.

import time import sys from subprocess import call import ftputil import cv2 cam = cv2.VideoCapture() #cam.set(CV_CAP_PROP_FRAME_WIDTH, 640) #cam.set(CV_CAP_PROP_FRAME_HEIGHT, 480) while True: #call("streamer -q -f jpeg -s 640x480 -o ./current.jpeg", shell=True) #time.sleep(0.2); #call("killall -q streamer", shell=True) cam.open(-1) image = cam.read() cv2.imwrite("current.jpeg",image) host = ftputil.FTPHost() #host.remove("/domains//public_html/webcam.jpg") host.upload("./current.jpeg", "/domains//public_html/webc$ host.close() host = ftputil.FTPHost() filename = str(time.time()) + ".jpg" #host.remove("/domains//public_html/webcam.jpg") host.upload("./current.jpeg", "/webcamarchive/"+filename, mode='b') host.close() time.sleep(10); 

You can ignore the ftp part and commented lines .. This is what the program returns:

 VIDIOC_QUERYMENU: Invalid argument VIDIOC_QUERYMENU: Invalid argument VIDIOC_QUERYMENU: Invalid argument VIDIOC_QUERYMENU: Invalid argument VIDIOC_QUERYMENU: Invalid argument VIDIOC_QUERYMENU: Invalid argument VIDIOC_QUERYMENU: Invalid argument Traceback (most recent call last): File "kvamskogen.py", line 18, in <module> cv2.imwrite("current.jpeg",image) TypeError: <unknown> is not a numpy array 

What is wrong here?

+4
source share
2 answers

Reading ( cam.read() ) from VideoCapture returns a tuple (return value, image) . In the first element, you check to see if the reading was read successfully, and if that was then, you go on to use the returned image .

This is described at http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html

+9
source

Everything indicated in mmgp is in place; cam.read() first returns a boolean indicating whether the read was successful, and then the image itself (which will be empty if the return value was False ). Also note that if you are not using the return value for anything, you can simply set this part to _ , which tells Python to β€œignore me”; this line will look something like _, image = cam.read() . In addition, it is usually recommended to specify the index where your camera is located (usually 0 if you have only one connected camera) when calling cv2.VideoCapture() , so if you have several connected cameras, OpenCV knows which camera reads (otherwise it may just work because it does not know what to do).

+2
source

All Articles