用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加入到生成的文件夾里