python cv2视频分辨率

2024-09-28 17:15:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试更改视频分辨率(使用mp4!)(对800x600)这样:但它不起作用,当我使用cap.get(3)和(4)时,它每次都会返回defualt 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)

没有效果!


Tags: importget视频分辨率cv2framemp4cap
3条回答

我认为你的代码中有一些东西可能需要注意。

  1. OpenCV documentationfor 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方法,如here所述。这需要在循环内完成,就在您读入帧之后。可能是这样的:

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

我希望这能有帮助。

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);

for Detail resize window

cap.set()在低于640,480分辨率时不起作用 (至少对于我的macbook pro) 您可以提高分辨率,但将其设置为300,300没有效果。 至于我的经验,你应该在你之后在画面上叫resize()

相关问题 更多 >