为了学习图像检测技术,把开源的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
分享到:
相关推荐
在这个案例中,我们将讨论如何使用OpenCV进行人脸跟踪和Canny边缘检测。首先,我们需要确保正确安装了OpenCV,并且设置了相应的环境变量,包括DLL库路径、头文件路径以及静态库文件路径。 在C++代码中,我们看到...
在这个文档中,我们讨论的是如何使用 OpenCV 进行人脸跟踪以及 Canny 边缘检测。首先,我们需要了解 OpenCV 的基本安装和配置,这包括设置 DLL 库路径、头文件路径以及静态库文件路径。 在 C++ 代码中,我们看到...
源代码中可能包含了实现Canny边缘检测的程序,通常会涉及到OpenCV库中的`cv2.Canny()`函数。通过调整参数,如高斯滤波器的σ、高低阈值等,可以优化算法以适应不同场景的需求。理解并熟练掌握Canny边缘检测算法及其...
1. **Canny边缘检测**:Canny算法是一种经典的多级边缘检测方法,由John Canny于1986年提出。它的主要步骤包括高斯滤波、计算梯度幅度和方向、非极大值抑制以及双阈值检测。首先,高斯滤波用于消除噪声;然后,计算...
在OpenCV中实现Canny边缘检测,可以使用cv2.Canny()函数,输入参数包括源图像、低阈值和高阈值。这两个阈值用于确定边缘的强度,过高可能会漏掉一些较弱的边缘,过低则可能导致假边缘的增加。 结合人脸识别和轮廓...
边缘检测在Android应用中有很多实际用途,例如人脸识别、车牌识别、增强现实、智能监控等场景,它可以帮助提取图像的重要信息,简化后续的处理任务。 总结,通过OpenCV在Android上实现边缘检测,开发者可以充分利用...
在本示例中,使用了Canny边缘检测算法。Canny算法是一种多级边缘检测方法,它首先通过高斯滤波器去除噪声,然后计算图像梯度并进行非极大值抑制,最后通过双阈值技术确定最终的边缘像素。 具体步骤如下: 1. **...
在这个"opencv人脸检测程序"中,我们主要关注的是OpenCV在人脸识别和目标跟踪方面的应用。 首先,人脸检测是计算机视觉领域的一个基本任务,OpenCV提供了多种方法来实现这一功能。最常用的是Haar特征级联分类器,这...
6. **应用场景**:Canny边缘检测在多种领域有应用,包括自动驾驶(车辆检测)、医学图像分析(肿瘤检测)、工业检测(产品缺陷检测)、人脸识别等。 7. **代码实现**:在VC++中实现Canny边缘检测需要编写代码读取...
在“contours.c”源代码文件中,开发者可能定义了相关的函数和结构,用于读取图像、进行预处理(如灰度化、高斯模糊)、边缘检测(如Canny边缘检测)以及找到潜在人脸区域的轮廓。预处理步骤有助于消除噪声,增强...
接下来,我们使用OpenCV的边缘检测算法,如Canny算法,来提取图像中的轮廓。这些轮廓可能包含人脸和其他物体,因此需要进一步的筛选。为了定位人脸,可以采用霍夫变换检测直线和椭圆,因为人脸的轮廓往往呈现出这样...
- OpenCV提供了多种边缘检测算法,如Canny、Sobel、Laplacian等。这些算法能帮助我们从图像中提取出重要的轮廓信息,对于人脸识别,边缘检测可以帮助我们定位和分割出人脸区域。 3. **录入视频**: - 在OpenCV中...
在人脸检测后,对人脸区域进行Canny边缘检测,可以突出显示人脸的轮廓,有助于后续的分析和处理。 4. **轮廓识别**:在人脸边缘处理后,我们可以进一步寻找和提取人脸的轮廓。OpenCV的`findContours`函数能帮助我们...
总之,OpenCV库提供了一种方便的方式来实现Canny边缘检测算法,这在计算机视觉和图像处理的许多应用中都是不可或缺的工具。通过理解Canny算法的原理和OpenCV的使用,开发者可以构建强大的图像处理系统,用于检测和...
OpenCV是一个强大的开源...总之,"OpenCV人脸检测"涉及到的关键知识点包括OpenCV库的使用、Haar级联分类器、图像读取和处理、以及边缘检测等预处理技术。通过结合这些工具和技术,我们可以构建一个高效的人脸检测系统。
在"eye detection"上下文中,边缘检测可以帮助定位眼睛的位置,这在人脸识别和生物特征识别系统中尤其重要。 4. **www.pudn.com.txt和CH1**: 这两个文件名可能分别包含文档资料和一个章节的介绍。...
Canny边缘检测是一种广泛使用的算法,它通过高斯滤波、计算梯度幅度和方向、非极大值抑制以及双阈值检测来找到边缘。使用`cv::Canny(gray_img, edges, threshold1, threshold2)`,其中`edges`是检测到的边缘图像,`...
这通常通过Canny边缘检测、膨胀和腐蚀等操作来实现。对于人脸轮廓,这有助于进一步精确地识别出人脸的边缘。 6. **预处理**:在机器臂画图项目中,预处理步骤至关重要。它包括了去噪、灰度化、二值化、边缘检测和...
在人脸边沿检测中,OpenCV的边缘检测算法如Canny、Sobel或Laplacian等可以被应用,它们能够识别出图像中的高对比度区域,进而找到人脸的边界。 **Visual Studio 2010** 是Microsoft提供的一款强大的开发环境,支持...
Canny算法是一种常用的边缘检测方法,它在OpenCV中由`Canny()`函数提供。 ```java Mat edges = new Mat(); Imgproc.Canny(gray, edges, 100, 200); Imgcodecs.imwrite("output_edges.jpg", edges); ``` 以上代码...