`
westice
  • 浏览: 115559 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

OpenCV人脸跟踪canny边缘检测

阅读更多

 

为了学习图像检测技术,把开源的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
分享到:
评论
3 楼 jaye 2011-03-26  
你这是识别人脸, 并不是人脸跟踪。

应该看看motion tracking的内容
2 楼 cd1985 2010-05-13  
  曾经看到过 opencv  和  opengl 结合用 very nice!
1 楼 javafound 2010-04-29  
嗯,不错,继续努力,呵呵,

相关推荐

    OpenCV人脸跟踪canny边缘检测.pdf

    在这个案例中,我们将讨论如何使用OpenCV进行人脸跟踪和Canny边缘检测。首先,我们需要确保正确安装了OpenCV,并且设置了相应的环境变量,包括DLL库路径、头文件路径以及静态库文件路径。 在C++代码中,我们看到...

    OpenCV人脸跟踪canny边缘检测.docx

    在这个文档中,我们讨论的是如何使用 OpenCV 进行人脸跟踪以及 Canny 边缘检测。首先,我们需要了解 OpenCV 的基本安装和配置,这包括设置 DLL 库路径、头文件路径以及静态库文件路径。 在 C++ 代码中,我们看到...

    Canny边缘检测可以用于图像处理,例如人脸的边缘检测

    源代码中可能包含了实现Canny边缘检测的程序,通常会涉及到OpenCV库中的`cv2.Canny()`函数。通过调整参数,如高斯滤波器的σ、高低阈值等,可以优化算法以适应不同场景的需求。理解并熟练掌握Canny边缘检测算法及其...

    数字图像处理大作业( 图像分割、人脸检测、边缘检测 )

    1. **Canny边缘检测**:Canny算法是一种经典的多级边缘检测方法,由John Canny于1986年提出。它的主要步骤包括高斯滤波、计算梯度幅度和方向、非极大值抑制以及双阈值检测。首先,高斯滤波用于消除噪声;然后,计算...

    OpenCV实现人脸识别与轮廓检测

    在OpenCV中实现Canny边缘检测,可以使用cv2.Canny()函数,输入参数包括源图像、低阈值和高阈值。这两个阈值用于确定边缘的强度,过高可能会漏掉一些较弱的边缘,过低则可能导致假边缘的增加。 结合人脸识别和轮廓...

    opencv实现边缘检测

    边缘检测在Android应用中有很多实际用途,例如人脸识别、车牌识别、增强现实、智能监控等场景,它可以帮助提取图像的重要信息,简化后续的处理任务。 总结,通过OpenCV在Android上实现边缘检测,开发者可以充分利用...

    opencv_边缘检测和人脸识别(代码)

    在本示例中,使用了Canny边缘检测算法。Canny算法是一种多级边缘检测方法,它首先通过高斯滤波器去除噪声,然后计算图像梯度并进行非极大值抑制,最后通过双阈值技术确定最终的边缘像素。 具体步骤如下: 1. **...

    opencv人脸检测程序。

    在这个"opencv人脸检测程序"中,我们主要关注的是OpenCV在人脸识别和目标跟踪方面的应用。 首先,人脸检测是计算机视觉领域的一个基本任务,OpenCV提供了多种方法来实现这一功能。最常用的是Haar特征级联分类器,这...

    Canny边缘检测

    6. **应用场景**:Canny边缘检测在多种领域有应用,包括自动驾驶(车辆检测)、医学图像分析(肿瘤检测)、工业检测(产品缺陷检测)、人脸识别等。 7. **代码实现**:在VC++中实现Canny边缘检测需要编写代码读取...

    contours.rar_opencv_opencv 人脸_visual c

    在“contours.c”源代码文件中,开发者可能定义了相关的函数和结构,用于读取图像、进行预处理(如灰度化、高斯模糊)、边缘检测(如Canny边缘检测)以及找到潜在人脸区域的轮廓。预处理步骤有助于消除噪声,增强...

    基于opencv的人脸检测

    接下来,我们使用OpenCV的边缘检测算法,如Canny算法,来提取图像中的轮廓。这些轮廓可能包含人脸和其他物体,因此需要进一步的筛选。为了定位人脸,可以采用霍夫变换检测直线和椭圆,因为人脸的轮廓往往呈现出这样...

    基于Opencv的人脸综合检测.rar

    - OpenCV提供了多种边缘检测算法,如Canny、Sobel、Laplacian等。这些算法能帮助我们从图像中提取出重要的轮廓信息,对于人脸识别,边缘检测可以帮助我们定位和分割出人脸区域。 3. **录入视频**: - 在OpenCV中...

    基于opencv 和MFC 的人脸定位和检测,以及标记,边缘,轮廓等~~

    在人脸检测后,对人脸区域进行Canny边缘检测,可以突出显示人脸的轮廓,有助于后续的分析和处理。 4. **轮廓识别**:在人脸边缘处理后,我们可以进一步寻找和提取人脸的轮廓。OpenCV的`findContours`函数能帮助我们...

    edgedet1.zip_it_opencv canny

    总之,OpenCV库提供了一种方便的方式来实现Canny边缘检测算法,这在计算机视觉和图像处理的许多应用中都是不可或缺的工具。通过理解Canny算法的原理和OpenCV的使用,开发者可以构建强大的图像处理系统,用于检测和...

    OpenCV人脸检测

    OpenCV是一个强大的开源...总之,"OpenCV人脸检测"涉及到的关键知识点包括OpenCV库的使用、Haar级联分类器、图像读取和处理、以及边缘检测等预处理技术。通过结合这些工具和技术,我们可以构建一个高效的人脸检测系统。

    边缘检测各种算法编码.rar_eye detection_边缘检测_边缘检测 opencv_边缘检测算法

    在"eye detection"上下文中,边缘检测可以帮助定位眼睛的位置,这在人脸识别和生物特征识别系统中尤其重要。 4. **www.pudn.com.txt和CH1**: 这两个文件名可能分别包含文档资料和一个章节的介绍。...

    Opencv 人脸图像素描化

    Canny边缘检测是一种广泛使用的算法,它通过高斯滤波、计算梯度幅度和方向、非极大值抑制以及双阈值检测来找到边缘。使用`cv::Canny(gray_img, edges, threshold1, threshold2)`,其中`edges`是检测到的边缘图像,`...

    opencv 实现简单背景人脸轮廓提取(某大学的论文实现)

    这通常通过Canny边缘检测、膨胀和腐蚀等操作来实现。对于人脸轮廓,这有助于进一步精确地识别出人脸的边缘。 6. **预处理**:在机器臂画图项目中,预处理步骤至关重要。它包括了去噪、灰度化、二值化、边缘检测和...

    AsmLib-OpenCV+VS2010人脸边沿检测

    在人脸边沿检测中,OpenCV的边缘检测算法如Canny、Sobel或Laplacian等可以被应用,它们能够识别出图像中的高对比度区域,进而找到人脸的边界。 **Visual Studio 2010** 是Microsoft提供的一款强大的开发环境,支持...

    opencv+java实现灰度化、二值化、轮廓描边、边缘检测源码有注释

    Canny算法是一种常用的边缘检测方法,它在OpenCV中由`Canny()`函数提供。 ```java Mat edges = new Mat(); Imgproc.Canny(gray, edges, 100, 200); Imgcodecs.imwrite("output_edges.jpg", edges); ``` 以上代码...

Global site tag (gtag.js) - Google Analytics