您的位置:首页 > 运维架构

利用openCV中的cvCanny函数检测人脸的边缘

2015-03-17 21:00 411 查看
前几天按照学校的要求做一个项目设计,指导老师让完成一个边缘检测的程序,用来提取出人脸的轮廓。于是将相关过程记录下来。
提取边缘,可以直接使用cvCanny函数。
[code]cvCanny是开放计算机视觉(OpenCV)库库函数之一,用于对图像的边缘检测(采用canny算法)。
void cvCanny( const CvArr* image,CvArr* edges,double threshold1,double threshold2, int aperture_size=3 );image 输入单通道图像(可以是彩色图像)对于多通道的图像可以用cvCvtColor()修改。edges 输出的边缘图像 ,也是单通道的,但是是黑白的threshold1 第一个阈值threshold2 第二个阈值aperture_size Sobel 算子内核大小函数 cvCanny 采用 Canny 算法发现输入图像的边缘而且在输出图像中标识这些边缘。threshold1和threshold2 当中的小阈值用来控制边缘连接,大的阈值用来控制强边缘的初始分割。[/code]
#include "stdafx.h"#include <cv.h>#include <highgui.h>#include <math.h>int main(int argc, char** argv){const char* filename = argc >= 2 ? argv[1] : "jobs.jpg";IplImage* src = cvLoadImage( filename, 0 );IplImage* dst;CvMemStorage* storage = cvCreateMemStorage(0);CvSeq* lines = 0;int i;if( !src )return -1;dst = cvCreateImage( cvGetSize(src), 8, 1 );//小阈值用来控制边缘连接,大的阈值用来控制强边缘的初始分割cvCanny( src, dst, 50,200, 3 );uchar *data_src;uchar *data_dst;data_src=(uchar *)src->imageData;data_dst=(uchar *)dst->imageData;for(int i=0;i<dst->height;i++){for(int j=0;j<dst->width;j++){if(data_dst[i*dst->widthStep+j*dst->nChannels]==(uchar)255)data_src[i*src->widthStep+j*src->nChannels]=(uchar)255;}}cvNamedWindow( "Source", 1 );//cvShowImage( "Source", color_dst );cvShowImage( "Source", src );cvNamedWindow( "Hough", 1 );cvShowImage( "Hough", dst );cvWaitKey(0);return 0;}
实验结果如下图(右侧图像为用CVCanny得到的图像,左侧图像为将识别出的边缘标记到原图像上得到的图像)[/code]
关于此方面大家还有什么问题,欢迎留言指正,也欢迎用邮箱和我联系。我的联系方式bianxingjingang139@126.com2015年3月17日   西安交通大学转载请注明出处。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: