• pyinstaller打包python+opencv 无法在别人电脑上正常运行 问题所在:opencv_ffmpeg341_64.dll


    用python+opencv写了个程序,在自己电脑上一切正常,但在别人电脑上就是运行不了

    报错:

    Exception in Tkinter callback
    Traceback (most recent call last):
    File "tkinter\__init__.py", line 1699, in __call__
    File "ShowTheWay.py", line 53, in main
    NameError: name 'img' is not defined
    Traceback (most recent call last):
    File "ShowTheWay.py", line 25, in on_mouse
    NameError: name 'img' is not defined

    然后我又回去查代码,也没有写错啊,后来加了几个检查点,才发现是视频读取这里就已经出了问题

    def re_size():
        global img
        img = None
        re_set()
        if shipin.isOpened():
            ret, frame = shipin.read()
            h, w, _ = frame.shape
            img = cv2.resize(frame, (int(w / s), int(h / s)), interpolation=cv2.INTER_AREA)
            print('变形完成')
        else:
            print('视频读取失败')
        cv2.imshow('after resize', img)

    检查到视频读取失败

    也就是

    shipin.isOpened()

    总是返回False

    网上查了下

    https://stackoverflow.com/questions/11699298/opencv-2-4-videocapture-not-working-on-windows

    看来是因为别人电脑上没有opencv环境,而pyinstaller又没有把对应的dll打包到exe里面,坑爹么这不是

    只好手动加一下

    文件名:opencv_ffmpeg341_64.dll

    341是指opencv版本

    我是在anaconda下安装的,所以该文件位置在C:ProgramDataAnaconda3Libsite-packages

    也可以去opencv官网下载

    附上3.4.1的链接https://opencv.org/opencv-3-4-1.html

    下载后直接双击解压

    出来一个opencv的文件夹

    64就选带64的

    把这个dll放到程序目录下面

    在程序里开头加上

    import ctypes
    
    try:
        temp=ctypes.windll.LoadLibrary( 'opencv_ffmpeg341_64.dll' )
    
    except:
        pass

    pyinstaller打包的时候就会自动添加

    保险起见 把这个dll加入到生成的文件夹里

  • 相关阅读:
    对Java课程的感想
    OO第二阶段总结
    OO第一作业周期(前四周)总结
    实验7 流类库和输入输出
    实验6 类的继承和多态
    实验5 类和对象3
    实验4 类与对象2
    实验3 类和对象
    实验2
    实验1
  • 原文地址:https://www.cnblogs.com/mrfri/p/8639505.html
Copyright © 2020-2023  润新知