1. cmake在Qt編譯opencv總是出錯,已經弄了一周了,求助大神
是你的編譯器版本不對, You probably need to select a different build tool.
在點擊configure時,會出來一個選擇編譯器的框,你選一個你機器里有的編譯器就可以了。
2. 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目錄下,其他或者拷貝到自己指定的目錄,並設置好環境變數即可使用
3. 如何在Qt中使用OpenCV
用Qt可以方便地創造好看的GUI,要是能和OpenCV結合起來我們就能寫出蠻好的一個處理或者管理圖片的軟體。怎麼在Qt中使用OpenCV呢?請看下文:
註:我的Qt版本4.7.4(C:\QtSDK\Desktop\Qt\4.7.4),OpenCV版本2.3.1(E:\opencv),Qt下有MinGW編譯器(C:\QtSDK\mingw)
具體步驟:
Step1>
CMake OpenCV,使用CMake)生成OpenCV庫的makefile文件,需要注意的是解壓出來的OpenCV存儲路徑中的文件夾不要帶有空格或者中文(我的是E:\OpenCV,不要用類似於E:\工程\opencv, E:\Open CV這種),打開CMake,指定源碼位置(就是OpenCV解壓出來的地方)和存放生成文件的地方,Configure彈出如圖對話框,選擇MinGW Makefiles和Specify native compilers
跳出對話框用以指定C++和C的編譯器路徑,C用gcc.exe,在QtSDK目錄下的mingw/bin子目錄中,C++用g++.exe:
然後再次Configure,無錯誤後選中WITH_QT
再次Configure會出現下圖信息提示找不到Qt的Qmake可執行文件
手動指定Qmake.exe所在目錄(在.\QtSDK\Desktop\Qt\4.7.4\mingw\bin下面):
再次Configure,無錯誤後 Generate。
Step2>
編譯
1> Cmd命令 轉到Generate到的目錄(我的是如上圖所示的E:\opencv\MinGW)
>> cd E:\opencv\MinGW
2> Cmd命令 編譯文件
>> mingw32-make
3> Cmd命令 編譯INSTALL
>> mingw32-make install
過程如圖:
Step3>
在存放Generate生成的目錄下有一個install目錄,編譯好的所有結果都在這里啦,包括bin,lib和include,把bin目錄放到環境變數path中,其實可以把整個install目錄拷貝到某個地方使用,這樣就可以把opencv目錄裡面的內容全刪了,省的占空間。我就把install裡面的內容全都搬到了E盤下的OpenCVforQt目錄下了(0.0)。
Example:
在用QtCreator和OpenCV的時候,修改用到opencv的工程的.pro文件就可以了,添加include和lib,例如:
QT += core gui
TARGET = Win_OpenCV_Test
TEMPLATE = app
INCLUDEPATH += E:\OpenCVforQt\include
INCLUDEPATH += E:\OpenCVforQt\include\opencv
INCLUDEPATH += E:\OpenCVforQt\include\opencv2
LIBS += E:\OpenCVforQt\lib\libopencv_core231.dll.a
LIBS += E:\OpenCVforQt\lib\libopencv_highgui231.dll.a
LIBS += E:\OpenCVforQt\lib\libopencv_imgproc231.dll.a
SOURCES += main.cpp
4. 如何在qt中使用opencv,還請過來人指教
Step1>
CMake OpenCV,使用CMake生成OpenCV庫的makefile文件,需要注意的是解壓出來的OpenCV存儲路徑中的文件夾不要帶有空格或者中文(我的是E:\OpenCV,不
要用類似於E:\工程\opencv, E:\Open
CV這種),打開CMake,指定源碼位置(就是OpenCV解壓出來的地方)和存放生成文件的地方,Configure彈出如圖對話框,選擇MinGW Makefiles和Specify native compilers
跳出對話框用以指定C++和C的編譯器路徑,C用gcc.exe,在QtSDK目錄下的mingw/bin子目錄中,C++用g++.exe:
然後再次Configure,無錯誤後選中WITH_QT
再次Configure會出現下圖信息提示找不到Qt的Qmake可執行文件
手動指定Qmake.exe所在目錄(在.\QtSDK\Desktop\Qt\4.7.4\mingw\bin下面):
再次Configure,無錯誤後 Generate。
Step2>
編譯
1> Cmd命令 轉到Generate到的目錄(我的是如上圖所示的E:\opencv\MinGW)
>> cd E:\opencv\MinGW
2> Cmd命令 編譯文件
>> mingw32-make
3> Cmd命令 編譯INSTALL
>> mingw32-make install
過程如圖:
Step3>
在存放Generate生成的目錄下有一個install目錄,
編譯好的所有結果都在這里啦,包括bin,lib和include,把bin目錄放到環境變數path中,其實可以把整個install目錄拷貝到某個地
方使用,這樣就可以把opencv目錄裡面的內容全刪了,省的占空間。我就把install裡面的內容全都搬到了E盤下的OpenCVforQt目錄下了
(0.0)。
Example:
在用QtCreator和OpenCV的時候,修改用到opencv的工程的.pro文件就可以了,添加include和lib,例如:
QT += core gui
TARGET = Win_OpenCV_Test
TEMPLATE = app
INCLUDEPATH += E:\OpenCVforQt\include
INCLUDEPATH += E:\OpenCVforQt\include\opencv
INCLUDEPATH += E:\OpenCVforQt\include\opencv2
LIBS += E:\OpenCVforQt\lib\libopencv_core231.dll.a
LIBS += E:\OpenCVforQt\lib\libopencv_highgui231.dll.a
LIBS += E:\OpenCVforQt\lib\libopencv_imgproc231.dll.a
SOURCES += main.cpp
一個例子:
Code Snippet
#include <QtGui/QApplication>
#include <QtGui/QMessageBox>
#include <cv.h>
#include <highgui.h>
using namespace cv;
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
Mat giraffe = imread("f:/giraffe.jpg");
if(giraffe.empty())
{
QMessageBox::warning(0, "Warn", "Empty image!", QMessageBox::Ok);
}
else
{
imshow("giraffe [press any key to exit]", giraffe);
waitKey();
}
return 0;
}
5. 以下是QT中編譯opencv程序所出現的warning,LINUX下的,請問如何解決,對於動態庫的鏈接問題不是很懂。。
可以在自己的目錄下.bashrc文件里,定義1:export LD_LIBRARY_PATH= 你的opencv lib庫的路徑
或在etc/profile文件里定義export CPATH=$CPATH:opencv include的路徑。export LIBRARY_PATH = $LIBRARY_PATH:你的opencv lib 路徑。
6. linux下qt配置的opencv出現libopencv_calib3d.so: file not recognized: File format not recognized
這樣的,我也碰到了這個問題,要不你打開這個QT中的Makefile文件,看下交叉編譯器還有路徑本身就是你在 qt IDE中設置的那樣,可能交叉編譯器都是gcc。PS:我改了Makefile文件但是還是有問題,但是我相信問題就是在這
7. Qt的交叉編譯問題
修改QtCreator的配置。
tools-->Options--->Build && Run --->Qt Versions
把你的開發板的編譯工具鏈扔進去。再到你發的那個圖里設置。
8. Ubuntu + Qtcreator + Opencv
你的opencv2的庫文件是下載的源代碼交叉編譯生成的嗎?直接用apt-get install安裝的可不能用作交叉編譯哦。
可以用objmp命令確認下是不是arm架構的。如果確認是,編譯的時候-L那個目錄
9. 在ARM上運行交叉編譯後的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目錄下,其他或者拷貝到自己指定的目錄,並設置好環境變數即可使用