本文内容的主要组成部分:

  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.0\opencv\build\x64\vc12\bin

 3.2 配置vs

  ①新建一个项目,在源文件中新建一个空文件,右键属性管理器,点击属性,进行Microsoft.Cpp.x64.user 操作

  ②选择VC++目录,在包含目录添加以下路径

    E:\opencv-3.1.0\opencv\build\include

    E:\opencv-3.1.0\opencv\build\include\opencv

    E:\opencv-3.1.0\opencv\build\include\opencv2

  ③选择VC++目录,在库目录中添加以下路径

    E:\opencv-3.1.0\opencv\build\x64\vc12\lib

  ④选择链接器--输入,添加

    opencv_world310d.lib

配置备注:

  3.1配置系统变量

    环境变量分为用户变量和系统变量,用户变量只为当前用户可用,系统变量全部用户都可以使用。

  3.2配置vs

    ①属性管理器有4种,如图所示

      

opencvsharp 资料 opencv._系统变量

    ②可以根据自己常用的习惯,分别对上面四种进行配置

    ③如果配置的是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第一个程序()";	//从文件中读取图像
	IplImage *pImage = cvLoadImage(pstrImageName, CV_LOAD_IMAGE_UNCHANGED);	//创建窗口
	cvNamedWindow(pstrWindowsTitle, CV_WINDOW_AUTOSIZE);	//在指定窗口中显示图像
	cvShowImage(pstrWindowsTitle, pImage);	//等待按键事件
	cvWaitKey();	cvDestroyWindow(pstrWindowsTitle);
	cvReleaseImage(&pImage);
	return 0;
}

    ②测试结果:

opencvsharp 资料 opencv._#include_02

  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!\n");
		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\nSpending Time: %d ms\n", 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);
}

    ②测试结果:

opencvsharp 资料 opencv._d3_03

 

5.总结

  ①总结opencv的配置大致就是这样,本文不是从0开始,一步一截图,根据自己的理解,将关键的必要步骤罗列出来;

  ②从最后一张图片可以看到,使用opencv默认的特征值去识别人脸,有一定误差:有的人脸没有识别出来,有的识别出来但不是人脸

  ③上述两段测试代码,为网友提供,并非本人所写

  ④如果后续还要进行人脸识别,可以考虑修改人脸识别的特征值,或者采取别的算法、方法

  ⑤由于水平有限,如果不当之处请批评指正