您的位置:首页 > 编程语言 > C语言/C++

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

2017-07-12 17:41 633 查看

颜色区域检测的功能实现

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


运行环境:

win7 64位系统

visual studio 2013(2012版也适用)

运行debug 32位(win32)

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



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




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






在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, imgThreshold
4000
ed, 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文件),以供别人使用,在具体项目中用处较大。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息