使用 OpenCV 获取帧时,如何测试相机的实际分辨率?

use*_*339 2 python camera opencv image-processing

我正在使用 Python/OpenCV,从 USB 网络摄像头(Logitech C615 摄像头,据说是 HD 1080p)获取帧。1080p 的纵横比为 16:9,因此我应该能够以所有这些分辨率获取图像:

1920 x 1080
1600 x 900
1366 x 768
1280 x 720
1024 x 576
Run Code Online (Sandbox Code Playgroud)

然而,我没有编写相机驱动程序,所以我怎么知道我是否真的从相机中获取了这些像素?例如,我可以指定 3840 x 2160 并获得该大小的视频帧!

鉴于这些不同的分辨率设置,是否有一种系统的方法可以评估/确定相机的实际分辨率或有效分辨率?下面是一些用于演示的 Python/OpenCV 代码。

import numpy as np
import cv2, cv
import time

cap = cv2.VideoCapture(0) # note you may need to pass 1 instead of 0 into this to get your camera  

cap.set(3,3840)     #horizontal pixels
cap.set(4,2160)     #vertical pixels
cap.set(5, 15)      #frame rate
time.sleep(2)       #trying to solve a delay issue ... never mind this


#acquire the video from the camera
while(cap.isOpened()):
    ret, frame = cap.read()
    cv2.imshow("captured video", frame)
    if cv2.waitKey(33) & 0xFF == ord('q'):
        break
cap.release()
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)

ber*_*rak 5

“鉴于这些不同的分辨率设置,有没有一种系统的方法可以评估/确定相机的实际分辨率或有效分辨率?” - 只需询问:

import cv2
cam = cv2.VideoCapture(0)
w = cam.get(cv2.CV_CAP_PROP_FRAME_WIDTH)
h = cam.get(cv2.CV_CAP_PROP_FRAME_HEIGHT)
print w,h
while cam.isOpened():
    err,img = cam.read()
    cv2.imshow("lalala", img)
    k = cv2.waitKey(10) & 0xff
    if k==27:
        break
Run Code Online (Sandbox Code Playgroud)

  • 有点晚了,但它实际上是 OpenCV 3.x 的 ```cv2.CAP_PROP_FRAME_WIDTH``` (4认同)
  • 请不。opencv 3.0 指日可待,还有 30 天。周围不会有任何 CV_* 常量或 cv2.cv 常量。让我们保持原样 (3认同)