使用Opencv播放视频时提高分辨率卡顿解决
当分辨率配置成19201080时卡顿,当时配置成19001080时就完全不卡顿,并且视频也会自动视频适配1920*1080
if self.cap is not None:
self.cap.release()
# 需要重新载入新的摄像头
self.outLabel.setPixmap(QPixmap(''))
self.outLabel.setText("加载中,请稍候...")
# self.cap = cv2.VideoCapture(self.index, cv2.CAP_MSMF)
self.cap = cv2.VideoCapture(self.index)
# self.cap = cv2.VideoCapture(self.index, cv2.CAP_DSHOW)
# width = self.cap.get(cv2.CAP_PROP_FRAME_WIDTH)
# self.video_h = self.cap.get(4)
# self.video_w = self.cap.get(3)
self.cap.set(3, 1900)
self.cap.set(4, 1080)
import cv2 as cv
if __name__ == "__main__":
cap = cv.VideoCapture()
cap.open(1, cv.CAP_DSHOW) # 我这里0为电脑自带摄像头,1为外接相机
cap.set(cv.CAP_PROP_FOURCC, cv.VideoWriter_fourcc('M', 'J', 'P', 'G'))
cap.set(cv.CAP_PROP_FRAME_WIDTH, 1900) # 解决问题的关键!!!
cap.set(cv.CAP_PROP_FRAME_HEIGHT, 1080)
cap.set(cv.CAP_PROP_FPS, 30)
while True:
if not cap.isOpened():
print('can not open camera')
break
ret, frame = cap.read() # 读取图像
if not ret: # 图像读取失败则直接进入下一次循环
continue
cv.namedWindow("cv_test")
cv.imshow('cv_test', frame)
my_key = cv.waitKey(1)
# 按q退出循环,0xFF是为了排除一些功能键对q的ASCII码的影响
if my_key & 0xFF == ord('q'):
break
#释放资源
cap.release()
cv.destroyAllWindows()
使用Opencv播放视频时,第一次打开太慢
通过使用cv2.CAP_DSHOW协议可以秒开,我这里使用USB摄像头部分使用系统默认驱动无法打开,得使用微软的协议cv2.CAP_MSMF
不过通过实测,安装AMCAP视频驱动后这些USB摄像头就可以使用cv2.CAP_DSHOW协议秒开了
self.cap = cv2.VideoCapture(self.index, cv2.CAP_DSHOW)
针对每次开机后服务都不启动,我将安装的驱动文件包内文件排查后发现,服务使用Paizhao.exe安装包启用,所以我将安装包全部拷贝至项目目录,并命名为Camera
通过每次启动上位机执行调用服务,让系统默认支持,同时规避了每次在相同系统下需要安装的问题
import subprocess
........
if __name__ == '__main__':
# 解决打包不允许执行多进程的bug
multiprocessing.freeze_support()
# 尝试启动Camera驱动
# noinspection PyBroadException
try:
subprocess.Popen(r"./Camera/vista_xp64/Paizhao.exe")
except Exception as e:
logger.warning("启动摄像机驱动失败%s" % e)
版权说明
本文地址:http://www.liuyangdeboke.cn/?post=46
未标注转载均为本站远程,转载请注明文章出处:
发表评论