本文内容的主要组成部分:
1.opencv简介
2.搭建环境介绍
3.opencv配置
4.简单测试配置效果
5.总结
1.opencv简介
OpenCV的全称是:Open Source Computer Vision Library。OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
2.搭建环境介绍
操作系统:
Windows 10 专业版 64位
IDE:
Visual Studio 2013
opencv:
opencv-3.1.0(http://opencv.org/downloads.html)
3.opencv配置
3.1 配置系统变量
E:opencv-3.1.0opencvuildx64vc12in
3.2 配置vs
①新建一个项目,在源文件中新建一个空文件,右键属性管理器,点击属性,进行Microsoft.Cpp.x64.user 操作
②选择VC++目录,在包含目录添加以下路径
E:opencv-3.1.0opencvuildinclude
E:opencv-3.1.0opencvuildincludeopencv
E:opencv-3.1.0opencvuildincludeopencv2
③选择VC++目录,在库目录中添加以下路径
E:opencv-3.1.0opencvuildx64vc12lib
④选择链接器--输入,添加
opencv_world310d.lib
配置备注:
3.1配置系统变量
环境变量分为用户变量和系统变量,用户变量只为当前用户可用,系统变量全部用户都可以使用。
3.2配置vs
①属性管理器有4种,如图所示
②可以根据自己常用的习惯,分别对上面四种进行配置
③如果配置的是Debug|x64或者Debug|Win32
链接器--输入,添加opencv_world310d.lib
如果配置的是Release|x64或者Release|Win32
链接器--输入,添加opencv_world310.lib
4.简单测试配置效果
上述操作都完成后,以后写一个“hello,world”来测试一下opencv配置的成功与否
4.1测试打开一张图片
①测试代码:
#include <opencv2/opencv.hpp>
using namespace std;
#pragma comment(linker, "/subsystem:"windows" /entry:"mainCRTStartup"")
int main()
{
const char *pstrImageName = "2.jpg";
const char *pstrWindowsTitle = "OpenCV第一个程序(http://blog.csdn.net/MoreWindows)";
//从文件中读取图像
IplImage *pImage = cvLoadImage(pstrImageName, CV_LOAD_IMAGE_UNCHANGED);
//创建窗口
cvNamedWindow(pstrWindowsTitle, CV_WINDOW_AUTOSIZE);
//在指定窗口中显示图像
cvShowImage(pstrWindowsTitle, pImage);
//等待按键事件
cvWaitKey();
cvDestroyWindow(pstrWindowsTitle);
cvReleaseImage(&pImage);
return 0;
}
②测试结果:
4.2测试识别人脸
①测试代码:
#include <opencv2/opencv.hpp>
#include <cstdio>
#include <cstdlib>
#include <Windows.h>
using namespace std;
const char *pcascadeName = "E:\opencv-3.1.0\opencv\sources\data\haarcascades_cuda\haarcascade_frontalface_alt.xml";
const char *pImageName = "4.jpg";
void DetectAndMark();
int main(int argc, const char** argv)
{
DetectAndMark();
return 0;
}
void DetectAndMark()
{
// load the Haar classifier
CvHaarClassifierCascade *pHaarClassCascade;
pHaarClassCascade = (CvHaarClassifierCascade*)cvLoad(pcascadeName);
//load the test image
IplImage *pSrcImage = cvLoadImage(pImageName, CV_LOAD_IMAGE_UNCHANGED);
IplImage *pGrayImage = cvCreateImage(cvGetSize(pSrcImage), IPL_DEPTH_8U, 1);
if (pSrcImage == NULL || pGrayImage == NULL)
{
printf("can't load image!
");
return;
}
cvCvtColor(pSrcImage, pGrayImage, CV_BGR2GRAY);
if (pHaarClassCascade != NULL && pSrcImage != NULL && pGrayImage != NULL)
{
const static CvScalar colors[] =
{
CV_RGB(0, 0, 255),
CV_RGB(0, 128, 255),
CV_RGB(0, 255, 255),
CV_RGB(0, 255, 0),
CV_RGB(255, 128, 0),
CV_RGB(255, 255, 0),
CV_RGB(255, 0, 0),
CV_RGB(255, 0, 255)
};
CvMemStorage *pcvMemStorage = cvCreateMemStorage(0);
cvClearMemStorage(pcvMemStorage);
//detect the face
int TimeStart, TimeEnd;
TimeStart = GetTickCount();
CvSeq *pcvSeqFaces = cvHaarDetectObjects(pGrayImage, pHaarClassCascade, pcvMemStorage);
TimeEnd = GetTickCount();
printf("the number of faces: %d Spending Time: %d ms ", pcvSeqFaces->total, TimeEnd - TimeStart);
//mark the face
for (int i = 0; i <pcvSeqFaces->total; i++)
{
CvRect* r = (CvRect*)cvGetSeqElem(pcvSeqFaces, i);
CvPoint center;
int radius;
center.x = cvRound((r->x + r->width * 0.5));
center.y = cvRound((r->y + r->height * 0.5));
radius = cvRound((r->width + r->height) * 0.25);
cvCircle(pSrcImage, center, radius, colors[i % 8], 2);
}
cvReleaseMemStorage(&pcvMemStorage);
}
const char *pstrWindowsTitle = "FaceDetect Demo";
cvNamedWindow(pstrWindowsTitle, CV_WINDOW_AUTOSIZE);
cvShowImage(pstrWindowsTitle, pSrcImage);
cvWaitKey(0);
cvDestroyWindow(pstrWindowsTitle);
cvReleaseImage(&pSrcImage);
cvReleaseImage(&pGrayImage);
}
②测试结果:
5.总结
①总结opencv的配置大致就是这样,本文不是从0开始,一步一截图,根据自己的理解,将关键的必要步骤罗列出来;
②从最后一张图片可以看到,使用opencv默认的特征值去识别人脸,有一定误差:有的人脸没有识别出来,有的识别出来但不是人脸
③上述两段测试代码,为网友提供,并非本人所写
④如果后续还要进行人脸识别,可以考虑修改人脸识别的特征值,或者采取别的算法、方法
⑤由于水平有限,如果不当之处请批评指正