I'm following this tutorial (specifically step 6) to get basic video working with openCV and my Pi 3 B. I know the camera works, because the
camera.stop_preview() code works just fine. For reference this is the code I'm using:
from picamera.array import PiRGBArray from time import sleep from PIL import Image import imagehash import cv2 import time from scipy.spatial import distance # initialize the camera and grab a reference to the raw camera capture camera = PiCamera() camera.resolution = (640, 480) camera.framerate = 32 rawCapture = PiRGBArray(camera, size=(640, 480)) # allow the camera to warmup time.sleep(0.1) for frame in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True): # grab the raw NumPy array representing the image, then initialize the timestamp # and occupied/unoccupied text image = frame.array # show the frame cv2.imshow("Frame", image) key = cv2.waitKey(1) & 0xFF # clear the stream in preparation for the next frame rawCapture.truncate(0) # if the `q` key was pressed, break from the loop if key == ord("q"): break
When I run the program (using
python camera.py) I get a window showing up on the Pi's screen, but it's black and hitting the 'q' key does nothing to stop it (I have to ctrl+c to quit). I put prints throughout the loop and they show up fine, so the loop is running without crashing. I printed out the 'key' value and it's always 255, no matter what key I press, so that's weird too.
I suspect the problem may be that I'm using old openCV (2.4.9 I think, or whatever is in the Debian repo), which I installed using
sudo apt-get install python-opencv libopencv-dev. I tried installing openCV 3.1 with this script, but despite having 2.5gb space on my 8gb microSD card, the massive amount of code filled it up completely and gave me an error. Can my issue be explained by different openCV version, and if so, how can I install 3.1 without consuming all my 'disk' space?
edit: I managed to install openCV 3.1 with the script I mentioned, and despite that, the camera python script still fails to run properly, only showing a black window. Why is this happening? The code is literally line for line the same as the tutorial, and now even the library is the same.
edit again: Minor breakthrough; discovered that hitting the 'q' key on the keyboard attached to the Pi itself was the trick. Also, changed the
format="bgr" line to
format="rgb" out of curiosity and found that, hooray, I get a video stream! Except the blues are now red and the reds are blue. I can see why the format was 'bgr', but I don't yet see why it doesn't show me any video in that format. I don't think the colour change matters to me much, since what I'll be doing (pHashing) doesn't require colour anyway, but it's still weird.