flo*_*ree 61
1.安装OpenCV 2.4.3
首先,从sourceforge.net 获取OpenCV 2.4.3.它是一个自我文件解压缩,所以只需双击该文件即可开始安装.比如安装在目录中C:\.

等到所有文件都被解压缩.它将创建一个C:\opencv包含OpenCV头文件,库,代码示例等的新目录.
现在需要将C:\opencv\build\x86\mingw\bin目录添加到系统PATH中.此目录包含运行代码所需的OpenCV DLL.
打开控制面板 → 系统 → 高级系统设置 → 高级选项卡 → 环境变量...
您将看到如下所示的窗口:

在System Variables部分,
选择Path(1),单击Edit ...(2),add C:\opencv\build\x86\mingw\bin(3)然后单击Ok.
这将完成计算机上的OpenCV 2.4.3安装.
2.安装MinGW编译器套件
我强烈建议您使用gcc(GNU Compiler Collection)来编译代码.gcc是Linux系统中广泛使用的编译器套件,MinGW是Windows的本机端口.
从Sourceforge.net 下载MinGW安装程序,然后双击开始安装.只需按照向导选择要安装的目录即可C:\MinGW.

选择要安装的"C编译器"和"C++编译器".

安装程序将从Internet下载一些软件包,因此您必须等待一段时间.安装完成后,C:\MinGW\bin使用前面描述的步骤添加到系统路径.

要测试MinGW安装是否成功,请打开命令行框并键入:gcc.如果一切正常,它将显示以下消息:
gcc: fatal error: no input files
compilation terminated
Run Code Online (Sandbox Code Playgroud)
这样就完成了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;
}
Run Code Online (Sandbox Code Playgroud)
将lena.jpg您喜欢的图像或任何图像放在与上述文件相同的目录中.打开命令行框并输入以下代码来编译代码:
g++ -I"C:\opencv\build\include" -L"C:\opencv\build\x86\mingw\lib" loadimg.cpp -lopencv_core243 -lopencv_highgui243 -o loadimg
Run Code Online (Sandbox Code Playgroud)
如果它成功编译,它将创建一个名为的可执行文件loadimg.exe.
类型:
loadimg
Run Code Online (Sandbox Code Playgroud)
执行程序.结果:

4.从哪里去?
现在您的OpenCV环境已经准备就绪,下一步是什么?
C:\opencv\samples\cpp.Eya*_*lAr 17
@bsdnoobz回答中的说明确实很有帮助,但没有让OpenCV在我的系统上运行.
显然我需要自己编译库以使其工作,而不是指望预先构建的二进制文件(这导致我的程序崩溃,可能是由于与我的系统不兼容).
我确实让它工作,并编写了一份全面的指南,用于编译和安装OpenCV,并配置Netbeans以使用它.
为了完整起见,下面还提供了它.
当我第一次使用OpenCV时,遇到了两个主要困难:
我阅读了许多教程和"如何做"的文章,但没有一篇真正全面而全面.最终我成功地建立了环境; 经过一段时间使用这个(伟大的)库,我决定写这个小教程,希望能帮助别人.
本教程的三个部分:
我使用的环境是:Windows 7,OpenCV 2.4.0,Netbeans 7和MinGW 3.20(带编译器gcc 4.6.2).
假设:您已在系统上安装了MinGW和Netbeans.
下载OpenCV时,存档实际上已经在'build'文件夹中包含预构建的二进制文件(已编译的库和DLL).起初,我尝试使用这些二进制文件,假设有人已经完成了为我编译的工作.那没用.
最终我想我必须在我自己的系统上编译整个库才能使它正常工作.
幸运的是,感谢CMake,编译过程相当容易.CMake(代表跨平台Make)是一个生成特定于您的编译器和平台的makefile的工具.我们将使用CMake来配置我们的构建和编译设置,生成'makefile',然后编译库.
步骤是:
c:/opencv/.c:/opencv/.c:/opencv/release.



c:/opencv/release/.mingw32-make,然后按回车.这应该开始编译过程.

C:/opencv/release/bin
到系统PATH中.这将确保我们的程序可以找到运行所需的DLL.应该告诉Netbeans在哪里可以找到头文件和编译库(在上一节中创建).
需要头文件有两个原因:编译和代码完成.链接阶段需要编译的库.
注意:为了使调试工作,OpenCV DLL应该可用,这就是我们将包含它们的目录添加到系统PATH的原因(上一节,步骤5.4).
首先,您应该验证是否正确配置了Netbeans以使用MinGW.请参阅下面的屏幕截图并验证您的设置是否正确(根据您自己的安装考虑路径更改).另请注意
,该make命令应该来自msys而不是来自Cygwin.

接下来,对于您在Netbeans中创建的每个新项目,您应该定义包含路径(包含头文件的目录),库路径和您打算使用的特定库.右键单击"项目"窗格中的项目名称,然后选择"属性".添加包含路径(根据您自己的安装修改路径):

添加库路径:

添加您要使用的特定库.这些库将在链接阶段动态链接到您的程序.通常,您将需要core库以及任何其他库,以满足您的程序的特定需求.

就是这样,你现在准备好使用OpenCV了!
以下是为了安装OpenCV并将其与Netbeans一起使用而需要完成的一般步骤:
这是一个小例子程序,它在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;
}
Run Code Online (Sandbox Code Playgroud)
Nen*_*vic 13
这不适合我.我在网上找到的每一个教程都花了几天时间,最后我编译了自己的二进制文件.这里描述的是:OpenVC 2.4.5,eclipse CDT Juno,MinGW错误0xc0000005
经过多次试验和错误后,我决定按照本教程编写自己的二进制文件,因为似乎有太多人抱怨预编译的二进制文件不适用于它们.Eclipse CDT Juno已经安装完毕.
我的程序如下:
您可以使用此代码测试您的设置:
#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;
}
Run Code Online (Sandbox Code Playgroud)
不要忘记把图像放到C:/(或者你可能找到合适的地方,只要确保eclipse已经阅读过了.