在Ubuntu系統中配置opencv2.4.10
Ubuntu版本:Ubuntu 10.04.1 LTS
Opencv版本:opencv-2.4.10
Opencv官網:opencv.org
一、必要準備
1、從opencv.org下載你需要的opencv版本(本文下載的是2.4.10版本);
2、將其解壓並通過vmware tools拷貝至ubuntu系統的myworkspace目錄(根據各自喜好設定目錄);
3、安裝依賴包:
需要安裝如下的依賴包:
· GCC4.4.x or later
· CMake2.8.9 or higher
· Git
· GTK+2.xor higher, including headers (libgtk2.0-dev)
· pkg-config
· Python2.6 or later and Numpy 1.5 or later with developer packages (python-dev,python-numpy)
· ffmpegor libav development packages: libavcodec-dev, libavformat-dev, libswscale-dev
· [optional]libtbb2 libtbb-dev
· [optional]libdc1394 2.x
· [optional]libjpeg-dev, libpng-dev, libtiff-dev, libjasper-dev, libdc1394-22-dev
推薦cmake安裝高版本
Cmake高版本安裝方法:
#apt-get autoremove cmake #解除安裝之前的cmake(如果有安裝)
到cmake官網下載cmake原始碼
解壓
將解壓後的檔案拷貝至/usr/
# ln -s /usr/cmake-3.3.2/bin/* /usr/bin/
# cmake –version
cmake version 3.3.2
二、編譯opencv
1、 編譯opencv
(1)
myworkspace# cd opencv-2.4.10
myworkspace# mkdir release #不知為何要建立這個,本文編譯完後release裡面並沒任何東西
myworkspace# cd release
myworkspace# sudo cmake -DCMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local myworkspace/opencv-2.4.10
myworkspace# cd ../ #參考提供的是在release目錄下make,但是release目錄下並沒有makefile,故退回上級目錄
myworkspace# make
myworkspace# sudo make install
(2) 編譯會遇到的問題及解決方案
①
opencv-2.4.10/modules/core/src/system.cpp: In function '(staticinitializers for myworkspace/opencv-2.4.10/modules/core/src/system.cpp)': myworkspace/opencv-2.4.10/modules/core/src/system.cpp:280:10: error: inconsistent operandconstraints in an 'asm' make[3]: ***[modules/core/CMakeFiles/opencv_core.dir/src/system.cpp.o] Error 1
解決方案:
在modules/core/src/system.cpp檔案中
地278行新增"movl %%ebx,%1\n\t"
將第280行的:"=a"(cpuid_data[0]), "=b"(cpuid_data[1]),"=c"(cpuid_data[2]), "=d"(cpuid_data[3])
替換為:"=a"(cpuid_data[0]),"=r"(cpuid_data[1]), "=c"(cpuid_data[2]),"=d"(cpuid_data[3])
@@ -267,14 +267,17 @@ struct HWFeatures |
: "cc" |
); |
#else |
+ // We need to preserve ebx since we are compiling PIC code. |
+ // This means we cannot use "=b" for the 2nd output register. |
asmvolatile |
( |
"pushl %%ebx\n\t" |
"movl $7,%%eax\n\t" |
"movl $0,%%ecx\n\t" |
"cpuid\n\t" |
+ "movl %%ebx,%1\n\t" |
"popl %%ebx\n\t" |
- : "=a"(cpuid_data[0]), "=b"(cpuid_data[1]), "=c"(cpuid_data[2]), "=d"(cpuid_data[3]) |
+ : "=a"(cpuid_data[0]), "=r"(cpuid_data[1]), "=c"(cpuid_data[2]), "=d"(cpuid_data[3]) |
: |
: "cc" |
); |
參考自:
②
提示modules/highgui/src/ffmpeg_codecs.hpp或cap_ffmpeg_impl.hpp錯誤
解決方案:
這需要安裝ffmpeg。從網上下載ffmpeg原始碼,解壓到相應的目錄
#cd ffmpeg
# ./configure --enable-shared
這時可能會提示yasm nasm版本過舊
#sudo apt-get install yasm nasm #用這個命令解決
#make
#sudo make install
或者最直接的解決辦法:在cmake中新增引數-D WITH_FFMPEG=OFF
即
sudo cmake -D CMAKE_BUILD_TYPE=RELEASE -D WITH_FFMPEG=OFF CMAKE_INSTALL_PREFIX=/usr/local myworkspace/opencv-2.4.10
參考自:
在編譯opencv 3.0 gold時,編譯到大約37%時,出現
../../lib/libopencv_core.so.3.0.0:undefined reference to `parallel_pthreads_set_threads_num(int)'
../../lib/libopencv_core.so.3.0.0: undefined reference to`parallel_pthreads_get_threads_num()'
../../lib/libopencv_core.so.3.0.0: undefined reference to`parallel_for_pthreads(cv::Range const&, cv::ParallelLoopBody const&,double)'等好幾個錯誤,困擾了好久,經多次嘗試和不懈的堅持下,終於在github上找到了解決方法,現分享如下:
修改modules/core/src/parallel.cpp,新增7處刪除5處(+表示要新增,-表示要刪除)
132 namespace cv
133 {
134 ParallelLoopBody::~ParallelLoopBody() {}
135 +#if defined HAVE_PTHREADS&& HAVE_PTHREADS
136 + voidparallel_for_pthreads(const cv::Range& range, constcv::ParallelLoopBody& body, double nstripes);
137 + size_tparallel_pthreads_get_threads_num();
138 + voidparallel_pthreads_set_threads_num(int num);
139 +#endif
140 }
141
142 +
143 namespace
144 {
145 #ifdef CV_PARALLEL_FRAMEWORK
.
.
.
307 }
308
309 #elif definedHAVE_PTHREADS
- voidparallel_for_pthreads(const Range& range, const ParallelLoopBody& body,double nstripes);
310 +
311 parallel_for_pthreads(range,body, nstripes);
312
313 #else
.
.
.
367
368 #elif definedHAVE_PTHREADS
369
- size_tparallel_pthreads_get_threads_num();
-
370 returnparallel_pthreads_get_threads_num();
371
372 #else
.
.
.
428
429 #elif definedHAVE_PTHREADS
430
- voidparallel_pthreads_set_threads_num(int num);
-
431 parallel_pthreads_set_threads_num(threads);
432
433 #endif
2、配置opencv引數
在/etc/ld.so.conf.d/opencv.conf檔案中加入一行:/usr/local/lib
如果沒有opencv.conf這個檔案,那就自己建立一個:
sudo vim /etc/ld.so.conf.d/opencv.conf
# sudo ldconfig
# sudo vim /etc/bash.bashrc
在檔案最後加入:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
三、測試opencv
#cp –R myworkspace/opencv-2.4.10/samples/c myworkspace
#cd myworkspace/c
# chmod +x build_all.sh
#./build_all.sh
# ./facedetect--cascade="/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml"--scale=1.5 lena.jpg
結果: