在Windows 7上开始使用OpenCV 2.4和MinGW
如何安装OpenCV 2.4并使用MinGW编译我的代码?
1.安装OpenCV 2.4.3
首先,从sourceforge.net获取OpenCV 2.4.3 。 它是一个自解压文件,所以只需双击文件即可开始安装。 把它安装在一个目录中,比如C:\
。
等到所有的文件被提取。 它将创build一个包含OpenCV头文件,库,代码示例等的新目录C:\opencv
。
现在您需要将C:\opencv\build\x86\mingw\bin
目录添加到您的系统PATH中。 该目录包含运行代码所需的OpenCV DLL。
打开控制面板 → 系统 → 高级系统设置 → 高级选项卡 → 环境variables…
你会看到如下所示的窗口:
在系统variables部分,
selectPath (1),点击Edit … (2),添加C:\opencv\build\x86\mingw\bin
(3),然后点击Ok 。
这将在您的计算机上完成OpenCV 2.4.3的安装。
2.安装MinGW编译器套件
我强烈build议你使用gcc(GNU编译器集合)编译你的代码。 gcc是Linux系统中广泛使用的编译器套件,MinGW是Windows的本地端口。
从Sourceforge.net下载MinGW安装程序并双击开始安装。 只需按照向导,select要安装的目录,说C:\MinGW
。
select“C编译器”和“C ++编译器”进行安装。
安装程序将从互联网下载一些软件包,所以你必须等待一段时间。 安装完成后,使用上述步骤将C:\MinGW\bin
添加到您的系统path。
要testingMinGW安装是否成功,请打开一个命令行框并键入: gcc
。 如果一切正常,将显示此消息:
gcc: fatal error: no input files compilation terminated
这就完成了MinGW的安装,现在是编写“Hello,World!”的时候了。 程序。
写一个示例代码
打开你的文本编辑器,并input下面的代码,并将文件保存到loadimg.cpp
。
#include "opencv2/highgui/highgui.hpp" #include <iostream> using namespace cv; using namespace std; int main(int argc, char** argv) { Mat im = imread(argc == 2 ? argv[1] : "lena.jpg", 1); if (im.empty()) { cout << "Cannot open image!" << endl; return -1; } imshow("image", im); waitKey(0); return 0; }
把lena.jpg
或任何你喜欢的图片放在同一个目录下面的文件中。 打开一个命令行框并通过input以下代码来编译上面的代码:
g++ -I"C:\opencv\build\include" -L"C:\opencv\build\x86\mingw\lib" loadimg.cpp -lopencv_core243 -lopencv_highgui243 -o loadimg
如果编译成功,它将创build一个名为loadimg.exe
的可执行文件。
types:
loadimg
执行程序。 结果:
4.去哪里?
现在你的OpenCV环境已经准备好了,下一步呢?
- 转到示例目录→
C:\opencv\samples\cpp
。 - 阅读并编译一些代码。
- 写你自己的代码。
@bsdnoobz答案中的说明确实有帮助,但没有得到OpenCV在我的系统上工作。
显然我需要自己编译这个库才能使它工作,而不是依靠预先构build的二进制文件(这会导致我的程序崩溃,可能是由于与我的系统不兼容)。
我确实得到它的工作,并编写了一个全面的指南, 编译和安装OpenCV,并configurationNetbeans使用它。
为了完整性,它也在下面提供。
当我第一次使用OpenCV时,遇到了两个主要困难:
- 让我的程序不要立即崩溃。
- 让Netbeans玩的很好,尤其是让debugging器工作。
我读了很多教程和“how-to”的文章,但没有一篇是真正全面和彻底的。 最终我成功地build立了环境。 经过一段时间,使用这个(伟大的)图书馆,我决定写这个小教程,希望可以帮助别人。
这是本教程的三个部分:
- 编译和安装OpenCV。
- configurationNetbeans。
- 一个示例程序。
我使用的环境是 :Windows 7,OpenCV 2.4.0,Netbeans 7和MinGW 3.20(带有编译器gcc 4.6.2)。
假设 :您的系统上已经安装了MinGW和Netbeans。
编译和安装OpenCV
当下载OpenCV时,存档实际上已经在'build'文件夹中包含了预先编译的二进制文件(编译过的库和DLL)。 起初,我尝试使用这些二进制文件,假设有人已经完成了编译我的工作。 这没有用。
最后我想我必须在自己的系统上编译整个库才能正常工作。
幸运的是,由于CMake,编译过程相当简单。 CMake(代表跨平台制作)是一种生成特定于您的编译器和平台的makefile的工具。 我们将使用CMake来configuration我们的构build和编译设置,生成一个“makefile”,然后编译这个库。
步骤是:
- 下载CMake并安装它(在安装向导中select将CMake添加到系统PATH)。
- 下载OpenCV的“发布”版本。
- 将存档解压缩到您select的目录。 我将使用
c:/opencv/
。 - 启动CMake GUI。
- 浏览源目录
c:/opencv/
。 - select构build二进制文件的位置。 我select了
c:/opencv/release
。 - 点击“configuration”。 在打开的屏幕上根据您的编译器select生成器。 在我们的例子中是“MinGW Makefiles”。
- 等待一切加载,之后你会看到这个屏幕:
- 如果需要更改设置,或保留默认设置。 完成后,再次按“configuration”。 您应该在日志窗口中看到“configuration完成”,红色背景将从所有单元中消失。
- 在这一点上,CMake已经准备好生成makefile,我们将用它编译OpenCV。 点击“生成”并等待生成生成文件。 当这个过程结束时,你应该看到“生成完成”。 从这一点我们将不再需要CMake。
- 浏览源目录
- 打开MinGW shell(以下步骤也可以从Windows的命令提示符下完成)。
- 进入目录
c:/opencv/release/
。 - 键入
mingw32-make
并按回车。 这应该开始编译过程。 - 编译完成后,OpenCV的二进制文件就可以使用了。
- 为了方便起见, 我们应该把目录
C:/opencv/release/bin
到系统PATH中 。 这将确保我们的程序可以find所需的DLL运行。
- 进入目录
configurationNetbeans
应该告诉Netbeans在哪里可以find头文件和编译的库(在前一节中已经创build)。
头文件需要两个原因:编译和代码完成。 链接阶段需要编译的库。
注:为了使debugging工作,OpenCV DLL应该是可用的,这就是为什么我们将包含它们的目录添加到系统path(上一节,步骤5.4)。
首先,你应该确认Netbeansconfiguration正确,以使用MinGW。 请参阅下面的屏幕截图,并validation您的设置是否正确(考虑根据您自己的安装path更改)。 还要注意 make
命令应该是msys而不是 Cygwin。
接下来,对于您在Netbeans中创build的每个新项目,您应该定义includepath(包含头文件的目录),库path以及您打算使用的特定库。 在“项目”窗格中右键单击项目名称,然后select“属性”。 添加包含path(根据您自己的安装修改path):
添加库path:
添加您打算使用的特定库。 这些库将在链接阶段dynamic链接到您的程序。 通常,根据程序的特定需求,您将需要core
库和其他库。
就是这样,你现在已经准备好使用OpenCV!
概要
以下是安装OpenCV并将其与Netbeans结合使用所需完成的一般步骤:
- 用你的编译器编译OpenCV。
- 将包含DLL的目录添加到系统PATH(在我们的例子中是c:/ opencv / release / bin)。
- 将包含头文件的目录添加到项目的包含path(在我们的例子中是:c:/ opencv / build / include)。
- 将包含已编译库的目录添加到项目的库path(在我们的例子中为:c:/ opencv / release / lib)。
- 添加需要与项目链接的特定库(例如:libopencv_core240.dll.a)。
示例 – OpenCV中的“Hello World”
这是一个小例子程序,它在GUI窗口上绘制文本“Hello World:”)。 您可以使用它来检查您的安装是否正常工作。 编译并运行程序后,您应该看到以下窗口:
#include "opencv2/opencv.hpp" #include "opencv2/highgui/highgui.hpp" using namespace cv; int main(int argc, char** argv) { //create a gui window: namedWindow("Output",1); //initialize a 120X350 matrix of black pixels: Mat output = Mat::zeros( 120, 350, CV_8UC3 ); //write text on the matrix: putText(output, "Hello World :)", cvPoint(15,70), FONT_HERSHEY_PLAIN, 3, cvScalar(0,255,0), 4); //display the image: imshow("Output", output); //wait for the user to press any key: waitKey(0); return 0; }
这不适合我。 我花了几天在网上find的每一个单独的教程,最后我编译我自己的二进制文件。 Everyting在这里描述: OpenVC 2.4.5,Eclipse CDT Juno,MinGW错误0xc0000005
经过许多试验和错误,我决定按照这个教程来编译我自己的二进制文件,因为似乎有太多的人抱怨预编译的二进制文件不适合他们。 Eclipse CDT Juno已经安装。
我的程序如下:
- 下载并安装MinGW并使用c:/ mingw / bin添加到系统PATH中
- 从http://www.cmake.org下载cmake并安装它;
- 下载OpenCV2.4.5 Windows版本
- 安装/解压Opencv到C:\ OpenCV245PC \(README,index.rst和CMakeLists.txt与所有子文件夹一起)
- 运行CMake GUI工具,然后
- selectC:\ OpenCV245PC \作为源
- select目标C:\ OpenCV245MinGW \ x86在哪里构build二进制文件
- 按configurationbutton,selectMinGW Makefiles作为生成器。 窗口中有一些红色高亮显示,根据需要select选项。
- 再次按下configurationbutton。 configuration现在完成了。
- 按“生成”button。
- 生成完成后退出程序。
- 退出Cmake程序。
- 运行命令行模式(cmd.exe)并转到目标目录C:\ OpenCV245MinGW \ x86
- 键入“mingw32-make”。 你会看到构build二进制文件的进度。 如果找不到该命令,则必须确保系统PATH已添加到c:/ mingw / bin中。 构build继续根据select的选项完成。
- 在Windows系统path(我的电脑>右键单击>属性>高级>环境variables>path)添加目标的bin目录,C:\ OpenCV245MinGW \ x86 \ bin
- 重新启动计算机
- 转到Eclipse CDT IDE,使用示例OpenCV代码创build一个C ++程序(您可以使用本主题顶部的代码)。
- 转到Project> Properties> C / C ++ Build> Settings> GCC C ++ Compiler>包含并添加源代码OpenCV文件夹“C:\ OpenCV245PC \ build \ include”
- 转到Project> Properties> C / C ++ Build> Settings> MinGW C ++ Linker> Libraries,并添加到库(-l)一个接一个(这可能因项目而异,如果你愿意,也可以添加它们)有些人只是你需要为你的项目的):opencv_calib3d245 opencv_contrib245 opencv_core245 opencv_features2d245 opencv_flann245 opencv_gpu245 opencv_highgui245 opencv_imgproc245 opencv_legacy245 opencv_ml245 opencv_nonfree245 opencv_objdetect245 opencv_photo245 opencv_stitching245 opencv_video245 opencv_videostab245
- 将内置的OpenCV库文件夹“C:\ OpenCV245MinGW \ x86 \ lib”添加到库searchpath(-L)中 。
您可以使用此代码来testing您的设置:
#include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/opencv.hpp> #include <iostream> using namespace std; using namespace cv; int main() { Mat img = imread("c:/lenna.png", CV_LOAD_IMAGE_COLOR); namedWindow("MyWindow", CV_WINDOW_AUTOSIZE); imshow("MyWindow", img); waitKey(0); return 0; }
不要忘记把图像放到C:/(或者你可能觉得合适的地方,只要确保eclipse已经读取了。
如果您安装了opencv 2.4.2,那么您需要将-lopencv_core240
更改为-lopencv_core242
我犯了同样的错误。
在Windows 64位上是可行的:
- 下载opencv-3.0(beta) , MinGW (命令行工具);
- 将以上各自的bin文件夹添加到PATH var;
- 创build一个文件夹“释放”(可以是任何名字)成;
- 在创build的文件夹中,打开提示terminal并执行以下命令;
-
复制并过去此命令
cmake -G "MinGW Makefiles" -D CMAKE_CXX_COMPILER=mingw32-g++.exe -D WITH_IPP=OFF MAKE_MAKE_PROGRAM=mingw32-make.exe ..\
-
执行这个命令
mingw32-make
-
执行这个命令
mingw32-make install
DONE
我一步一步地使用了这个指令,并且工作。
http://nenadbulatovic.blogspot.co.il/2013/07/configuring-opencv-245-eclipse-cdt-juno.html
正如@Nenad Bulatovic指出的那样,在添加库时要小心(第19步)。 在逐行添加每个库时,不应该添加任何尾随空格。 否则mingw去干。