Mingw opencv Windows下命令行運行


1.下載opencv 2.3

        http://sourceforge.net/projects/opencvlibrary/files/ 下個opencv-win版本吧 至於版本號就隨意吧,我選的是2.3。  這個是那個解壓包的地址:http://ncu.dl.sourceforge.net/project/opencvlibrary/opencv-win/2.3/OpenCV-2.3.0-win-superpack.exe  https://github.com/Itseez/opencv 這個github也可以下載 。

 

2.下載Mingw  

        什么版本都可以http://heanet.dl.sourceforge.net/project/mingw/OldFiles/MinGW-5.0.2.exe  我是使用codeblocks 里面的MinGW來使用的。

 

3.移植opencv到MinGW中

mingw-env.bat里面大概就是這樣的,那個F:\MinGW\vim7.4是一個編輯器來的。如果沒有可以不寫。

@set PATH=F:\MinGW\bin;F:\MinGW\vim7.4;
cmd


我把openCV2.3解壓到C盤根目錄下,把C:\OpenCV2.3\opencv\include\opencv 里面的頭文件復制到..\mingw\include中

opencv\include\opencv 
2011
/02/10 05:41 3,413 cv.h 2011/02/10 05:41 2,411 cv.hpp 2011/02/10 05:41 2,850 cvaux.h 2011/02/10 05:41 2,346 cvaux.hpp 2011/02/10 05:41 2,192 cvwimage.h 2011/02/10 05:41 2,518 cxcore.h 2011/02/10 05:41 2,423 cxcore.hpp 2011/02/10 05:41 2,266 cxeigen.hpp 2011/02/10 05:41 110 cxmisc.h 2011/02/10 05:41 2,306 highgui.h 2011/02/10 05:41 2,189 ml.h

還有C:\OpenCV2.3\build\include\opencv2目錄下所有的文件夾都復制到..\mingw\include 中

build\include\opencv2
2011/07/04  10:51    <DIR>          .
2011/07/04  10:51    <DIR>          ..
2011/07/04  10:51    <DIR>          calib3d
2011/07/04  10:51    <DIR>          contrib
2011/07/04  10:51    <DIR>          core
2011/07/04  10:51    <DIR>          features2d
2011/07/04  10:51    <DIR>          flann
2011/07/04  10:51    <DIR>          gpu
2011/07/04  10:51    <DIR>          highgui
2011/07/04  10:51    <DIR>          imgproc
2011/07/04  10:51    <DIR>          legacy
2011/07/04  10:51    <DIR>          ml
2011/07/04  10:51    <DIR>          objdetect
2011/02/10  05:41             2,760 opencv.hpp
2011/07/04  10:51    <DIR>          ts
2011/07/04  10:51    <DIR>          video
               1 個文件          2,760 字節
              15 個目錄 17,730,686,976 可用字節

注意此時的opencv2這個目錄是要有的。 目錄是這樣的 ..\mingw\include\opencv2 。

4.將鏈接庫*.a移到mingw下

根據不同的平台選擇 移到..\mingw\lib

C:\OpenCV2.3\build\x86\mingw\lib                                    ..
2011/07/04  10:48           232,344 libopencv_calib3d230.dll.a
2011/07/04  10:48           222,936 libopencv_contrib230.dll.a
2011/07/04  10:49           473,304 libopencv_core230.dll.a
2011/07/04  10:49           485,612 libopencv_features2d230.dll.a
2011/07/04  10:49            23,432 libopencv_flann230.dll.a
2011/07/04  10:49           308,064 libopencv_gpu230.dll.a
2011/07/04  10:49           163,976 libopencv_highgui230.dll.a
2011/07/04  10:49           303,748 libopencv_imgproc230.dll.a
2011/07/04  10:49           326,004 libopencv_legacy230.dll.a
2011/07/04  10:49           289,692 libopencv_ml230.dll.a
2011/07/04  10:49           247,748 libopencv_objdetect230.dll.a
2011/07/04  10:49           169,956 libopencv_video230.dll.a

注意如果是Window平台的話還要將bin下的移到 ..\mingw\bin 下

C:\OpenCV2.3\build\x86\mingw\bin
2011/07/04  10:48           678,400 libopencv_calib3d230.dll
2011/07/04  10:48           279,040 libopencv_contrib230.dll
2011/07/04  10:48         1,755,648 libopencv_core230.dll
2011/07/04  10:48           913,408 libopencv_features2d230.dll
2011/07/04  10:48            22,016 libopencv_flann230.dll
2011/07/04  10:48           463,360 libopencv_gpu230.dll
2011/07/04  10:48         1,206,784 libopencv_highgui230.dll
2011/07/04  10:48         1,574,912 libopencv_imgproc230.dll
2011/07/04  10:48         1,157,120 libopencv_legacy230.dll
2011/07/04  10:48           490,496 libopencv_ml230.dll
2011/07/04  10:48           433,664 libopencv_objdetect230.dll
2011/07/04  10:48           296,960 libopencv_video230.dll

為什么要這樣,學了linux和Windows動態靜態鏈接庫就知道了。
到這里就基本完成了配置了。

下面是一個簡單的基於opencv的小程序

 1 #include "cv.h"
 2 #include "highgui.h"
 3 #include <iostream>
 4 
 5 using namespace std;
 6 using namespace cv;
 7 
 8 int main( int argc, char** argv )
 9 {
10     IplImage* pImg; //聲明IplImage指針
11     int a;
12     //載入圖像
13     if( argc == 2 && (pImg = cvLoadImage( argv[1], 1)) != 0 )
14     {
15         cvNamedWindow( "Image", 1 );//創建窗口
16         cvShowImage( "Image", pImg );//顯示圖像
17         cvWaitKey(0); //等待按鍵
18 
19         cvDestroyWindow( "Image" );//銷毀窗口
20         cvReleaseImage( &pImg ); //釋放圖像
21         return 0;
22     }
23     return -1;
24 }

保存為main.cpp文件 建立一個Makefile文件
如果你環境配的不准確的話可以通過-I 加頭文件目錄 -L 加靜態鏈接庫

main:
    g++ -I C:\OpenCV2.3\opencv\include\opencv -I C:\OpenCV2.3\build\include -L C:\OpenCV2.3\build\x86\mingw\bin main.cpp -lopencv_calib3d230 -lopencv_contrib230 -lopencv_core230 -lopencv_features2d230 -lopencv_flann230 -lopencv_gpu230 -lopencv_highgui230 -lopencv_imgproc230 -lopencv_legacy230 -lopencv_ml230 -lopencv_objdetect230 -lopencv_video230 -o main.exe 

標准版

main:
    g++  main.cpp -lopencv_calib3d230 -lopencv_contrib230 -lopencv_core230 -lopencv_features2d230 -lopencv_flann230 -lopencv_gpu230 -lopencv_highgui230 -lopencv_imgproc230 -lopencv_legacy230 -lopencv_ml230 -lopencv_objdetect230 -lopencv_video230 -o main.exe 

我自己測試的時候那個 -L參數還是要的。具體應該是Window下gcc對鏈接庫的映射吧,就是吧*.dll --> *.a 的原因吧。

然后make就能編譯了。
這樣就完成了嗎?能編譯不代表能執行。

我就出現幾個錯誤

(1). make錯誤 可能是make的版本太低或是x64和x86的區別吧。
(2). libiconv-2.dll libintl-8.dll 文件未找到。 不用問直接下載,前面的幾個網站有單個文件下載的。
(3). 最關鍵的錯誤: 無法定位程序輸入點 _XXXXXXXXX 於動態鏈接庫libstdc++-6.dll上。這個是由於編譯opencv時用的C++版本和當前mingw用的C++版本不一樣的錯誤。具體opencv的版本要看OpenCV2.3\readme.txt文件,里面有這一句"32-bit DLLs have been built using official MinGW 4.5.2" 表示要用4.5.2的版本。難道我們要下載個4.5.2一樣的版本。其實也不用只要到sourceforge.net上的mingw中下個對應版本的libstdc++-6.dll文件,然后替換mingw\bin\libstdc++-6.dll

 5. 感想,不知道怎么說呢,我就是對這種在命令行下編譯比較感興趣。

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM