我已经编写了一个名为videoSave.py
的python脚本来读取相机并保存视频。代码如下:
import cv2
def saveCam():
video = cv2.VideoCapture(0)
ret, img = video.read()
h, w = img.shape[:2]
videoSaver = cv2.VideoWriter("videoSave_test.avi", cv2.VideoWriter_fourcc(*'DIVX'), 10, (w, h))
key = 0
while key != 27:
ret, img = video.read()
if not ret:
break
cv2.imshow('img', img)
key = cv2.waitKey(1) & 0xFF
videoSaver.write(img)
videoSaver.release()
if __name__ == '__main__':
saveCam()
直接运行此脚本时效果很好。它可以显示相机获得的图像并将内容保存到视频文件中。
然后我使用命令pyinstaller -F videoSave.py
将此脚本构建到exe文件中。我可以得到exe文件。当执行该操作时,我可以看到相机获得的图像,但是它保存的视频文件具有零尺寸!
我的环境是:
Python 3.7.4
Windows 7
Pyinstaller 3.5
opencv 4.1.2
答案 0 :(得分:1)
我已经解决了此问题,方法是将Anaconda3 \ envs \ your_env_name中的opencv_video_ffmpeg412_64.dll复制到exe文件所在的目录中。但是我不知道为什么。
答案 1 :(得分:1)
您必须将opencv_videoio_ffmpeg420_64.dll打包到.exe中
为此,请以这种方式使用--add-binary
选项(我认为您也可以使用--add-data
选项):
pyinstaller --onefile videoSave.py --add-binary venv\Lib\site-packages\cv2\opencv_videoio_ffmpeg420_64.dll;.
当然,您必须指定自己的.dll路径(.dll有时可能具有其他名称)。
请注意,最后是“;”。在Windows和“:”上。在大多数的Unix系统上,按照here的规定进行操作(部分:“捆绑内容,在哪里搜索”)
根据此issue,似乎是因为Pyinstaller没有在.exe中打包opencv_ffmpeg340.dll,这对于保存视频文件是必要的。
看起来您可以手动复制.dll并将其粘贴到.exe所在的文件夹中,程序会读取该文件,这将说明@ToughMind提供的解决方案