OpenCV入门系列(2):Visual C++ 2010 express + OpenCV + x86的Hello world


首先注意,本文使用的是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,可能需要翻墙。

下载后,解压到某处,我的目录结构如下图:

image

解压即可,无须安装。需要注意的是,当前版本已经包含了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,创建一个新项目(空项目):

image

在“源文件”下,创建一个hello.cpp:

image

把下面一段代码复制到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的库:

image

配置包含目录

右键点项目“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

如下图:

image

配置库目录

在“库目录”中增加:

E:\OpenCV\OpenCV-2.4.2\build\x86\vc10\lib

如下图:

image

配置附加依赖库

在“链接器”->“输入”->“附加依赖项”处增加:

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

如下图:

image

注意此处只配置了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

“确定”后,回到编辑窗口,可以看到前面的红线提示都没了:

image

运行项目

点击“运行”按钮,如果一切无误,则会弹出下面这个有图形界面的Hello world:

image

图片版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出来。

image

运行项目

点击“运行”,如果一切无误的话,则会出现如下效果:

image

可以看到,黑色的"OpenCV"文字因为与底色相同看不见了。右边也多了一个竖条,是因为这张图片太小了,比win7最小的窗口还要小。

 

至此,Hello world完成。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM