我试图改变视频分辨率(至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)
没有效果 !
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);
我认为有代码中的几件事情,可能需要注意。
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...
resize
方法描述here。这需要在循环里做的,你在读帧之后。这可能是这样的:
resize(ret, ret, Size(800, 600), 0, 0, INTER_CUBIC);
我希望这有帮助。
cap.set()
低于640,480
决议没有影响(至少对我的MacBook Pro)可以提高分辨率,但例如将其设置为300,300
没有任何影响。至于我的经验,你定义你resize()
后调用read()
在框架上。
解决了:
cv2.namedWindow("framename", 0)
cv2.resizeWindow("framename", 800, 600)
cv2.imshow('framename',gray)