From 54e7f0876017e176955b232c3b9ebdd1817ecd52 Mon Sep 17 00:00:00 2001 From: Pavel Rojtberg Date: Sun, 11 Oct 2015 18:06:02 +0200 Subject: [PATCH] add python sample to test/ showcase new cap_v4l2 features --- samples/python2/video_v4l2.py | 64 +++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 samples/python2/video_v4l2.py diff --git a/samples/python2/video_v4l2.py b/samples/python2/video_v4l2.py new file mode 100644 index 0000000000..0f03e6bf00 --- /dev/null +++ b/samples/python2/video_v4l2.py @@ -0,0 +1,64 @@ +#!/usr/bin/env python + +''' +VideoCapture sample showcasing some features of the Video4Linux2 backend + +Sample shows how VideoCapture class can be used to control parameters +of a webcam such as focus or framerate. +Also the sample provides an example how to access raw images delivered +by the hardware to get a grayscale image in a very efficient fashion. + +Keys: + ESC - exit + g - toggle optimized grayscale conversion + +''' + +import cv2 + +def decode_fourcc(v): + v = int(v) + return "".join([chr((v >> 8 * i) & 0xFF) for i in range(4)]) + +font = cv2.FONT_HERSHEY_SIMPLEX +color = (0, 255, 0) + +cap = cv2.VideoCapture(0) +cap.set(cv2.CAP_PROP_AUTOFOCUS, False) + +cv2.namedWindow("Video") + +convert_rgb = True +fps = int(cap.get(cv2.CAP_PROP_FPS)) +focus = int(cap.get(cv2.CAP_PROP_FOCUS)) * 100 + +cv2.createTrackbar("FPS", "Video", fps, 30, lambda v: cap.set(cv2.CAP_PROP_FPS, v)) +cv2.createTrackbar("Focus", "Video", focus, 100, lambda v: cap.set(cv2.CAP_PROP_FOCUS, v / 100)) + +while True: + status, img = cap.read() + + fourcc = decode_fourcc(cap.get(cv2.CAP_PROP_FOURCC)) + + fps = cap.get(cv2.CAP_PROP_FPS) + + if not bool(cap.get(cv2.CAP_PROP_CONVERT_RGB)): + if fourcc == "MJPG": + img = cv2.imdecode(img, cv2.IMREAD_GRAYSCALE) + elif fourcc == "YUYV": + img = cv2.cvtColor(img, cv2.COLOR_YUV2GRAY_YUYV) + else: + print("unsupported format") + break + + cv2.putText(img, "Mode: {}".format(fourcc), (15, 40), font, 1.0, color) + cv2.putText(img, "FPS: {}".format(fps), (15, 80), font, 1.0, color) + cv2.imshow("Video", img) + + k = cv2.waitKey(1) + + if k == 27: + break + elif k == ord("g"): + convert_rgb = not convert_rgb + cap.set(cv2.CAP_PROP_CONVERT_RGB, convert_rgb)