1. 当前位置:网站首页 > Python

Opencv-python开发视频播放器的部分BUG


使用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)

本文最后更新于2023-5-25,已超过 3个月没有更新,如果文章内容或图片资源失效,请留言反馈,我们会及时处理,谢谢!
版权说明

本文地址:http://www.liuyangdeboke.cn/?post=46
未标注转载均为本站远程,转载请注明文章出处:

发表评论

联系我们

在线咨询:点击这里给我发消息

微信号:17721538135

工作日:9:00-23:00,节假日休息

扫码关注