python - 可执行文件中的Python OpenCV流视频错误

标签 python opencv video-streaming opencv3.0

在我的python应用程序中,我正在使用OpenCV来从IP摄像机流式传输视频:

cap = cv2.VideoCapture("http://usr:psw@192.168.1.1/video.cgi")

并且一切正常。

但是我需要获得一个可执行文件,因此我使用了PyInstaller。在生成的.exe中,流不再起作用。

相反,如果我以此更改捕获:
# works with camera_num = 0 (pc's webcam) and = 1 (external USB webcam)
cap = cv2.VideoCapture(camera_num)

从我的电脑的网络摄像头捕获,或与外部USB网络摄像头捕捉,一切正常。

有什么建议么?

最佳答案

感谢@GPPK和@DanMašek的评论,我可以解决问题。

就像@DanMašek所说的那样,问题是“FFMPEG不是硬性依赖”。

因此,一种解决方案是搜索OpenCV的FFMPEG dll。从cosnole启动python:

# import OpenCV module
import cv2
# retrieve the pathname of the file from which the module was loaded
cv2.__file__

输出应该是这样的:
'C:\\Users\\luke\\AppData\\Local\\Programs\\Python\\Python36\\lib\\site-packages\\cv2\\cv2.cp36-win_amd64.pyd'

转到cv2文件夹,搜索opencv_ffmpeg340_64.dll并将其复制到python应用程序的文件夹中。

现在我们必须告诉PyInstaller将此dll添加到.exe中:
pyinstaller -F --add-data "opencv_ffmpeg340_64.dll;." test.py

关于python - 可执行文件中的Python OpenCV流视频错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49881907/

相关文章:

python - 使 Python 脚本与 linux 包相结合,易于最终用户安装

python - 记录格式右对齐级别名称

java - 将 3 channel (BGR) 矩阵转换为 4 channel (ABGR) 矩阵

ffmpeg - 为什么 RTP 不支持多个流到一个端口,但 RTSP 支持?

http - 如何流式传输 html5 视频标签的视频文件

python - 从包中导入只有一个公共(public)成员的子模块时避免重名

python - 修改 Matplotlib 中绘制线的属性

c# - DVR客户端软件SDK工具?

c++ - 传递强硬的论据

c++ - 如何使用 OpenCV 检测大量白色像素的区域?