在我的程序中,我使用视频捕获功能从文件中读取视频并将其显示在窗口上。我正在成功显示视频,但视频是慢动作和全屏。问题是我正在尝试将窗口设置为自定义维度并尝试以正常速度播放视频,但两种尝试都无法正常工作。这是我的代码:
cap = cv2.VideoCapture(self.path)
cap.set(3, 530) # width
ret = cap.set(4, 450) # height
try:
while(cap.isOpened()):
ret, frame = cap.read()
frame = cv2.flip(frame, 0)
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow('frame', gray)
cv2.waitKey(20)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
except:
print("error")
cap.release()
cv2.destroyAllWindows()
cv2.waitKey(1)
cv2.waitKey(1)
cv2.waitKey(1)
cv2.waitKey(1)
有关如何修复我的程序以正常速度播放并遵循我想要强加的维度的任何想法?
更新:我已经尝试了两种建议的方法,如下面的代码所示: flag = cv2.WINDOW_NORMAL cv2.namedWindow('winName',flag)
cap = cv2.VideoCapture(self.path)
cap.set(3, 500)
cap.set(4, 500)
try:
while(cap.isOpened()):
ret, frame = cap.read()
frame = cv2.flip(frame, 0) # bart
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow('winName', gray)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
except:
print("error")
cap.release()
cv2.destroyAllWindows()
cv2.waitKey(1)
cv2.waitKey(1)
cv2.waitKey(1)
cv2.waitKey(1)
但是,该程序仍然无法正常运行,也无法以正常速率播放视频。还有其他想法吗?
答案 0 :(得分:0)
播放视频的速度基于您使用的cv2.waitKey()
(换言之,延迟)。我想如果删除cv2.waiKey(20)
它应该以正常速度播放(if循环中的waitkey()就足够了。)
如果要更改显示视频的窗口大小,首先应创建一个窗口,而不是显示其中的图像。
cv2.namedWindow('winName', flag)
标记可以是cv2.WINDOW_NORMAL
,因此您可以更改尺寸,或cv2.WINDOW_AUTOSIZE
以便窗口适合视频尺寸(当您不使用namedWindow()
标志时设置为cv2.WINDOW_AUTOSIZE
,因此您无法更改大小)。比显示你的框架
cv2.imshow('winName', gray)