在Fedora 26上安装OpenCV 2.4.13或3.x时出现VideoCapture无法正常工作的错误25 24 23或22用ffmpeg和python 2.7

当我使用yum时,它安装opencv 3.2.0。 但是我特别需要opencv 2.4.13。

使用Anaconda时,有一个opencv的conda-forge软件包,但安装cv2.VideoCapture()api失败。

另外当我试图安装通过tarc文件的opencv 2.4.13,我卡在cmake,得到以下错误 –

没有findsys / videoio.h

找不到libavcodec

……..

另外cmake给bizzare脚本错误。 请帮忙。

Anaconda没有使用ffmpeg编译的opencv 2.4.13,所以如果你想使用VideoCapture,那么需要编译opencv。 我遵循的步骤描述性列表(严格限于Fedora用户)

删除以前的opencv

sudo yum remove opencv 

安装Python 2.7

 sudo yum install python2.7 

*请使用您的Python 2.7包名称。

安装ffmpeg

从他们的网站下载tarball并解压。 https://www.ffmpeg.org/download.html

 tar -xvf ffmpeg-3.3.0.tar.gz cd ffmpeg-3.3.0 ./configure --prefix=/usr/local --enable-gpl --enable-swscale --enable-shared --enable-postproc --enable-avfilter-lavf 

*删除选项–enable-avfilter-lavf,如果它给错误。

 sudo make sudo make install 

安装OpenCV 2.4.13

下面的软件包将解决sys / videoio.h错误:

 sudo dnf install pjproject-devel.x86_64 2.4.5-8.fc26 ptlib-devel.x86_64 2.10.10-16.fc24 pjproject.x86_64 2.4.5-8.fc26 ptlib.x86_64 2.10.10-16.fc24 

然后安装这些软件包:

 sudo yum install libpng-devel libjpeg-turbo-devel jasper-devel openexr-devel libtiff-devel libwebp-devel libdc1394-devel libv4l-devel gstreamer-plugins-base-devel gtk2-devel tbb-devel eigen3-devel gstreamer1-libav gstreamer1-plugins-base-devel java-1.8.0-openjdk-devel.x86_64 python2-numpy.x86_64 ffmpeg-devel.x86_64 ffmpeg-libs.i686 ffmpeg.x86_64 libavdevice.i686 libpng-devel libjpeg-turbo-devel jasper-devel openexr-devel libtiff-devel libwebp-devel libdc1394-devel libv4l-devel gstreamer-plugins-base-devel gtk2-devel tbb-devel eigen3-devel gstreamer1-libav gstreamer1-plugins-base-devel gtk+extra-devel.x86_64 gtk+-devel.i686 cmake pkg-config libgtk libavcodec libavformat libswscale swig 

下载你选择的OpenCV,例如2.4.13从github(选择2.4.13从分支 – >标签 – > 2.4.13,然后选择从克隆下载):

https://github.com/opencv/opencv

http://opencv.org/releases.html

提取焦油:

 tar -xvf opencv-2.4.13.3.tar.gz cd opencv-2.4.13.3 mkdir build; cd build; 

现在cmake

 sudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_FFMPEG=1 -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_QT=OFF -D WITH_V4L=OFF -D CMAKE_SHARED_LINKER_FLAGS=-Wl,-Bsymbolic -DLD_LIBRARY_PATH=/usr/local/lib/ -DPYTHON_INCLUDE_DIR=$(python -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") -DPYTHON_LIBRARY=$(python -c "import distutils.sysconfig as sysconfig; print(sysconfig.get_config_var('LIBDIR'))") -DCUDA_NVCC_FLAGS="-ccbin /home/rishabh/gcc-4.9.4-x86_64/bin/gcc" -D WITH_CUDA=OFF -D BUILD_opencv_gpu=OFF -D BUILD_opencv_gpuarithm=OFF -D BUILD_opencv_gpubgsegm=OFF -D BUILD_opencv_gpucodec=OFF -D BUILD_opencv_gpufeatures2d=OFF -D BUILD_opencv_gpufilters=OFF -D BUILD_opencv_gpuimgproc=OFF -D BUILD_opencv_gpulegacy=OFF -D BUILD_opencv_gpuoptflow=OFF -D BUILD_opencv_gpustereo=OFF -D BUILD_opencv_gpuwarping=OFF -D WITH_OPENCL=OFF .. 

说明

包含'gpu'文本的标志是用于关闭gpu编译,如果你想用gpu编译,然后将它们设置为ON。 但是GPU需要使用cuda软件包和图形卡才能工作。

这个标志也可以被忽略,因为我们不是用gpu编译的,但是也没有伤害到我。

-DCUDA_NVCC_FLAGS =“ – ccbin /home/rishabh/gcc-4.9.4-x86_64/bin/gcc”

如果你在cmake中遇到脚本错误,

打开文件opencv-2.4.13.3 / cmake / OpenCVPackaging.cmake

– 添加这个

 set(OPENCV_VCSVERSION "2.4.13.3") 

– 在这条线上面

 set(CPACK_PACKAGE_VERSION "${OPENCV_VCSVERSION}") 

在控制台上抛出任何文件名,注释掉阻塞cmake并且无用的各行。

例如opencv-2.4.13.3 / cmake / OpenCVDetectCXXCompiler.cmake

我有80-86行的问题,所以我评论说,因为这些变量没有做别的别的事情。

cmake成功后,继续进行步骤 –

 sudo make sudo make install 

如果您遇到任何链接器错误,那么您将不得不安装相应的依赖关系,或者如果您不打算安装这些模块,请将cmake标志设置为OFF。

安装后步骤:

 echo 'export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH' >> ~/.bashrc source ~/.bashrc 

现在添加

 /usr/local/lib/ 

以下文件:

 /etc/ld.so.conf /etc/ld.so.conf.d/opencv.conf 

现在运行

 sudo ldconfig 

对于Anaconda PATH变量冲突

从PATH变量中删除anaconda路径,并在〜/ .bashrc中编辑

export / PATH = / usr / lib64 / qt-3.3 / bin:/ usr / lib64 / ccache:/ usr / local / bin:/ usr / local / sbin:/ usr / bin:/ usr / sbin:/ opt /斌:/home/rishabh/.local/bin:/家庭/ RISHABH /箱中:/ opt / CUDA /斌/

现在注销并登录到Fedora

执行以下测试:

 python import cv2 cv2.__version__ video = cv2.VideoCapture("your small video.mp4") okay, frame = video.read() print("VideoCapture Read Success - ") print(okay) 

输出

真 – 视频阅读成功

假 – opencv但没有用ffmpeg正确编译。