OpenCV開發環境配置-Windows/MinGW/Clion/CMake


臨時更換成了TDM-GCC,和mingw類似,這里只是聲明一下。

 

由於opencv下載下來的.exe安裝包實際上是沒有mingw(gcc)匹配的/動靜態庫,因此這些東西需要我們自己使用mingw編譯。

首先是cmake配置,直接在source目錄命令行下執行 cmake . 即可(注意后邊有空格和代表當前目錄的點號)

一般來說應該可以了,然后就是使用mingw32-make命令完成編譯(過程較長),最后是使用mingw32-make install 生成需要的文件(頭文件/動/靜態庫)

C:.
├─include
│  ├─opencv
│  └─opencv2
│      ├─calib3d
│      ├─contrib
│      ├─core
│      ├─features2d
│      ├─flann
│      ├─gpu
│      │  └─device
│      │      └─detail
│      ├─highgui
│      ├─imgproc
│      ├─legacy
│      ├─ml
│      ├─nonfree
│      ├─objdetect
│      ├─ocl
│      ├─photo
│      ├─stitching
│      │  └─detail
│      ├─superres
│      ├─ts
│      ├─video
│      └─videostab
└─x86
    └─mingw
        ├─bin
        └─lib

 

將bin加入系統path變量中。

2016.1.11更新,由於之前沒有發現這個問題,現在在編譯2.4.11版本的時候,我是用的是最新的支持gcc5.1.0的tdm gcc,在編譯highgui模塊的時候突然產生了這個問題,原始錯誤輸出如下:

C:\opencv\sources\modules\highgui\src\window_w32.cpp: In function 'int icvCreateTrackbar(const char*, const char*, int*, int, CvTrackbarCallback, CvTrackbarCallback2, void*)':
C:\opencv\sources\modules\highgui\src\window_w32.cpp:1853:81: error: 'BTNS_AUTOSIZE' was not declared in this scope
                                         WS_CHILD | CCS_TOP | TBSTYLE_WRAPABLE | BTNS_AUTOSIZE | BTNS_BUTTON,
                                                                                 ^
C:\opencv\sources\modules\highgui\src\window_w32.cpp:1853:97: error: 'BTNS_BUTTON' was not declared in this scope
                                         WS_CHILD | CCS_TOP | TBSTYLE_WRAPABLE | BTNS_AUTOSIZE | BTNS_BUTTON,
                                                                                                 ^
modules\highgui\CMakeFiles\opencv_highgui.dir\build.make:187: recipe for target 'modules/highgui/CMakeFiles/opencv_highgui.dir/src/window_w32.cpp.obj' failed
mingw32-make[2]: *** [modules/highgui/CMakeFiles/opencv_highgui.dir/src/window_w32.cpp.obj] Error 1
CMakeFiles\Makefile2:2198: recipe for target 'modules/highgui/CMakeFiles/opencv_highgui.dir/all' failed
mingw32-make[1]: *** [modules/highgui/CMakeFiles/opencv_highgui.dir/all] Error 2
Makefile:159: recipe for target 'all' failed
mingw32-make: *** [all] Error 2

 

主要就是有幾個變量沒有找到,后來在一個opencv的issues里找到了解答,大概意思就是在mingw的頭文件commctrl.h中,對於上面的變量宏的定義實際上是由_WIN32_IE是否定義來決定的,然而我們找到這個頭文件的時候,他的寫法是這樣:

#include <prsht.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifndef _WIN32_IE
/* define _WIN32_IE if you really want it */
#if 0
#define _WIN32_IE    0x0300
#endif
#endif

看提示我們也知道,默認根本就不可能找到_WIN32_IE這個變量(后來查了一下,這個變量應該是規定所謂的windows的ie瀏覽器版本的變量,不知道怎么和opencv扯上了關系),所以上面那個issues的建議是改成:

#include <prsht.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifndef _WIN32_IE
/* define _WIN32_IE if you really want it */
#if 1
#define _WIN32_IE    0x0500
#endif
#endif

那個0x0500也是我照改的,改完之后我確實能編譯通過了,不知道保持原樣會怎么樣,不過我覺得既然IE版本跟opencv的win32gui沒什么太大的關系,那應該是隨便,只要定義一個就好。總而言之,這個問題暫時算是解決了。另外,由於我下個學期重選了數字圖像處理這門課,我會在學習matlab的同時做opencv的基礎學習的,到時候可能就會重新考量opencv這個庫了,暫時先看2版本的,等熟悉了一點之后再轉用3版本的。

 

然后是clion的cmakelist.txt編寫如下,這是使用的最簡單的一些庫,稍后也可以自己加入。

cmake_minimum_required(VERSION 3.2)
project(opencv)

set(CMAKE_CXX_FLAGS "-std=c++11")

include_directories(C:\\\\opencv\\\\include)

set(SOURCE_FILES main.cpp)

set(TARGET_LIBS
    "C:\\\\opencv\\\\x86\\\\mingw\\\\lib\\\\libopencv_core249.dll.a"
    "C:\\\\opencv\\\\x86\\\\mingw\\\\lib\\\\libopencv_highgui249.dll.a"
    "C:\\\\opencv\\\\x86\\\\mingw\\\\lib\\\\libopencv_imgproc249.dll.a"
)

add_executable(opencv ${SOURCE_FILES})

target_link_libraries(opencv ${TARGET_LIBS})

 

然后是編寫測試代碼,

 1 #include "iostream"
 2 #include<opencv2/opencv.hpp>
 3 using namespace std;
 4 using namespace cv;
 5 
 6 int main(int argc,char *argv[]) {
 7     if(argc!=2){
 8         cout<<"with args in two"<<endl;
 9         return -2;
10     }
11     Mat img = imread(argv[1]);
12     if (img.empty()) {
13         cout << "Error" << endl;
14         return -1;
15     }
16     imshow("Lena", img);
17     waitKey();
18 
19     return 0;
20 }

 

運行參數設置為lena.png

運行一次先產生debug目錄,然后將lena.png轉移到那個目錄去就可以正確看到了:


免責聲明!

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



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