当我使用yum时,它会安装opencv 3.2.0。但我特别需要opencv 2.4.13。
使用Anaconda,有一个opencv的conda-forge包,但安装cv2.VideoCapture()api失败。
此外,当我尝试通过opencv 2.4.13的tar文件安装时,我陷入了cmake,遇到错误 -
找不到sys / videoio.h
未找到libavcodec
........
cmake也提供了bizzare脚本错误。 请帮忙。
答案 0 :(得分:2)
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的各个行并且无用,无论在控制台上抛出什么文件名。
e.g。的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 /cuda/bin:/home/rishabh/.local/bin:/home/rishabh/bin:/opt/cuda/bin /
现在退出并登录fedora 。
执行以下测试:
python
import cv2
cv2.__version__
video = cv2.VideoCapture("your small video.mp4")
okay, frame = video.read()
print("VideoCapture Read Success - ")
print(okay)
输出 -
True - 视频阅读成功
错误 - opencv但未使用ffmpeg正确编译。