导入PyAv模块时,我无法使用imshow()显示带有opencv的图像
没有PyAv模块的代码(按预期工作)
import cv2
img = cv2.imread("test_image.jpeg")
cv2.imshow('image', img)
cv2.waitKey(0)
带有导入的代码(不起作用,只是挂起)
import cv2
import av
img = cv2.imread("test_image.jpeg")
cv2.imshow('image', img)
cv2.waitKey(0)
操作系统:Linux arch 5.18.3-arch1-1#1 SMP PREEMPT_DYNAMIC 2022年6月9日星期四16:14:10+0000 x86_64 GNU/Linux
我是做错了什么,还是这是一个(未知的)问题?
所以这是一个已知的问题,这里提到了,但可以使用文章中提到的解决方法,下面是我如何做到的快速概述:
注意:在python虚拟环境中执行此操作,否则您可能会在长期运行的中遇到问题
- 查找PyAv使用的ffmpeg版本(目前为"ffmpeg-4.4.1-5"),并在此处下载确切的ffmpeg版本
- 像这样
git clone --recursive https://github.com/opencv/opencv-python.git
克隆python opencv github repo并运行此脚本(如果失败,因为路径'/tmp/vvendor/include不存在,只需像这样创建mkdir -p /tmp/vendor/include
) - 完成后,如果选择了正确的ffmpeg版本,则可以检查输出
- 如果一切看起来都是正确的,您可以使用以下命令
make -j4
构建它,并让它构建 - 最后cd到
python_loader
文件夹中,运行python3 setup.py develop
,安装完成:)
您可以卸载pyav
并使用重新安装它,而不必从源代码进行编译
pip install av --no-binary av
这将安装不带FFmpeg的PyAV,并默认使用系统已提供的FFmpeg(可能是OpenCV)。这个答案是由PyAV参考网站的人提出的。这是假设您已经拥有FFmpeg(可能来自OpenCV)。