linux下編譯opencv30
去opencv的linux安裝版本,linux版本的opencv不同於windows版本的,裡面沒有已經編譯好的各類庫文件,需要使用cmake進行編譯才能使用。在opencv的目錄下執行cmake config對編譯過程進行配置,然後執行cmake install 對opencv進行編譯安裝
㈡ 如何在Linux下編譯安裝OpenCV
下載opencv的linux安裝版,使用cmake工具編譯安裝,按照opencv的安裝文檔,一般是先執行cmake config,然後執行cmake install。
㈢ linux 下 opencv程序怎麼編譯
運行了樓上給的命令之後,結果是這樣的:
# g++ `pkg-config opencv --libs --cflags opencv` facedect.cpp -o facedect -static
/tmp/cc8XhRf6.o: In function `find_face(_IplImage*)':
facedect.cpp:(.text+0x51): undefined reference to `cvCreateImage'
facedect.cpp:(.text+0xc0): undefined reference to `cvCreateImage'
facedect.cpp:(.text+0xdd): undefined reference to `cvCvtColor'
facedect.cpp:(.text+0xf7): undefined reference to `cvResize'
facedect.cpp:(.text+0x109): undefined reference to `cvEqualizeHist'
facedect.cpp:(.text+0x116): undefined reference to `cvClearMemStorage'
facedect.cpp:(.text+0x188): undefined reference to `cvHaarDetectObjects'
facedect.cpp:(.text+0x1c6): undefined reference to `cvReleaseImage'
facedect.cpp:(.text+0x1d1): undefined reference to `cvReleaseImage'
/tmp/cc8XhRf6.o: In function `isperson(char const*)':
facedect.cpp:(.text+0x21e): undefined reference to `cvLoad'
facedect.cpp:(.text+0x22f): undefined reference to `cvCreateMemStorage'
facedect.cpp:(.text+0x25a): undefined reference to `cvLoadImage'
facedect.cpp:(.text+0x27d): undefined reference to `cvReleaseImage'
facedect.cpp:(.text+0x289): undefined reference to `cvDestroyWindow'
collect2: ld returned 1 exit status
㈣ 如何在linux下安裝opencv
一、安裝關聯庫
1
安裝編譯工具:
sudo apt-get install build-essential
編譯程序有了這個軟體,它才知道頭文件和庫函數在哪,最後才形成一個開發環境。
2
安裝 cmake、git、pkg-config等輔助工具:
sudo apt-get install cmake git pkg-config libgtk2.0-dev libavcodec-dev libavformat-dev libswscale-dev
3
安裝關聯庫:
sudo
apt-get install python-dev python-opencv python-numpy libtbb2
libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev
libdc1394-22-dev
END
二、編譯OpenCV
1
從網上下載OpenCV-3.0.0.zip。
下載地址:
http://opencv.org/downloads.html
2
如果使用虛擬機,最好將OpenCV-3.0.0.zip移動到用戶主目錄下進行編譯,一定不能在虛擬機在Windows系統里的共享文件夾下進行編譯,否則會因為文件系統(Windows7的文件系統是NTFS,ubuntu-15.10的文件系統是)不同在編譯過程中出錯。鄙人在共享文件夾下進行編譯,編譯進行到%15時報錯,我修復後又在編譯進行到%21時報錯,反正是各種錯誤,我是沒有能力繼續修復了......
3
最好將OpenCV-3.0.0.zip移動到用戶主目錄下進行編譯:
mv [OpenCV-3.0.0.zip存放路徑] ~/opencv_3.0.0.zip
unzip opencv_3.0.0.zip
cd opencv-3.0.0
mkdir release
cd release
4
CMake是一個跨平台的編譯工具,想深入學習cmake命令的可以網路一下。
編譯命令:
cmake
-D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D
WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D WITH_QT=ON
-D WITH_OPENGL=ON ..
5
make命令(-j表示用幾個線程來編譯,這樣可以加快編譯速度,不過這個與makefile的質量有關,有的工程用了-j會編譯出錯):
make -j $(nproc)
上述命令後一般大約要耗時1個小時,甚至更多,視個人電腦硬體配置而定。
執行完以後不要忘了make install:
sudo make install
6
如果編譯過程出錯後想要重新編譯,把release目錄下的CMakeCache.txt刪除掉即可。
END
三、設置環境變數
1
添加庫路徑:
sudo /bin/bash -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'
2
更新系統庫:
sudo ldconfig
END
四、用cmake進行測試
1
DisplayImage.cpp中的源代碼:
#include <stdio.h>
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char** argv)
{
if ( argc != 2 )
{
printf("[usage]: %s <Image_Path>\n", argv[0]);
return -1;
}
Mat image;
image = imread( argv[1], 1 );
if ( !image.data )
{
printf("No image data!\n");
return -1;
}
namedWindow("Display Image", WINDOW_AUTOSIZE );
imshow("Display Image", image);
waitKey(0);
return 0;
}
2
CMakeLists.txt中的源代碼:
cmake_minimum_required(VERSION 2.8)
project( DisplayImage )
find_package( OpenCV REQUIRED )
add_executable( DisplayImage DisplayImage.cpp )
target_link_libraries( DisplayImage ${OpenCV_LIBS} )
3
編譯命令:
cmake .
make
運行命令:
./DisplayImage 01.jpg
END
五、用make進行測試
opencv_test.cpp中的源代碼:
#include "cv.h"
#include "highgui.h"
#include <iostream>
using namespace std;
#define PICTURE "./01.jpg"
int main(void)
{
IplImage* img = cvLoadImage(PICTURE, 0);
cvNamedWindow( "test", 0 );
cvShowImage("test", img);
cvWaitKey(0);
cvReleaseImage( &img );
cvDestroyWindow( "test" );
return 0;
}
Makefile中的源代碼:
CXX = g++
CFLAGS = -Wall
LDFLAGS = `pkg-config --cflags --libs opencv`
SRCS = $(wildcard *.cpp)
TARGETS = $(patsubst %.cpp, %, $(SRCS))
all:$(TARGETS)
$(TARGETS):$(SRCS)
$(CXX) -o $@ $< $(LDFLAGS) $(CFLAGS)
clean:
-rm -rf $(TARGETS) *~ .*swp
.PHONY: clean all
編譯命令:
make
運行命令:
./opencv_test
代碼寫得比較簡單,所以顯示效果是一張黑白圖片。
㈤ 如何早linux 下編譯運行opencv測試程序
首先,先要再linux上安裝opencv的庫,在線安裝的話,很容易 然後,編譯的時候需要加上 `pkg-config opencv --libs --cflags opencv` 參數。
㈥ linux里opencv怎麼交叉編譯
一、交叉編譯opencv 構造: 下載:各個庫的下載可以直接搜名字到官網下載 幾個關鍵解釋: 「--prefix=」 後邊跟make install時的位置,本例中,libz在make install時將安裝到/usr/arm-linux-gnueabihf中 「--host=」 後邊跟arm-linux表明使用的是ARM環境 有configure的才能進行configure配置 4)所有的makefile修改類似 Libz的交叉編譯 第一步:# ./configure --prefix=/usr/arm-linux-gnueabihf --shared 第二步:修改makefile,主要有下邊幾個,修改的時候通篇參照即可 CC=arm-linux-gnueabihf-gcc AR=arm-linux-gnueabihf-ar rc RANLIB=arm-linux-gnueabihf-ranlib STRIP = arm-linux-gnueabihf-strip 如果有ARCH的話,ARCH=ARM 第三步:#sudo make #sudo make install Libjpeg的交叉編譯 第一步:#./configure --host=arm-linux --prefix=/usr/arm-linux-gnueabihf --enable-shared --enable-static CC=arm-linux-gnueabihf-gcc 第二步:參考1)中方法修改makefile 第三步:#sudo make #sudo make install Libpng的交叉編譯 第一步:#./configure --host=arm-linux --prefix=/usr/arm-linux-gnueabihf --enable-shared --enable-static CC=arm-linux-gnueabihf-gcc 第二步:參考1)中方法修改makefile 第三步:#sudo make #sudo make install Yasm的交叉編譯 第一步:#./configure --host=arm-linux --prefix=/usr/arm-linux-gnueabihf --enable-shared --enable-static 第二步:修改makefile 第三步:#sudo make #sudo make install Libx264的交叉編譯 第一步:#CC=arm-linux-gnueabihf-gcc ./configure --enable-shared --host=arm-linux --disable-asm --prefix=/usr/arm-linux-gnueabihf 第二步:修改config.mak里的參數,因為makefile要調用config.mak,所以修改方法同makefile 第三步:#sudo make #sudo make install Libxvid的交叉編譯 第一步:首先切換目錄 #cd build/generic 第二步:#./configure --prefix=/usr/arm-linux-gnueabihf --host=arm-linux --disable-assembly 第三步:#sudo make #sudo make install ffmpeg的交叉編譯 第一步: ./configure --enable-cross-compile --target-os=linux --cc=arm-linux-gnueabihf-gcc --arch=arm --enable-shared --disable-static --enable-gpl --enable-nonfree --enable-ffmpeg --disable-ffplay --enable-ffserver --enable-swscale --enable-pthreads --disable-yasm --disable-stripping --enable-libx264 --enable-libxvid --extra-cflags=-I/usr/arm-linux-gnueabihf/include --extra-ldflags=-L/usr/arm-linux-gnueabihf/lib --prefix=/usr/arm-linux-gnueabihf 第二步:修改makefile文件 第三步:#sudo make #sudo make install 第四步:將ffmpeg加入pkg-config 執行#sudo gedit /etc/bash.bashrc,在末尾加入 export LD_LIBRARY_PATH=/usr/arm-linux-gnueabihf/lib/ export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/arm-linux-gnueabihf /lib/pkgconfig export PKG_CONFIG_LIBDIR=$PKG_CONFIG_LIBDIR:/usr/arm-linux-gnueabihf /lib/ 完畢後使用命令:#source /etc/bash.bashrc 或者單獨使用三個export,不過壽命只在一個終端中,終端關閉時就失效。 幾個關鍵解釋:--extra-flags指向xvid的安裝路徑,--extra-ldflags指向x264的路徑 安裝cmake-gui 執行:#sudo apt-get install cmake-qt-gui Opencv的交叉編譯 第一步:修改opencv/platflrms/linux/目錄下的arm-gnueabi.toolchain.cmake,將其所有刪掉,寫入: set( CMAKE_SYSTEM_NAME Linux ) set( CMAKE_SYSTEM_PROCESSOR arm ) set( CMAKE_C_COMPILER arm-linux-gnueabihf-gcc ) set( CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++ ) 第二步:在opencv目錄下新建build目錄,進入build目錄,執行命令: #cmake -DCMAKE_TOOLCHAIN_FILE=../platforms/linux/arm-gnueabi.toolchain.cmake ../ 這時,要保證出現: 第三步:使用cmake-gui打開CMakeCache.txt,去掉所有的無關項,修改CMAKE_INSTALL_PREFIX,來確定make install的目錄 第四步:#sudo make #sudo make install 可能出現的錯誤: opencv編譯不通過,出現skip之類的,說明ffmpeg沒編譯好,或者其編譯好了,但是pkg-config沒有設置好,一定要設置好其環境 前邊幾步不通過的話,看看命令有沒有少,或者有沒有修改好makefile 在arm上使用時,一種方法時直接將編譯好的opencv目錄下的lib文件拷貝到開發板對應的/lib目錄下,其他或者拷貝到自己指定的目錄,並設置好環境變數即可使用
㈦ linux 終端 編譯 opencv 程序
你的highgui、cv庫沒找到
排查此類問題,先看看是找不到什麼庫,確定程序需要這個庫,然後去了解系統默認會去調用哪些庫,最後排查庫是不是存在還是路徑不對。
㈧ 請教高手,linux虛擬機下編譯opencv出錯
undefined reference to `gtk_widget_is_focus` 這個變數沒有定義,要麼是缺少頭文件,要麼是你寫錯了(手誤),用grep命令查找一下。如果是你自定義的變數,你就要去增加它的定義! 第二個錯誤也是這個錯誤導致的,解決了第一個就OK了。
㈨ linux怎麼編寫opencv
您好,1、檢查涉及MFC特性的代碼有多少,與linux下不兼容的API有哪些。2、能用宏定義的進行宏定義,如win32下Sleep(1000)==linux下sleep(1),處理方法如下。
#ifndef WIN32
#defin Sleep(i) sleep(i/1000)
#endif
這樣,Sleep(1000)這個WIN32下的函數在linux下也就是正常的調用。
3、數據類型盡量使用標C/C++中的,CString用sting代替,或用char []代替。