visual studio 12/13基础c++工程建立使用

来源:互联网 发布:php 中英文企业网站 编辑:程序博客网 时间:2024/06/06 09:03

颜色区域检测的功能实现

   本文主要介绍如何使用vs2012新建一个c++项目实现预期的功能,代码具体实现结合了opencv的功能,因此设计到包含文件和库的配置。   代码实现的功能为将一种特定的颜色从一幅图中检测出来,并转化为二值图显示。

运行环境:
win7 64位系统
visual studio 2013(2012版也适用)
运行debug 32位(win32)


首先,打开vs2013,新建项目工程,工程名中英文皆可,中间为工程放置路径,可以自己选择,本文放置桌面。
step1

    上面之后直接下一步,到下面的情况下,选定**空项目**,然后完成工程建立。

这里写图片描述

    右键源文件,添加一个主函数main.cpp,里面包含函数的具体实现代码。

这里写图片描述

main

    在main.cpp里写入函数的实现部分,代码如下,直接拷贝进去。
#include <iostream>#include "opencv2/highgui/highgui.hpp"#include "opencv2/imgproc/imgproc.hpp"using namespace cv;using namespace std;  Mat imgHSV;  Mat imgThresholded;  int iLowH = 20;  int iHighH = 35;  int iLowS = 80;   int iHighS = 255;  int iLowV = 80;  int iHighV = 255;   Mat imgOriginal = imread("666.jpg");     Mat src;void on_track(int){      inRange(imgHSV, Scalar(iLowH, iLowS, iLowV), Scalar(iHighH, iHighS, iHighV), imgThresholded); //Threshold the image   //开操作 (去除一些噪点)   Mat element = getStructuringElement(MORPH_RECT, Size(5, 5));   morphologyEx(imgThresholded, imgThresholded, MORPH_OPEN, element);   //闭操作 (连接一些连通域)   morphologyEx(imgThresholded, imgThresholded, MORPH_CLOSE, element);   imshow("Thresholded Image", imgThresholded); //show the thresholded image    imshow("原图",src);   //char key = (char) waitKey(300);   //imshow("Original", imgOriginal); //show the original image  ///waitKey(0);} int main( int argc, char** argv ) {    //'VideoCapture cap(0); //capture the video from web cam    //if ( !cap.isOpened() )  // if not success, exit program    //{    //     cout << "Cannot open the web cam" << endl;    //     return -1;    //}  namedWindow("Control", CV_WINDOW_AUTOSIZE); //create a window called "Control"  //Create trackbars in "Control" window  cvCreateTrackbar("LowH", "Control", &iLowH, 179,on_track); //Hue (0 - 179)  cvCreateTrackbar("HighH", "Control", &iHighH, 179,on_track);  cvCreateTrackbar("LowS", "Control", &iLowS, 255,on_track); //Saturation (0 - 255)  cvCreateTrackbar("HighS", "Control", &iHighS, 255,on_track);  cvCreateTrackbar("LowV", "Control", &iLowV, 255,on_track); //Value (0 - 255)  cvCreateTrackbar("HighV", "Control", &iHighV, 255,on_track);   // while (true)   // {        //bool bSuccess = cap.read(imgOriginal); // read a new frame from video        // if (!bSuccess) //if not success, break loop        //{        //     cout << "Cannot read a frame from video stream" << endl;        //     break;        //}  resize(imgOriginal,src,Size(720,576));   vector<Mat> hsvSplit;   cvtColor(src, imgHSV, COLOR_BGR2HSV); //Convert the captured frame from BGR to HSV   //因为我们读取的是彩色图,直方图均衡化需要在HSV空间做   split(imgHSV, hsvSplit);   equalizeHist(hsvSplit[2],hsvSplit[2]);   merge(hsvSplit,imgHSV);   on_track(iLowH); on_track(iHighH);   on_track(iLowS); on_track(iHighS);   on_track(iLowV); on_track(iHighV);   //inRange(imgHSV, Scalar(iLowH, iLowS, iLowV), Scalar(iHighH, iHighS, iHighV), imgThresholded); //Threshold the image   ////开操作 (去除一些噪点)   //Mat element = getStructuringElement(MORPH_RECT, Size(5, 5));   //morphologyEx(imgThresholded, imgThresholded, MORPH_OPEN, element);   ////闭操作 (连接一些连通域)   //morphologyEx(imgThresholded, imgThresholded, MORPH_CLOSE, element);   //imshow("Thresholded Image", imgThresholded); //show the thresholded image   //waitKey(0);   //imshow("Original", imgOriginal); //show the original image   //waitKey(0);    waitKey(0);  // if(key == 27)   ///      break;  //  }   return 0;}
   到这一步,如果是基础的c++代码就可以直接f5运行了。由于本项目调用了opencv的库,所以要进行包含目录和库文件的配置。

这里写图片描述

此工程在main函数的当前路径下,存入了一个3rd的文件夹,里面包含了一个include和一个lib文件夹。

这里写图片描述

其中include里位opencv的头文件,lib中为代码运行中对opencv的依赖库文件opencv_x249d.lib;这里的x为具体lib名,249为opencv的版本号,d为后缀,是debug模式下的依赖库。

这里写图片描述

在把需要的头文件和库具体放进工程之后,下一步是将工程需要用到的包含文件目录和库文件目录配置好,并且具体给出所需要的lib文件名称。

这里写图片描述

右键项目,打开属性,这里如果之前电脑用过opencv并且配置过的话,可能这里会有两个绝对路径,就是指项目在电脑里寻找这两个路径及文件。这种配置方法可以使下次用到opencv库时不用重新配置,缺点是如果将整个工程换到其他电脑上时无法使用,仍需配置。

这里写图片描述

这里讲第二种配置的方法,给出的路径为当前工程路径,可用性较强。打开项目属性,找到对应包含目录和库目录,编辑输入上面操作中文件存放的位置。

这里写图片描述

这里写图片描述

找到链接器里的输入,编辑,将调用的库名称写进去,让工程能具体找到对应需要的库。

这里写图片描述

这里写图片描述

配置完成后,点击应用,这时候之前的红色波浪号报错应该会消失,然后就可以进行最后的编译连接运行代码了,直接f5一键搞定,代码无误,运行结果如下:

这里写图片描述

到此为止,基本工程的建立使用结束,下一篇将介绍如何将几个文件代码组合实现的功能封装成一个库(提供头文件与lib文件),以供别人使用,在具体项目中用处较大。