如何安装 OpenCV 2.4 并使用 MinGW 编译我的代码?
7 回答
1.安装OpenCV 2.4.3
首先,从 sourceforge.net获取OpenCV 2.4.3 。它是一个自解压文件,因此只需双击该文件即可开始安装。将其安装在一个目录中,例如C:\
.
等到所有文件都被提取出来。它将创建一个C:\opencv
包含 OpenCV 头文件、库、代码示例等的新目录。
现在您需要将C:\opencv\build\x86\mingw\bin
目录添加到系统 PATH。此目录包含运行代码所需的 OpenCV DLL。
打开控制面板→系统→高级系统设置→高级选项卡→环境变量...
您将看到如下所示的窗口:
在系统变量部分,
选择路径(1),单击编辑... (2),添加C:\opencv\build\x86\mingw\bin
(3),然后单击确定。
这将在您的计算机上完成 OpenCV 2.4.3 安装。
2.安装MinGW编译器套件
我强烈建议您使用 gcc (GNU Compiler Collection) 来编译您的代码。gcc 是 Linux 系统中广泛使用的编译器套件,MinGW 是 Windows 的本机端口。
从 Sourceforge.net下载MinGW 安装程序并双击开始安装。只需按照向导并选择要安装的目录,例如C:\MinGW
.
选择“C编译器”和“C++编译器”进行安装。
安装程序会从网上下载一些包,所以你需要等待一段时间。安装完成后,C:\MinGW\bin
使用前面描述的步骤添加到您的系统路径。
要测试您的 MinGW 安装是否成功,请打开命令行框并键入:gcc
。如果一切正常,它将显示以下消息:
gcc: fatal error: no input files
compilation terminated
这样就完成了 MinGW 的安装,现在是时候编写你的“Hello, World!”了。程序。
3.编写示例代码
打开您的文本编辑器并键入下面的代码并将文件保存到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
您喜欢的图像或任何图像放在与上述文件相同的目录中。打开命令行框并通过键入以下内容编译上面的代码:
g++ -I"C:\opencv\build\include" -L"C:\opencv\build\x86\mingw\lib" loadimg.cpp -lopencv_core243 -lopencv_highgui243 -o loadimg
如果编译成功,它将创建一个名为loadimg.exe
.
类型:
loadimg
执行程序。结果:
4. 从这里到哪里去?
现在您的 OpenCV 环境已经准备就绪,下一步是什么?
- 转到示例目录 →
C:\opencv\samples\cpp
。 - 阅读并编译一些代码。
- 编写自己的代码。
@bsdnoobz 答案中的说明确实很有帮助,但没有让 OpenCV 在我的系统上运行。
显然我需要自己编译库才能让它工作,而不是依赖预构建的二进制文件(这可能导致我的程序崩溃,可能是由于与我的系统不兼容)。
我确实让它工作,并为编译和安装 OpenCV 以及配置 Netbeans 以使用它编写了一个综合指南。
为了完整起见,它也在下面提供。
当我第一次开始使用 OpenCV 时,我遇到了两个主要困难:
- 让我的程序不会立即崩溃。
- 使 Netbeans 运行良好,尤其是让调试器工作的时间。
我阅读了许多教程和“操作方法”文章,但没有一篇是真正全面和透彻的。最终我成功地设置了环境;在使用了这个(很棒的)库一段时间后,我决定写这个小教程,希望能对其他人有所帮助。
本教程分为三个部分:
- 编译和安装 OpenCV。
- 配置 Netbeans。
- 一个示例程序。
我使用的环境是:Windows 7、OpenCV 2.4.0、Netbeans 7 和 MinGW 3.20(带有编译器 gcc 4.6.2)。
假设:您的系统上已经安装了 MinGW 和 Netbeans。
编译和安装 OpenCV
下载 OpenCV 时,存档实际上已经在“build”文件夹中包含预构建的二进制文件(编译的库和 DLL)。起初,我尝试使用这些二进制文件,假设有人已经为我完成了编译工作。那没有用。
最终我想我必须在我自己的系统上编译整个库才能使其正常工作。
幸运的是,多亏了 CMake,编译过程相当简单。CMake(代表 Cross-platform Make)是一种生成特定于您的编译器和平台的 makefile 的工具。我们将使用 CMake 来配置我们的构建和编译设置,生成“makefile”,然后编译库。
步骤是:
- 下载CMake并安装它(在安装向导中选择将 CMake 添加到系统 PATH)。
- 下载OpenCV的“发布”版本。
- 将存档解压缩到您选择的目录。我将使用
c:/opencv/
. - 启动 CMake GUI。
- 浏览源目录
c:/opencv/
。 - 选择构建二进制文件的位置。我选择了
c:/opencv/release
。
- 单击“配置”。在打开的屏幕中,根据您的编译器选择生成器。在我们的例子中,它是“MinGW Makefiles”。
- 等待所有内容加载,之后您将看到此屏幕:
- 如果需要,可以更改设置,或保留默认设置。完成后,再次按“配置”。您应该在日志窗口中看到“配置完成”,并且红色背景应该从所有单元格中消失。
- 此时,CMake 已准备好生成 makefile,我们将使用该文件使用我们的编译器编译 OpenCV。单击“生成”并等待生成生成文件。该过程完成后,您应该会看到“生成完成”。从这一点开始,我们将不再需要 CMake。
- 浏览源目录
- 打开 MinGW shell(以下步骤也可以在 Windows 的命令提示符下完成)。
- 进入目录
c:/opencv/release/
。 - 键入
mingw32-make
并按 Enter。这应该开始编译过程。
- 编译完成后,OpenCV 的二进制文件就可以使用了。
- 为方便起见,我们应该将目录添加
C:/opencv/release/bin
到系统 PATH中。这将确保我们的程序可以找到运行所需的 DLL。
- 进入目录
配置 Netbeans
应该告诉 Netbeans 在哪里可以找到头文件和编译的库(在上一节中创建)。
需要头文件有两个原因:编译和代码完成。链接阶段需要已编译的库。
注意:为了进行调试,OpenCV DLL 应该可用,这就是我们将包含它们的目录添加到系统 PATH 的原因(上一节,步骤 5.4)。
首先,您应该验证 Netbeans 是否已正确配置以与 MinGW 一起使用。请查看下面的屏幕截图并验证您的设置是否正确(考虑根据您自己的安装更改路径)。另请注意
,该make
命令应来自 msys 而不是来自 Cygwin。
接下来,对于您在 Netbeans 中创建的每个新项目,您应该定义包含路径(包含头文件的目录)、库路径和您打算使用的特定库。右键单击“项目”窗格中的项目名称,然后选择“属性”。添加包含路径(根据自己的安装修改路径):
添加库路径:
添加您打算使用的特定库。这些库将在链接阶段动态链接到您的程序。通常,core
根据程序的特定需求,您将需要该库以及任何其他库。
就是这样,您现在可以使用 OpenCV!
概括
以下是安装 OpenCV 并将其与 Netbeans 一起使用所需完成的一般步骤:
- 用你的编译器编译 OpenCV。
- 将包含 DLL 的目录添加到系统 PATH(在我们的例子中:c:/opencv/release/bin)。
- 将包含头文件的目录添加到项目的包含路径(在我们的例子中:c:/opencv/build/include)。
- 将包含已编译库的目录添加到项目的库路径(在我们的例子中: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;
}
这对我不起作用。我花了几天时间学习在网上找到的每一个教程,最后我编译了自己的二进制文件。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 工具,然后
- 选择 C:\OpenCV245PC\ 作为源
- 选择目标,C:\OpenCV245MinGW\x86 构建二进制文件的位置
- 按配置按钮,选择 MinGW Makefiles 作为生成器。窗口中有一些红色高亮显示,根据需要选择选项。
- 再次按下配置按钮。配置现已完成。
- 按生成按钮。
- 生成完成后退出程序。
- 退出 Cmake 程序。
- 运行命令行模式(cmd.exe),进入目标目录C:\OpenCV245MinGW\x86
- 键入“mingw32-make”。您将看到构建二进制文件的进展。如果找不到该命令,则必须确保在系统 PATH 中添加了 c:/mingw/bin。构建继续根据选择的选项完成。
- 在 Windows 系统 PATH(我的电脑 > 右键单击 > 属性 > 高级 > 环境变量 > 路径)中添加目标的 bin 目录,C:\OpenCV245MinGW\x86\bin
- 重启电脑
- 转到 Eclipse CDT IDE,使用示例 OpenCV 代码创建一个 C++ 程序(您可以使用本主题顶部的代码)。
- 转到 Project > Properties > C/C++ Build > Settings > GCC C++ Compiler > Includes,然后添加源 OpenCV 文件夹“C:\OpenCV245PC\build\include”
- 转到项目 > 属性 > C/C++ 构建 > 设置 > MinGW C++ 链接器 > 库,然后逐个添加到库 (-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_video4opencv_video245opencv_stitch2
- 将构建的 OpenCV 库文件夹 "C:\OpenCV245MinGW\x86\lib" 添加到库搜索路径 (-L)。
您可以使用此代码来测试您的设置:
#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;
- 在 ; 中创建一个文件夹“release”(可以是任何名称);
- 进入创建的文件夹,打开提示终端并执行以下命令;
复制并粘贴此命令
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
完毕
我一步一步地使用了说明,它奏效了。
http://nenadbulatovic.blogspot.co.il/2013/07/configuring-opencv-245-eclipse-cdt-juno.html
正如@Nenad Bulatovic 所指出的,在添加库时必须小心(第 19 步)。在逐行添加每个库时,不应添加任何尾随空格。否则 mingw 会失控。