2017-09-03 50 views
0

當我使用yum時,它會安裝opencv 3.2.0。但我特別需要opencv 2.4.13。VideoCapture在安裝Fedora 26上的OpenCV 2.4.13或3.x時出現錯誤25 24 23或22與ffmpeg和python 2.7

隨着Anaconda,有一個opencv conda-forge軟件包,但安裝cv2.VideoCapture()api失敗。

此外,當我試圖通過OpenCV的2.4.13的tar文件來安裝,我陷在cmake的,讓下面的錯誤 -

SYS/videoio.h沒有找到

libavcodec的不發現

........

而且cmake的是給腳本的bizzare錯誤秒。 請幫忙。

回答

1

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

安裝從他們的網站

下載壓縮包並解壓它。 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 

* remove選項--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的腳本錯誤然後做these-

開放文件的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 

對於阿納康達PATH變量衝突

移除水蟒路徑從在〜/ .bashrc也

出口PATH =的/ usr/lib64下/ QT-3.3/bin路徑變量和編輯:在/ usr/lib64的/ ccache的:在/ usr/local/bin目錄:在/ usr/local/sbin中:在/ usr/bin中:/ usr/sbin目錄中:/ opt/CUDA /斌:/home/rishabh/.local/bin:/家庭/ 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) 

輸出 -

真 - 視頻閱讀成功

假 - OpenCV的尚未與ffmpeg的正確編譯。