opencv__配置

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

  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种,如图所示

      

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

    ③如果配置的是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!\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);
}

    ②测试结果:

 

5.总结

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

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

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

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

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

posted @ 2016-03-29 20:10  kinghero  阅读(883)  评论(0编辑  收藏  举报