OpenCV 安装与调试
Visual Studio 是微软提供的面向任何开发者的同类最佳工具。
OpenCV(开源计算机视觉库)是一个开源的计算机视觉和机器学习软件库。
目前最新版本:Visual Studio 2019、OpenCV 4.1.1
本文先介绍如何在本地计算机 Windows 7 x64 上安装 OpenCV,然后介绍如何在 VS2019 中配置 OpenCV 开发环境,最后创建一个从图片中提取人脸的 c++ 程序。
1、安装 OpenCV
在官网下载你需要的 exe 版本(这里选择的 opencv-4.1.1-vc14_vc15.exe),然后双击它(即安装),实质就是解压一下,解压完出来一个文件夹(如:D:\Users\Downloads)。

解压后的文件夹内容如下:

其中 build 是 OpenCV 使用时要用到的一些库文件,而 sources 中则是 OpenCV 官方为我们提供的一些 demo 示例源码。
(说明:如果要在未安装 OpenCV 的机器上运行调用了 OpenCV 接口的程序,只需把 OpenCV 安装目录下把相应的 lib 文件复制到程序运行目录下即可,类似 MFC 程序的部署。如:D:\Users\Downloads\opencv\build\x64\vc15\lib\opencv_world411.dll)
最后依次选择计算机—>属性—>高级系统设置—>环境变量,找到Path变量,选中并点击编辑,添加 D:\Users\Downloads\opencv\build\x64\vc15\bin;
现在搭建好了运行 OpenCV 程序的环境,接下来就结合 VS2019 来编写需要的程序。(VS2019 的安装步骤可以参考官网上的安装说明,注意要选择 c++ 模块)
二、在 VS2019 中配置 OpenCV
1.添加空项目(c++)

右键点击项目->添加->添加新项,选择 main.cpp 文件,如下图:

在视图菜单中选择其他窗口->属性管理器,如下图:

然后右击 Debug | 64,选择属性,进行参数配置,如下图:

首先配置包含目录(即添加 OpenCV 头文件所在的目录),如果“计算的值”下面包含了以前的文件目录,并需要删除,可以先找到相应的配置文件,然后进行清理。
如:C:\Users\zhangsan\AppData\Local\Microsoft\MSBuild\v4.0\Microsoft.Cpp.x64.user.props

类似地配置好库目录,如下图:

接下来还需配置链接器的依赖项(调试模式则选择 opencv_world411d.lib,发布模式则选择 opencv_world411.lib),如下图:

其中的库文件的位置在 OpenCV 的安装目录下:

三、从图片中提取人脸的程序
#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/calib3d/calib3d.hpp> using namespace std;
using namespace cv; int main()
{
String facefile = "D:\\Users\\wzl\\Downloads\\opencv\\build\\etc\\haarcascades\\haarcascade_frontalface_alt.xml";
String eyefile = "D:\\Users\\wzl\\Downloads\\opencv\\build\\etc\\haarcascades\\haarcascade_eye.xml";
Mat image, image_gray; //定义两个Mat变量,用于存储每一帧的图像 image = imread("F:\\test.jpg");
//imshow("原图", image); cvtColor(image, image_gray, COLOR_RGB2GRAY);//转为灰度图
equalizeHist(image_gray, image_gray);//直方图均衡化,增加对比度方便处理 CascadeClassifier eye_Classifier; //载入分类器
CascadeClassifier face_cascade; //载入分类器 //加载分类训练器,OpenCv官方文档提供的xml文档,可以直接调用
if (!eye_Classifier.load(eyefile)) //需要将xml文档放在自己指定的路径下
{
cout << "Load haarcascade_eye.xml failed!" << endl;
return ;
}
if (!face_cascade.load(facefile))
{
cout << "Load haarcascade_frontalface_alt failed!" << endl;
return ;
} //vector 是个类模板 需要提供明确的模板实参 vector<Rect>则是个确定的类 模板的实例化
vector<Rect> eyeRect;
vector<Rect> faceRect; //检测关于眼睛部位位置
//eye_Classifier.detectMultiScale(image_gray, eyeRect, 1.1, 2, 0 | 1, Size(30, 30));
//for (size_t eyeIdx = 0; eyeIdx < eyeRect.size(); eyeIdx++)
//{
// rectangle(image, eyeRect[eyeIdx], Scalar(0, 0, 255)); //用矩形画出检测到的位置
//} //检测关于脸部位置
face_cascade.detectMultiScale(image_gray, faceRect, 1.1, , | , Size(, )); for (size_t i = ; i < faceRect.size(); i++)
{
//用矩形画出检测到的位置(一个脸对应一个矩形框)
rectangle(image, faceRect[i], Scalar(, , )); //保存脸部图片
Mat face = image(Rect(faceRect[i]));
Mat faceLittle;
resize(face, faceLittle, Size(, )); Mat faceLittle_gray;
cvtColor(faceLittle, faceLittle_gray, COLOR_RGB2GRAY);//转为灰度图
equalizeHist(faceLittle_gray, faceLittle_gray);//直方图均衡化,增加对比度方便处理 imwrite("F:\\testface.jpg", faceLittle_gray);
} imshow("人脸识别图", image); //显示当前帧 waitKey();
}
以上程序的允许结果如下图:

通过摄像机来提取人脸照片:
#include <opencv2/opencv.hpp>
#include <opencv2/core.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>
#include <string>
#include <stdlib.h> using namespace std;
using namespace cv; void faceDetect()
{
String facefile = "D:\\Users\\Downloads\\opencv\\build\\etc\\haarcascades\\haarcascade_frontalface_alt.xml";
//脸部识别分类器
CascadeClassifier faceCascader;
if (!faceCascader.load(facefile)) {
printf("无法加载脸部特征文件:%s", facefile);
return;
}
namedWindow("摄像头");
VideoCapture capture();//打开摄像头
Mat frame;
Mat gray;
vector<Rect> faces;
int sn = ;
//实时读取摄像头的图像帧
while (capture.read(frame)) {
cvtColor(frame, gray, COLOR_RGB2GRAY);
equalizeHist(gray, gray);
faceCascader.detectMultiScale(gray, faces, 1.2, , , Size(, ));
for (size_t faceSize = ; faceSize < faces.size(); faceSize++)
{
Rect roi;
roi.x = faces[static_cast<int>(faceSize)].x;
roi.y = faces[static_cast<int>(faceSize)].y;
roi.width = faces[static_cast<int>(faceSize)].width;
roi.height = faces[static_cast<int>(faceSize)].height; Mat faceROI = frame(roi); //在人脸区域画一个矩形
rectangle(frame, faces[static_cast<int>(faceSize)], Scalar(, , ), , , );
sn++; //将sn整型值转为字符串
stringstream stream;
stream << sn; //生产一个新的文件名
String snStr = "F:\\testface\\img-" + stream.str() + ".jpg";
cout << snStr << endl;
imwrite(snStr, faceROI);
} imshow("摄像头", frame); //必须加时延,否则无法显示图像
char key = waitKey(); //按ESC键退出
if (key == ) {
break;
}
}
}
OpenCV 安装与调试的更多相关文章
- OpenCV安装与配置
本文使用OpenCV2.48在win10平台下操作. 一,关于OpenCV OpenCV是开源C++计算机可视化处理库,它集成了很多计算机图形图像处理的功能.还有机器学习,字符识别,人脸识别,物体检测 ...
- OpenCV学习笔记——OpenCV安装
关于OpenCV安装 1.下载和安装OpenCV SDK 在官网:http://opencv.org/上找到OpenCV windows版下载 . 后得到一个 opencv-2.X.X.exe的文件, ...
- Windows Service 开发,安装与调试
Visual Studio.net 2010 Windows Service 开发,安装与调试 本示例完成一个每隔一分钟向C:\log.txt文件写入一条记录为例,讲述一个Windows Servic ...
- ubuntu14.04下nodejs + npm + bower的安装、调试和部署
1. 简介 本文介绍ubuntu14.04下nodejs+npm+bower的安装.调试和部署 参考文档 https://docs.npmjs.com/getting-started https: ...
- Android OpenCV样例调试+报错处理
1.OpenCV样例调试:<OpenCV Sample - image-manipulations> blog+报错:E/CAMERA_ACTIVITY(17665): Cam ...
- postgresql编译安装与调试(二)
接前文postgresql编译安装与调试(一),继续说说postgresql的编译安装与调试. 上一篇已经详细说明了如何在Linux系统上编译安装postgresql,这次我们在此基础上简单讲讲如何在 ...
- OpenCV安装要点
OpenCV安装要点1.设置系统和用户环境变量PATH指向opencv\build\x86\vc10\bin或者opencv\build\x64\vc10\bin2.新建用户环境变量OpenCV指向o ...
- Redis安装与调试
Redis安装与调试 Redis安装与调试linux版本:64位CentOS 6.5 Redis版本:2.8.17 (更新到2014年10月31日) Redis官网:http://redis.io/ ...
- ### OpenCV安装(Linux)
### OpenCV安装(Linux) @(gr_self)[ffmpeg | openCV] #@author: gr #@date: 2015-09-02 #@email: forgerui@gm ...
随机推荐
- idea添加jar包
之前一直使用eclipse,现在使用idea,发现两者引用外部jar的时候不太一样,分享一下. 使用eclipse引用外部jar的时候,我们可以在工程下新建一个lib包来存放,然后add to bui ...
- 2019阿里云开年Hi购季基础云产品分会场全攻略!
2019阿里云云上Hi购季活动已经于2月25日正式开启,从已开放的活动页面来看,活动分为三个阶段: 2月25日-3月04日的活动报名阶段.3月04日-3月16日的新购满返+5折抢购阶段.3月16日-3 ...
- 怎样判断一个exe可执行程序(dll文件)是32位的还是64位的
看到一个比较简单粗暴的方式,做个记录. 直接用记事本或者notepad++(文本编辑软件都可)打开exe文件(dll文件), 会有很多乱码,接下来只需要在第二段中找到PE两个字母,在其后的不远出会出现 ...
- Ajax--同源策略,jsonp跨域传输原理(callback),
什么是同源策略? 阮一峰的博客 同源策略 同源策略的解决方法: 跨域传输 img 标签的src是可以引入其他域名下的图片 script标签的src属性同理 ,也可以引入其他域名下的js文件,并执行 1 ...
- Springboot项目下mybatis报错:Invalid bound statement (not found)
mybatis报错:Invalid bound statement (not found)的原因很多,但是正如报错提示一样,找不到xml中的sql语句,报错的情况分为三种: 第一种:语法错误 Java ...
- VUE ECharts人际关系图
1. 概述 1.1 说明 项目中需要对某个人的人际关系进行展示,故使用echarts中的关系图进行处理此需求. 2. 代码 2.1 代码示例 <template> <div clas ...
- Django框架Day3------之Models
一.Django models字段类型清单: AutoField:一个自动递增的整型字段,添加记录时它会自动增长.你通常不需要直接使用这个字段:如果你不指定主键的话,系统会自动添加一个主键字段到你的m ...
- 第二周<导学/分类>
分类学习 分类算法各有不同 knn naivebyes regression dnn sklearn.linear_modlel 线性函数 sklearn.preprocessing 非线性函数 分类 ...
- FastAdmin 安装后点登录没有反应怎么办?
FastAdmin 安装后点登录没有反应怎么办? 很多小伙伴安装后点"登录"没有反应. 这个 URL 是对的,但是页面就是不改变. 如果这时候点击 URL 变了,那没有到登陆界面, ...
- 2018-8-10-win10-UWP-修改密码框文字水平
title author date CreateTime categories win10 UWP 修改密码框文字水平 lindexi 2018-08-10 19:17:19 +0800 2018-2 ...