文档库 最新最全的文档下载
当前位置:文档库 › 轮廓检测——OpenCV例子学习

轮廓检测——OpenCV例子学习

轮廓检测——OpenCV例子学习
轮廓检测——OpenCV例子学习

图像处理opencv代码

#include "stdafx.h" #include "mymfc.h" #include "mymfcDlg.h" #include "afxdialogex.h" #include #ifdef _DEBUG #define new DEBUG_NEW #endif // 用于应用程序“关于”菜单项的 CAboutDlg 对话框 class CAboutDlg : public CDialogEx { public: CAboutDlg(); // 对话框数据 enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP() // CmymfcDlg 对话框

CmymfcDlg::CmymfcDlg(CWnd* pParent /*=NULL*/) : CDialogEx(CmymfcDlg::IDD, pParent) , TheImage(NULL) , rePath(_T("")) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CmymfcDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CmymfcDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_ReadImg, &CmymfcDlg::OnBnClickedReadimg) ON_BN_CLICKED(IDC_EdgeDetect, &CmymfcDlg::OnBnClickedEdgedetect) ON_BN_CLICKED(IDC_Refresh, &CmymfcDlg::OnBnClickedRefresh) ON_BN_CLICKED(IDC_GrayProcess, &CmymfcDlg::OnBnClickedGrayprocess) ON_BN_CLICKED(IDC_Sobel, &CmymfcDlg::OnBnClickedSobel) ON_BN_CLICKED(IDC_Laplace, &CmymfcDlg::OnBnClickedLaplace) ON_BN_CLICKED(IDC_FFT2, &CmymfcDlg::OnBnClickedFft2) ON_BN_CLICKED(IDC_CImage, &CmymfcDlg::OnBnClickedCimage) ON_BN_CLICKED(IDC_Mirror, &CmymfcDlg::OnBnClickedMirror) ON_BN_CLICKED(IDC_CColor, &CmymfcDlg::OnBnClickedCcolor) ON_BN_CLICKED(IDC_MedianBlur, &CmymfcDlg::OnBnClickedMedianblur) ON_BN_CLICKED(IDC_Gaussian, &CmymfcDlg::OnBnClickedGaussian) ON_BN_CLICKED(IDC_BothSide, &CmymfcDlg::OnBnClickedBothside) ON_BN_CLICKED(IDC_Equally, &CmymfcDlg::OnBnClickedEqually) ON_BN_CLICKED(IDC_Corrosion, &CmymfcDlg::OnBnClickedCorrosion) ON_BN_CLICKED(IDC_Dilate, &CmymfcDlg::OnBnClickedDilate) END_MESSAGE_MAP() // CmymfcDlg 消息处理程序 BOOL CmymfcDlg::OnInitDialog() { CDialogEx::OnInitDialog();

OpenCV成长之路(8)直线、轮廓的提取与描述

OpenCV成长之路(8):直线、轮廓的提取与描述 分类:OpenCV成长之路2014-01-04 18:35 689人阅读评论(0) 收藏举报 直线、轮廓的提取与描述基于内容的图像分析的重点是提取出图像中具有代表性的特征,而线条、轮廓、块往往是最能体现特征的几个元素,这篇文章就针对于这几个重要的图像特征,研究它们在OpenCV中的用法,以及做一些简单的基础应用。 一、Canny检测轮廓 在上一篇文章中有提到sobel边缘检测,并重写了soble的C++代码让其与matlab中算法效果一致,而soble边缘检测是基于单一阈值的,我们不能兼顾到低阈值的丰富边缘和高阈值时的边缘缺失这两个问题。而canny算子则很好的弥补了这一不足,从目前看来,canny边缘检测在做图像轮廓提取方面是最优秀的边缘检测算法。 canny边缘检测采用双阈值值法,高阈值用来检测图像中重要的、显著的线条、轮廓等,而低阈值用来保证不丢失细节部分,低阈值检测出来的边缘更丰富,但是很多边缘并不是我们关心的。最后采用一种查找算法,将低阈值中与高阈值的边缘有重叠的线条保留,其他的线条都删除。 本篇文章中不对canny的算法原理作进一步说明,稍后会在图像处理算法相关的文章中详细介绍。 下面我们用OpenCV中的Canny函数来检测图像边缘 1.int main() 2.{ 3. Mat I=imread("../cat.png"); 4. cvtColor(I,I,CV_BGR2GRAY); 5. 6. Mat contours; 7. Canny(I,contours,125,350); 8. threshold(contours,contours,128,255,THRESH_BINARY); 9. 10. namedWindow("Canny"); 11. imshow("Canny",contours);

图像管理方案计划opencv代码

/. #include "stdafx.h" #include "mymfc.h" #include "mymfcDlg.h" #include "afxdialogex.h" #include #ifdef _DEBUG #define new DEBUG_NEW #endif // 用于应用程序“关于”菜单项的CAboutDlg 对话框 class CAboutDlg : public CDialogEx { public: CAboutDlg(); // 对话框数据 enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP() // CmymfcDlg 对话框

CmymfcDlg::CmymfcDlg(CWnd* pParent /*=NULL*/) : CDialogEx(CmymfcDlg::IDD, pParent) , TheImage(NULL) , rePath(_T("")) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CmymfcDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CmymfcDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_ReadImg, &CmymfcDlg::OnBnClickedReadimg) ON_BN_CLICKED(IDC_EdgeDetect, &CmymfcDlg::OnBnClickedEdgedetect) ON_BN_CLICKED(IDC_Refresh, &CmymfcDlg::OnBnClickedRefresh) ON_BN_CLICKED(IDC_GrayProcess, &CmymfcDlg::OnBnClickedGrayprocess) ON_BN_CLICKED(IDC_Sobel, &CmymfcDlg::OnBnClickedSobel) ON_BN_CLICKED(IDC_Laplace, &CmymfcDlg::OnBnClickedLaplace) ON_BN_CLICKED(IDC_FFT2, &CmymfcDlg::OnBnClickedFft2) ON_BN_CLICKED(IDC_CImage, &CmymfcDlg::OnBnClickedCimage) ON_BN_CLICKED(IDC_Mirror, &CmymfcDlg::OnBnClickedMirror) ON_BN_CLICKED(IDC_CColor, &CmymfcDlg::OnBnClickedCcolor) ON_BN_CLICKED(IDC_MedianBlur, &CmymfcDlg::OnBnClickedMedianblur) ON_BN_CLICKED(IDC_Gaussian, &CmymfcDlg::OnBnClickedGaussian) ON_BN_CLICKED(IDC_BothSide, &CmymfcDlg::OnBnClickedBothside) ON_BN_CLICKED(IDC_Equally, &CmymfcDlg::OnBnClickedEqually) ON_BN_CLICKED(IDC_Corrosion, &CmymfcDlg::OnBnClickedCorrosion) ON_BN_CLICKED(IDC_Dilate, &CmymfcDlg::OnBnClickedDilate) END_MESSAGE_MAP() // CmymfcDlg 消息处理程序 BOOL CmymfcDlg::OnInitDialog() { CDialogEx::OnInitDialog();

opencv 椭圆检测识别并画出轮廓

*#include "stdafx.h" #include "cv.h" #include "highgui.h" using namespace cv; using namespace std; //标示符的可见范围 CvPoint2D32f GetCPoint(IplImage* imageFg,int maxX); void FitEllipseBlob(IplImage* imageFg); int main( int argc, char** argv ) { IplImage* pImg; //声明IplImage指针 //载入图像 pImg = cvLoadImage( "C:\\Users\\BB\Desktop\\bec\\OPENCV椭圆拟合定位椭圆中心点以及重心法定位程序\\OPENCV椭圆拟合定位椭圆中心点以及重心法定位程序\\特征中心点提取误差分析\\image.bmp", 1);//[[此处的argc==2是否需要改成argc==1?我改了之后才能运行成功。求大牛解惑]] // wmzzzz : 在"属性"|"debug"|里的command arguments 里加入参数(一个路径:要打开的文件路径) 这时argc==2 就合理了...可以试试多加几个 int pointX = 0; for (int i=0;i<19;i++) { pointX=60*i+30; cvEllipse(pImg,cvPoint(pointX,80),cvSize(19,20),-200,0,360,CV_RGB(255,255,255),-1,CV _AA,0); } IplImage* m_imageGray = cvCreateImage(cvSize(pImg->width,pImg->height),IPL_DEPTH_8U,1); IplImage* m_imageBw = cvCreateImage(cvSize(pImg->width,pImg->height),IPL_DEPTH_8U,1); cvCvtColor(pImg,m_imageGray,CV_RGB2GRAY); cvThreshold(m_imageGray,m_imageBw,128,255,CV_THRESH_BINARY); CvPoint2D32f pointXX; float XXX,YYY; for (int i = 0;i<19;i++) {

opencv摄像机标定代码

// cvCalib.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include #include #include #include void InitCorners3D(CvMat *Corners3D, CvSize ChessBoardSize, int Nimages, float SquareSize); int image_width = 768; int image_height = 576;//待标定图片的大小 const int ChessBoardSize_w = 7; const int ChessBoardSize_h = 7;//图片中可标定的角数 const CvSize ChessBoardSize = cvSize(ChessBoardSize_w,ChessBoardSize_h); const int NPoints = ChessBoardSize_w*ChessBoardSize_h;//角点个数 const int NImages=6;//待标定的图片数 int corner_count[NImages] = {0}; float SquareWidth = 10; //棋盘格子的边长,可任意设定,不影响内参数 CvMat *intrinsics; CvMat *distortion_coeff; CvMat *rotation_vectors; CvMat *translation_vectors; CvMat *object_points; CvMat *point_counts; CvMat *image_points; void main() { IplImage *current_frame_rgb; IplImage *current_frame_gray; IplImage *chessBoard_Img; CvPoint2D32f corners[NPoints*NImages]; chessBoard_Img =cvCreateImage(cvSize(image_width, image_height), IPL_DEPTH_8U, 3); current_frame_gray = cvCreateImage(cvSize(image_width, image_height), IPL_DEPTH_8U, 1); current_frame_rgb = cvCreateImage(cvSize(image_width, image_height), IPL_DEPTH_8U, 3); int captured_frames=0;

OPENCV实现的轮廓检测与处理

// // The full "Square Detector" program. // It loads several images subsequentally and tries to find squares in // each image // #ifdef _CH_ #pragma package #endif #ifndef _EiC #include "cv.h" #include "highgui.h" #include #include #include #endif int thresh = 50; IplImage* img = 0; IplImage* img0 = 0; CvMemStorage* storage = 0; CvPoint pt[4]; const char* wndname = "Square Detection Demo"; // helper function: // finds a cosine of angle between vectors // from pt0->pt1 and from pt0->pt2 double angle( CvPoint* pt1, CvPoint* pt2, CvPoint* pt0 ) { double dx1 = pt1->x - pt0->x; double dy1 = pt1->y - pt0->y; double dx2 = pt2->x - pt0->x; double dy2 = pt2->y - pt0->y; return (dx1*dx2 + dy1*dy2)/sqrt((dx1*dx1 + dy1*dy1)*(dx2*dx2 + dy2*dy2) + 1e-10); } // returns sequence of squares detected on the image. // the sequence is stored in the specified memory storage CvSeq* findSquares4( IplImage* img, CvMemStorage* storage ) { CvSeq* contours; int i, c, l, N = 11; CvSize sz = cvSize( img->width & -2, img->height & -2 ); IplImage* timg = cvCloneImage( img ); // make a copy of input image

基于opencv2.0的车牌检测与字符分割的代码

本程序主要实现的是车牌的定位与检测 主要是利用申继龙论文里面的方法 1、采集得到的图像 2、把RGB图像转换成HSI彩色图像 3、利用设定的H、S阈值得到二值图像 4、对二值图像水平投影获得候选区域 5、对候选区域的HSI图像边缘检测 */ #include "stdafx.h" #include "opencv2/opencv.hpp" #include "opencv2/objdetect/objdetect.hpp" #include "opencv2/features2d/features2d.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/calib3d/calib3d.hpp" #include "opencv2/nonfree/nonfree.hpp" #include "opencv2/nonfree/features2d.hpp" #include "opencv2/imgproc/imgproc_c.h" #include "opencv2/legacy/legacy.hpp" #include "opencv2/legacy/compat.hpp" #include #include #include #include #include #include #include #include #include using namespace std; using namespace cv; #define pi 3.14159265 IplImage* srcImage=NULL;//存储原图片 IplImage*srcImage1=NULL;//存储原始图片的副本 IplImage* HSI=NULL; static IplImage* grayImage=NULL;//存储原图片灰度图 static double posdouble=0.0; IplImage* channelOneImage=NULL; IplImage* channelTwoImage=NULL; IplImage* channelThreeImage=NULL; IplImage* plateImage=NULL;//存储车牌图像 IplImage* grayPlateImage=NULL;//存储车牌灰度图像 vectorcharacterImageList;//存储7个车牌字符图像的容器vectorxList;//存储7个车牌字符的起始和结束位置

基于OpenCV的边缘检测算法在车身尺寸检测中的应用

万方数据

万方数据

万方数据

2010年6月中同制造、Ip信息化第39卷第11期 图2汽车车身部分原始图像1图4基于本文算法的处理结果1 图3汽车车身部分原始图像2图5基于本文算法的处理结果2 方便,具有广阔的应用前景。本文针对灰度分布不 均匀的图像,首先,通过对图像开窗后进行局部灰参考文献: 碱∞∞Pan肌AnalysisandM8ch妇1n‘e11igence,1986,度变换来改进边缘检测的效果,对窗口交界处再开hiCannyJA.Ccmaputationalapproachtoedgedetection[J].IEEE 设几个很小的窗口实现拼接来去除窗口交界处的 皇假边缘;其次,詈用自适璺阈值的改进型Canny[2]8章(6毓)晋:67.图9-像69处8理.与分析[M】.|匕京:清华大学出版社,1999:算法动态地随图像梯度幅值变化而变化。通过试懈一枷 验证明,本文的方法对于不同噪声干扰和光照背景[3]杨枝灵,王开.WLsualc++数字图像获取、处理及实践应下的图像,能够获得较好的处理效果,其抗噪性能用[M].北京:人民邮电出版社,2003:553—572. 好,定位精度高。利用该算法对汽车图像进行边缘[4]刑果?戚文芽,李萍,等?灰度图像的自适应边缘检测 [J].计算机工程与应用,2007,43(5):63—66? 检测,检测出的汽车边缘连续、清晰。 ApplicationofOpenCV——basedEdgeDetectionAgorithm intheVehicle——bodyDimensionDetection CHENWei—li,TANG/-Ion,GENGYah—biao (NorthwesternPolytechnicalUniversity,ShaanxiXi’aJl,710072,China) Abstract:Itmainlyintroducesthesolutiontoimprovetheefficiencyoftheedgedetection,whichcombinesthe detectionalgorithmofthestatisticalimagewindowcalculationwiththeenhancedCannyedgedetectionalgo—rithm.ItusesOpenCVdatabase雒basicfunctionlibraryandappliesthisagorithmtothevehicle—bodydi—mensiondetection.Thetestresultsshowthattheprocessingofedgedetectionismoreeffectiveandquicker.Keywords:Edge——detection;ImageProcess;Vehicle——bodyDimension 万方数据

基于opencv的人脸识别程序-代码详解

#include "cv.h" #include "highgui.h" #include #ifdef _EiC #define WIN32 #endif static CvMemStorage* storage = 0; static CvHaarClassifierCascade* cascade = 0; void detect_and_draw( IplImage* image ); const char* cascade_name = "haarcascade_frontalface_alt.xml";//人脸检测分类器 int main( int argc, char** argv ) { CvCapture* capture = 0; IplImage *frame, *frame_copy = 0; int optlen = strlen("--cascade="); const char* input_name; if( argc > 1 && strncmp( argv[1], "--cascade=", optlen ) == 0 ) { cascade_name = argv[1] + optlen; input_name = argc > 2 ? argv[2] : 0; } else { cascade_name = "E:\毕业设计\智能机器人动态人脸识别系统\陈建州程序.xml";//分类器路径 input_name = argc > 1 ? argv[1] : 0; } cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 ); if( !cascade )//如果没有找到分类器,输出以下 { fprintf( stderr, "ERROR: Could not load classifier cascade\n" ); fprintf( stderr, "Usage: facedetect --cascade=\"\" [filename|camera_index]\n" ); return -1;

最新Canny边缘检测与轮廓提取汇总

C a n n y边缘检测与轮 廓提取

摘要................................................................................................................................................... Abstract.......................................................................................................................................... I 1 绪论 0 2 设计内容与OpenCV简介 (1) 2.1 设计任务内容 (1) 2.2 OpenCV简介 (1) 3 理论分析 (2) 3.1 边缘检测 (2) 3.1.1 图像的边缘 (2) 3.1.2 边缘检测的基本步骤 (2) 3.2 轮廓提取 (3) 4 边缘检测的算法比较 (4) 4.1 Reborts算子 (4) 4.2 Sobel算子 (5) 4.3 Prewitt 算子 (5) 4.4 Kirsch 算子 (7) 4.5 LOG算子 (7) 4.6 Canny算子 (8) 5 实验仿真 (10) 5.1算法设计 (10) 5.2 实验结果 (11) 6 分析与总结 (12) 参考文献 (13) 附录 (14)

边缘检测是图像处理和计算机视觉中的基本问题,它的目的是标识出数字图像中亮度变化明显的点。图像经过边沿检测处理之后,不仅大幅度地减少了数据量,并且剔除了可以认为不相关的信息,保留了图像重要的结构属性。 事实上,边缘存在于图像的不规则结构和不平稳现象中,也即存在于信号的突变点处,这些点给出了图像轮廓的位置。这些轮廓常常是我们在图像边缘检测时,所需要的非常重要的一些特征条件,这就需要我们对一幅图像检测并提取出它的边缘。 可用于图像边缘检测和轮廓提取的方法有很多,其中包括有常见的Robert边缘算子、Prewitt 边缘算子、Sobel边缘算子等等。本文首先将会从数字图像处理的角度,对几种边缘检测算法进行详细的分析,然后会并选择其中一种边缘检测算法进行实验。考虑到以后进一步的学习,本文将会使用openCV对算法进行实现。最后,本文将会把实验获得的实际效果,与理论分析的结果进行比对,并以此对本次实验进行总结。 关键字:边缘检测轮廓提取图像处理openCV

opencv,模板匹配源码

竭诚为您提供优质文档/双击可除opencv,模板匹配源码 篇一:opencv模板匹配 opencv模板匹配 V1.0 zhbrain 1、2、1)2)3、1)2) opencv模板匹配原理--没有金字塔................................................. ..........................4模板匹配—使用金字塔................................................. ...............................................5主要函数简介................................................. ................................................... ........5程序流程................................................. ................................................... ................5验证和结

果................................................. ................................................... ...............5实验环境................................................. ................................................... ................5实验结果................................................. ................................................... . (5) opencv模板匹配 1、opencv模板匹配原理--没有金字塔 函数: cvmatchtemplate(source,target,result,method);说明:source:源图像,一般我们使用灰度图像;如果source 为Rgb图像,使用函数cvcvtcolor(source,dst,cV_Rgb2gRay)这里,dst为转换后的灰度图像。target:模板图像。 Result:匹配后的矩阵,width=s_width–t_taget+1,height=s_height–t_height+1使用函数 iplimage*result=cvcreateimage(resultsize,ipl_depth_ 32F,1)获得。method:cV_tm_sqdiFF: cV_tm_sqdiFF_noRmed cV_tm_ccoRR

图像处理经典算法及OpenCV程序

基于opencv的use摄像头视频采集程序 (1) 基于opencv的两个摄像头数据采集 (3) 能激发你用代码做视频的冲动程序 (6) 图像反转(就是把黑的变白,白的变黑) (11) 图像格式的转换 (12) 从摄像头或者A VI文件中得到视频流,对视频流进行边缘检测 (13) 采用Canny算子进行边缘检测 (15) 角点检测 (18) 图像的旋转加缩放(效果很拽,用地球做就像谷歌地球似的) (21) Log-Polar极坐标变换 (22) 对图像进行形态学操作(图像的开闭,腐蚀和膨胀运算) (24) 用不同的核进行图像的二维滤波 (27) 图像域的填充 (30) 寻找轮廓实现视频流的运动目标检测(超推荐一下) (35) 采用金字塔方法进行图像分割 (40) 图像的亮度变换 (43) 单通道图像的直方图 (46) 计算和显示彩色图像的二维色调-饱和度图像 (48) 图像的直方图均匀化 (50) 用Hongh变换检测线段 (52) 利用Hough变换检测圆(是圆不是椭圆) (57) 距离变换 (59) 椭圆曲线拟合 (64) 由点集序列或数组创建凸外形 (68) Delaunay三角形和V oronoi划分的迭代式构造 (71) 利用背景建模检测运动物体(推荐) (78) 运动模板检测(摄像头) (81) 显示如何利用Camshift算法进行彩色目标的跟踪 (86) 基于opencv的use摄像头视频采集程序 准备工作:你得把opencv库装到电脑上,并把各种头文件,源文件,lib库都连到vc上,然后设置一下系统环境变量,这里这方面就不说了,好像我前面的文章有说过,不懂也可百度一下。 建立一个基于WIN32控制台的工程CameraUSB,在新建一个c++元文件,写代码: #include "cxcore.h" #include "cvcam.h" #include "windows.h" #include "highgui.h"

OpenCV下肤色检测代码

1.void cvSkinSegment(IplImage* img, IplImage* mask){ 2. CvSize imageSize = cvSize(img->width, img->height); 3. IplImage *imgY = cvCreateImage(imageSize, IPL_DEPTH_8U, 1); 4. IplImage *imgCr = cvCreateImage(imageSize, IPL_DEPTH_8U, 1); 5. IplImage *imgCb = cvCreateImage(imageSize, IPL_DEPTH_8U, 1); 6. 7. 8. IplImage *imgYCrCb = cvCreateImage(imageSize, img->depth, img->nChannels ); 9. cvCvtColor(img,imgYCrCb,CV_BGR2YCrCb); 10. cvSplit(imgYCrCb, imgY, imgCr, imgCb, 0); 11.int y, cr, cb, l, x1, y1, value; 12. unsigned char *pY, *pCr, *pCb, *pMask; 13. 14. pY = (unsigned char *)imgY->imageData; 15. pCr = (unsigned char *)imgCr->imageData; 16. pCb = (unsigned char *)imgCb->imageData; 17. pMask = (unsigned char *)mask->imageData; 18. cvSetZero(mask); 19. l = img->height * img->width; 20.for (int i = 0; i < l; i++){ 21. y = *pY; 22. cr = *pCr; 23. cb = *pCb; 24. cb -= 109; 25. cr -= 152 26. ; 27. x1 = (819*cr-614*cb)/32 + 51; 28. y1 = (819*cr+614*cb)/32 + 77; 29. x1 = x1*41/1024; 30. y1 = y1*73/1024; 31. value = x1*x1+y1*y1; 32.if(y<100) (*pMask)=(value<700) ? 255:0; 33.else (*pMask)=(value<850)? 255:0; 34. pY++; 35. pCr++; 36. pCb++; 37. pMask++; 38. } 39. cvReleaseImage(&imgY); 40. cvReleaseImage(&imgCr); 41. cvReleaseImage(&imgCb); 42. cvReleaseImage(&imgYCrCb);

OpenCV Haar人脸检测的代码分析

OpenCV Haar人脸检测的代码分析 /* cascade or tree of stage classifiers */ int flags; /* signature */ int count; /* number of stages */ CvSize orig_window_size; /* original object size (the cascade is trained for) */ /* these two parameters are set by cvSetImagesForHaarClassifierCascade */ CvSize real_window_size; /* current object size */ double scale; /* current scale */ CvHaarStageClassifier* stage_classifier; /* array of stage classifiers */ CvHidHaarClassifierCascade* hid_cascade; /* hidden optimized representation of the cascade, created by cvSetImagesForHaarClassifierCascade */ 所有的结构都代表一个级联boosted Haar分类器。级联有下面的等级结构: Cascade: Stage1: Classifier11: Feature11 Classifier12:

Feature12 ... Stage2: Classifier21: Feature21 ... ... 全部等级可以手农构修,也可以应用函数cvLoadHaarClassifierCascade从已有的磁盘文件或嵌进式基中导进。特征检测用到的函数: cvLoadHaarClassifierCascade 从文件中装载练习佳的级联分类器或者从OpenCV中嵌入的分类器数据库中导入 CvHaarClassifierCascade* cvLoadHaarClassifierCascade( const char* directory, CvSize orig_window_size ); directory :练习的级联分类器的门路 orig_window_size:级联分类器训练中采取的检测目标的尺寸。由于这个信息没有在级联分类器中存储,所有要共同指出。 函数cvLoadHaarClassifierCascade 用于从文件中装载训练赖的利用海尔特点的级联分类器,或者从OpenCV中嵌入的分类器数据库中导入。分类器的训练可以利用函数haartraining(具体观察

基于Opencv的视频人脸检测程序源代码(可运行)

1.打开Microsoft Visual Studio 2008,新建一个Win32控制台项目; 2.配置好项目的包含文件和库文件; 3.将……\OpenCV\data\haarcascades中的haarcascade_frontalface_alt.xml拷贝到所建项目的文件夹中; 4.然后添加代码: #include"stdafx.h" #include"cv.h" #include"highgui.h" #include int_tmain(int argc, _TCHAR* argv[]) { CvCapture* capture=0; /*初始化一个视频捕获操作。告诉底层的捕获api我想从Capture1.avi中捕获图片,底层api将检测并选择相应的解码器并做好准备工作*/ capture = cvCaptureFromFile( "F:\\1.avi"); //设置要读的视频(avi格式) static CvMemStorage* storage = 0; static CvHaarClassifierCascade* cascade = 0; cascade = (CvHaarClassifierCascade*)cvLoad("haarcascade_frontalface_alt.xml",0,0,0); if( !cascade || !capture ) return -1; storage = cvCreateMemStorage(0); /*创建一个窗口,用“Video”作为窗口的标识符*/ cvNamedWindow( "Video",1); /*如果初始化失败,那么capture为空指针,程序停止,否则进入捕获循环*/ if( capture ) { for(;;) { IplImage* frame = cvQueryFrame( capture ); IplImage* img = NULL; CvSeq* faces; if( !frame ) break; img = cvCloneImage(frame);

相关文档
相关文档 最新文档