7

我尝试以这种方式更改视频分辨率(使用 mp4!)(到 800x600):但它不起作用,当我使用 cap.get(3) 和 (4) 时,它每次默认返回 1280x720!

import cv2
cap = cv2.VideoCapture('file')
while(cap.isOpened()):
    cv2.waitKey(10)

    ret, frame = cap.read()
    cap.set(3, 800)
    cap.set(4, 600)

    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2BGRA) 
    print cap.get(3) # return default 1280       

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

cap.release()
cv2.destroyAllWindows()

我做错了什么?

我试过 -

cv2.resizeWindow("ssss", 300, 300), 

cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 600)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 800)

没有效果 !

4

3 回答 3

10
import cv2
cap = cv2.VideoCapture(0)
while(cap.isOpened()):
    cv2.waitKey(10)

    ret, frame = cap.read()
    cap.set(3, 800)
    cap.set(4, 600)

    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2BGRA) 
    print cap.get(3) # return default 1280       

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

cap.release()
cv2.destroyAllWindows()

您的代码适用于网络摄像头,而不适用于文件

对于视频文件,您可以调整窗口大小

cv2.resizeWindow(winname, width, height) 

对于第一个使用名称定义窗口并调整其大小

例子

  cv2.namedWindow("frame", 0);
  cv2.resizeWindow("frame", 800,600);

用于细节调整窗口

于 2017-08-10T05:56:34.020 回答
2

我认为您的代码中有几件事可能需要注意。

  1. OpenCV 文档中所述VideoCapture,如果您想访问您的默认网络摄像头,您需要按如下方式初始化该类:

    cap = cv2.VideoCapture('file')
    

    如果您尝试更改相机的分辨率,我建议将两set行移动到初始化的正下方,cap并且只执行一次 - 而不是每次在框架中读取。您还可以使用常量来访问正确的属性:

    cap = cv2.VideoCapture('file')
    cap.set(cv2.CAP_PROP_FRAME_WIDTH, width)
    cap.set(cv2.CAP_PROP_FRAME_HEIGHT, height)
    
    # Your while loop and the rest of the code...
    
  2. 如果您尝试从文件中读取帧并想要更改其分辨率,您可能需要使用此处resize描述的方法。这需要在循环内完成,在你读入框架之后。它可能是这样的:

    resize(ret, ret, Size(800, 600), 0, 0, INTER_CUBIC); 
    

我希望这有帮助。

于 2017-08-10T05:56:17.207 回答
1

cap.set()在以下分辨率下无效640,480 (至少对于我的 macbook pro)您可以提高分辨率,但例如将其设置为300,300无效。至于我的经验,你需要resize()在你之后调用框架read()

于 2019-02-06T10:39:58.650 回答