用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:\ProgramData\Anaconda3\Lib\site-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加入到生成的文件夹里
来源:oschina
链接:https://my.oschina.net/u/4325884/blog/4034495