蟒蛇CV2视频分辨率

问题描述 投票:4回答:4

我试图改变视频分辨率(至800x600)以这种方式(带MP4!),但它不工作,当我使用cap.get(3)和(4),其返回每次defualt 1280×720!

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)

没有效果 !

python video resolution cv2
4个回答
6
投票
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


1
投票

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

  1. 正如OpenCV documentationVideoCapture描述的,如果你要访问您的默认摄像头,你需要初始化类,如下所示: 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);

我希望这有帮助。


1
投票

cap.set()低于640,480决议没有影响(至少对我的MacBook Pro)可以提高分辨率,但例如将其设置为300,300没有任何影响。至于我的经验,你定义你resize()后调用read()在框架上。


-1
投票

解决了:

 cv2.namedWindow("framename", 0)
 cv2.resizeWindow("framename", 800, 600)
 cv2.imshow('framename',gray)
© www.soinside.com 2019 - 2024. All rights reserved.