为了学习图像检测技术,把开源的OpenCV拿来研究,刚刚能用它监测人脸位置.
OpenCV的源码和安装包都在Sourceforge中可以搜到:
http://sourceforge.net/projects/opencvlibrary/files/
OpenCV用起来还是很简单的,根据readme把项目包配置好,三个方面:
1,dll库路径设好环境变量,2,头文件路径设好,3,静态库文件路径设好,就可以调用函数,
而且还提供一套非常好用GUI,用起来跟Matlab差不多.
下面贴出用C++实现的人脸跟踪程序
#include "cv.h"
#include "highgui.h"
int main()
{
//读取摄像头
//声明IplImage指针
IplImage* pFrame = NULL;
CvCapture* pCapture = NULL;
IplImage* pgray=NULL;
IplImage* pcanny;
CvMemStorage* storage=0;
//cascade 这个是和人脸检测很有关系的,
//我猜它可能用了一个神经网络之类的,从一个文件中读取一个
//已经训练好的神经网络,天!自己怎么实现啊!
CvHaarClassifierCascade* cascade=0;
char cascadename[100]="C:\\OpenCV2.1\\data\\haarcascades\\haarcascade_frontalface_alt2.xml";
cascade = (CvHaarClassifierCascade*)cvLoad(cascadename,0,0,0);
storage = cvCreateMemStorage(0);
CvSeq* faces;
//创建窗口//就这么一句就创建了一个窗口,比Windows Api简单点
//窗口通过窗口名来标识
cvNamedWindow("video", 1);
//cvMoveWindow("video", 30, 0);
//打开摄像头或视频流 ,OpenCV居然还支持Real.嗨!什么都让别人做了
pCapture = cvCaptureFromCAM(-1);
//pCapture = cvCaptureFromFile("E:\\电影\\战争\\卓别林第一部有声喜剧片大独裁者RMVB中文字幕.rm");
//每次循环从摄像头中读取一帧图片,我用的USB摄像机,条件不太好哦
bool first=true;
while(pFrame = cvQueryFrame( pCapture ))
{
if(first)//初次循环,做些初始化
{
first=false;
//创建单通道图片
pgray=cvCreateImage(cvGetSize(pFrame),IPL_DEPTH_8U,1);
//这是canny边缘监测,和我原来做的差分得边缘不是一个级别的
pcanny=cvCreateImage(cvGetSize(pFrame),IPL_DEPTH_8U,1);
}
//将彩色图转化为2值图
cvCvtColor(pFrame,pgray,CV_BGR2GRAY);
cvCanny(pgray,pcanny,30,100,3); //canny边缘检测
/*********************************/
//检测人脸,
faces = cvHaarDetectObjects(pgray,cascade,
storage,1.1,2,0
,cvSize(30,30));
for(short i=0;i<(faces?faces->total:0);i++)
{
//得到人脸的区域
CvRect* rect = (CvRect*)cvGetSeqElem(faces,i);
//在人脸区域画个圆圈
CvPoint center; //中心
center.x=rect->x+rect->width/2;
center.y=rect->y+rect->height/2;
short radius = sqrt(pow(rect->width,2)//半径
+pow(rect->height,2))/2;
CvScalar color={{255,0,0}}; //画圈的颜色
cvCircle(pFrame,center,radius,color,3,8,0);
/**********************************/
}
//显示图像
//cvShowImage("video", pcanny);
cvShowImage("video", pFrame);
//延时 ,不然不会显示图像的,应该是扫描太快了
if(cvWaitKey(10)>= 0)
{
break;
}
}
//释放图像
cvReleaseImage(&pFrame);
cvReleaseImage(&pgray);
cvReleaseImage(&pcanny);
//销毁窗口
cvDestroyWindow("video");
//释放摄像设备
cvReleaseCapture(&pCapture);
return 0;
}
人脸检测图片:相机不太好,还是能检测到的
下面是canny检测图片,检测出来的基本上都是重要的边界,自己做的杂音太多了,没法拿出来.
- 大小: 30 KB
- 大小: 49.1 KB
分享到:
相关推荐
。。。
。。。
数字图像处理大作业 内容 Canny 边缘检测 OTSU 图像分割方法 OpenCV + Python 实现人脸检测
基于Qt+opencv+c++图像处理系统+完成了图像的灰度变换、形态学操作、图像分割、图像滤波、边缘检测、人脸检测等功能,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用...
明日科技的OpenCV 教程代码,总共13 章节,包含代码、图片。 代码每一行均有完整注释,目录如下: ...9、canny 边缘检测 10、模板匹配 11、视频和摄像头的处理 12、人脸识别 13、OpenCV 的智能人脸识别打卡系统
Qt图像处理系统,使用Opencv库,完成了图像的灰度变换、形态学操作、图像分割、图像滤波、边缘检测、人脸检测等功能。 功能 图像的打开、显示、保存 灰度图像处理 RGB转灰度 显示灰度直方图 直方图均衡化 灰度变换 ...
1.Canny 边缘检测 2.OTSU 图像分割方法 3.OpenCV + Python 实现人脸检测
5.6 改进边缘检测算子——Canny .. 198 5.6.1 Canny 算子.. 198 5.6.2 Canny 原理及实现.. 198 5.6.3 Canny 库函数实现.. 203 5.7 改进边缘检测算子——Marr-Hildreth .. 204 5.8 几何检测 207 5.8.1 霍夫变换.. 207...
5 快速上手OpenCV的第四个程序:canny边缘检测 1.4.4 6 读取并播放视频 1.5.1 7 调用摄像头采集图像 1.5.2 8 官方例程引导、赏析之彩色目标跟踪:Camshift 2.1.1 9 官方例程引导、赏析之光流:optical flow 2.1.2 10...
基于OpenCV的图像处理系统python实现源码+UI界面+项目说明文档(课程设计、整合常用图像处理方法和技术).zip ...选择 laplacian 算子、sobel 算子和 canny 算子进行边缘检测 目标检测 yolov5、人脸检测和图像分割
实现了一个基于OpenCV的图像处理演示程序,实现了Canny、Soble等边缘检测功能,图像平滑、形态学、图像变换、正面人脸检测等。
范例8-4-1 Canny边缘检测处理练习1 246 范例8-4-2 Canny边缘检测处理练习2 248 范例8-5-1 卡通化处理1,整合模糊及Canny 249 范例8-5-2 卡通化处理2 252 范例8-5-3 卡通化及线条Live版 253 范例8-6-1 抠出背景处理...
实现了一个基于OpenCV的图像处理演示程序,实现了Canny、Soble等边缘检测功能,图像平滑、形态学、图像变换、正面人脸检测等。
各种算法处理:.roberts 边缘检测,sobel算子,Canny算子,Laplace算子,人脸检测等。 通过键盘按键去调用对应的函数。 额外附加, SVM分类器训练0和1的识别 SVM数据准备.cpp 是根据digits.png 进行分割,样本数据...
8、Canny边缘检测功能 9、直线检测功能 10、圆形检测功能 11、轮廓发现功能 12、人脸检测功能 这个项目是我在GitHub上看到的,和我之前的Python+OpenCV实时图像处理,异曲同工,只不过是我对实时视频的处理,这个是...
选择 laplacian 算子、sobel 算子和 canny 算子进行边缘检测 # 目标检测 yolov5、人脸检测和图像分割 代码运行 # 安装依赖 ```sh pip install -r requirements.txt ``` # 运行 ```sh python ImageProcessing.py ``...
边缘检测和 Hough Transform 识别仪表指针的角度。 使用 Haar Feature Cascade 进行人脸检测,是 OpenCV 的机器学习部分 K-NN分类,是OpenCV机器学习部分 该幻灯片可在 环境 + 闪迪 32G microSD + + 2016-09-23-...
第13章 边缘检测和轮廓跟踪 491 13.1 边缘检测 492 13.1.1 边缘检测的基本概念 492 13.1.2 常规边缘检测 493 13.1.3 带方向的边缘检测 498 13.1.4 拉普拉斯算子 503 13.2 Hough变换 509 13.2.1 Hough变换的原理 509 ...