首先注意,本文使用的是Visual c++ 2010 express,这意味着它有以下问题:
- 不能开发64位程序,除非另外下载编译器并配置
- 只能针对项目(不能全局)设置include目录、库目录等,每个新项目可能都需要设一次
但考虑到有很多人使用的是免费的Visual C++ express,所以本文也有一定意义。(我和朋友一起花了几个小时才跑通这个例子,希望可以到帮助其它朋友)。
开发环境
- Windows 7 x64
- Visual C++ 2010 express
- OpenVC 2.4.2
- x86 32位
下载OpenCV
当前OpenCV的最新版本为2.4.2,我下载位于Sourceforge的windows版本。文件大小为212.56M,可能需要翻墙。
下载后,解压到某处,我的目录结构如下图:
解压即可,无须安装。需要注意的是,当前版本已经包含了windows下的预编译的库,不用像以前那样得先麻烦的编译一遍。
注意其中的build目录,我们需要用的东西都在它里面。
配置环境变量
环境变量中要增加bin路径和tbb路径。OpenCV中提供了多种版本,由于我现在只能用32位,所以在Path中增加如下:
E:\OpenCV\OpenCV-2.4.2\build\x86\vc10\bin;E:\OpenCV\OpenCV-2.4.2\build\common\tbb\ia32\vc10
如果你要用64位,则应该是:
E:\OpenCV\OpenCV-2.4.2\build\x64\vc10\bin;E:\OpenCV\OpenCV-2.4.2\build\common\tbb\intel64\vc10
配置完后,你需要把Visual c++关闭重新打开,以使环境变量生效(无启重启电脑)。
创建文字版Hello world项目
打开Visual C++ 2010 express,创建一个新项目(空项目):
在“源文件”下,创建一个hello.cpp:
把下面一段代码复制到hello.cpp中:
#include <cv.h> #include <highgui.h> int main ( int argc, char **argv ) { cvNamedWindow( "My Window", 1 ); IplImage *img = cvCreateImage( cvSize( 240, 120 ), IPL_DEPTH_8U, 1 ); CvFont font; double hScale = 1.0; double vScale = 1.0; int lineWidth = 3; cvInitFont( &font, CV_FONT_HERSHEY_SIMPLEX | CV_FONT_ITALIC, hScale, vScale, 0, lineWidth ); cvPutText( img, "Hello World!", cvPoint( 20, 40 ), &font, cvScalar( 255, 255, 0 ) ); cvShowImage( "My Window", img ); cvWaitKey(); return 0; }
可以看到会有很多编辑器中会提示很多错误,因为我们还没有配置OpenCV的库:
配置包含目录
右键点项目“HelloWorld1”->“属性”->“配置属性”->“VC++ 目录”,在“包含目录”中增加:
E:\OpenCV\OpenCV-2.4.2\build\include E:\OpenCV\OpenCV-2.4.2\build\include\opencv E:\OpenCV\OpenCV-2.4.2\build\include\opencv2
如下图:
配置库目录
在“库目录”中增加:
E:\OpenCV\OpenCV-2.4.2\build\x86\vc10\lib
如下图:
配置附加依赖库
在“链接器”->“输入”->“附加依赖项”处增加:
opencv_calib3d242d.lib opencv_contrib242d.lib opencv_core242d.lib opencv_features2d242d.lib opencv_flann242d.lib opencv_gpu242d.lib opencv_haartraining_engined.lib opencv_highgui242d.lib opencv_imgproc242d.lib opencv_legacy242d.lib opencv_ml242d.lib opencv_nonfree242d.lib opencv_objdetect242d.lib opencv_photo242d.lib opencv_stitching242d.lib opencv_ts242d.lib opencv_video242d.lib opencv_videostab242d.lib
如下图:
注意此处只配置了Debug的属性,在Release中也需要类似配置,只是使用的lib与上面不同,后面少了一个d:
opencv_calib3d242.lib opencv_contrib242.lib opencv_core242.lib opencv_features2d242.lib opencv_flann242.lib opencv_gpu242.lib opencv_haartraining_engine.lib opencv_highgui242.lib opencv_imgproc242.lib opencv_legacy242.lib opencv_ml242.lib opencv_nonfree242.lib opencv_objdetect242.lib opencv_photo242.lib opencv_stitching242.lib opencv_ts242.lib opencv_video242.lib opencv_videostab242.lib
“确定”后,回到编辑窗口,可以看到前面的红线提示都没了:
运行项目
点击“运行”按钮,如果一切无误,则会弹出下面这个有图形界面的Hello world:
图片版Hello world
文字版的Hello world实现了,现在来一个图片版的Hello world,即显示一张图片。
创建HelloWorld2项目
这里基本与前面相同,只是代码变了,如下:
#include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #pragma comment( lib, "opencv_core242d.lib ") #pragma comment( lib, "opencv_highgui242d.lib" ) using namespace cv; int main ( int argc, char **argv ) { namedWindow( "show_image", WINDOW_AUTOSIZE ); Mat src = imread( "logo.png" ); imshow( "show_image", src ); char c = waitKey(0); return 0; }
它将读取与最终产生的可执行程序同级的一张"logo.png"图片,显示出来。
获取图片资源
该图片来自opencv官网的logo:
我们将它先保存到本地硬盘,放在"Visual Studio 2010\Projects\HelloWorld2\HelloWorld2\"目录下(一定要保证图片确定在该目录下)。
把图片添加到项目中
右键点“HelloWorld2项目”->“增加”->“现有项”,选中该logo.png。这时项目的“资源文件”下,就会多一个logo.png出来。
运行项目
点击“运行”,如果一切无误的话,则会出现如下效果:
可以看到,黑色的"OpenCV"文字因为与底色相同看不见了。右边也多了一个竖条,是因为这张图片太小了,比win7最小的窗口还要小。
至此,Hello world完成。