#!/usr/bin/env python3 import argparse import sys import cv2 as cv parser = argparse.ArgumentParser(description="Capture one frame from an OpenCV camera.") parser.add_argument("--camera", type=int, default=0, help="camera index, usually 0 for the default camera") parser.add_argument("--output", default="capture.jpg", help="image file to write") parser.add_argument("--warmup-frames", type=int, default=5, help="frames to read before saving the output frame") args = parser.parse_args() cap = cv.VideoCapture(args.camera) if not cap.isOpened(): sys.exit(f"Cannot open camera {args.camera}") try: backend = cap.getBackendName() frame = None for _ in range(max(args.warmup_frames, 0) + 1): ok, frame = cap.read() if not ok or frame is None: sys.exit("Cannot read a frame from the camera") height, width = frame.shape[:2] if not cv.imwrite(args.output, frame): sys.exit(f"Cannot write {args.output}") print(f"Opened camera {args.camera} with backend {backend}") print(f"Frame size: {width}x{height}") print(f"Saved frame: {args.output}") finally: cap.release()