python - 无法使用 [OpenCV] cv2.VideoCapture.set() 设置帧宽度和高度

标签 python opencv video kinect video-capture

我正在尝试将视频捕获的帧/窗口大小减小到 320x180,但我似乎做不到。我正在使用适用于 Xbox One 的 Windows Kinect,它使用适配器连接到我的电脑。

我尝试将 cv2.CAP_PROP_FRAME_WIDTH 设置为 320,将 cv2.CAP_PROP_FRAME_HEIGHT 设置为 180,但是一旦我尝试获取值,它会返回 1920 和 1080。我也有尝试安装和重新安装 Kinect SDK 和驱动程序。

import cv2
import numpy as np

vid = cv2.VideoCapture(0)

vid.set(cv2.CAP_PROP_FRAME_WIDTH, 320)
vid.set(cv2.CAP_PROP_FRAME_HEIGHT, 180)
vid.set(cv2.CAP_PROP_FPS, 25)

print(vid.get(cv2.CAP_PROP_FPS))
print(vid.get(cv2.CAP_PROP_FRAME_WIDTH))

while True:
    ret, frame = vid.read()
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # Display the resulting frame
    cv2.imshow('frame', gray)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

vid.release()
cv2.destroyAllWindows()

print output

我想知道问题出在哪里,希望能得到解决。

最佳答案

想法是调整框架大小而不必担心设置默认框架大小。您可以使用 cv2.resize() 而不是使用 cv2.VideoCapture().set()将原始 1920x1080 帧调整为 320x180。但是这种方法不保持纵横比。如果你想保持宽高比,你可以使用 imutils图书馆。 imutils.resize() 函数调整框架大小并保持宽高比。将 width 参数更改为您想要的分辨率

import cv2
import imutils

cap = cv2.VideoCapture(0)

while(cap.isOpened()):
    ret, frame = cap.read()

    frame = imutils.resize(frame, width=320)
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    cv2.imshow('frame', gray)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

关于python - 无法使用 [OpenCV] cv2.VideoCapture.set() 设置帧宽度和高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57660458/

相关文章:

python - 如何在不丢失宏的情况下使用 pandas、openpyxl、xlwings 使用宏更新现有的 xlsm 工作表

python - 使用 mechanize Python 登录 Dropbox

javascript - 使用 Javascript 动态替换 HTML5 标签

jquery <video> .play 无法在移动设备上运行

javascript - Multi-drm 内容的 Dash.js 问题

python csv writer没有正确处理转义 '|'

python - Elastic Beanstalk 不适用于 SQLite

linux - opencv导入问题和双重安装

c++ - 创建 LBP 直方图

c++ - 从 OpenCV 3 切换到 OpenCV 4 会导致网络摄像头以最高 5 fps 的速度录制,而不是通常的 30 fps