利用openCV中的cvCanny函数检测人脸的边缘
生活随笔
收集整理的這篇文章主要介紹了
利用openCV中的cvCanny函数检测人脸的边缘
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前幾天按照學校的要求做一個項目設計,指導老師讓完成一個邊緣檢測的程序,用來提取出人臉的輪廓。于是將相關過程記錄下來。
提取邊緣,可以直接使用cvCanny函數。
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 當中的小閾值用來控制邊緣連接,大的閾值用來控制強邊緣的初始分割。
#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得到的圖像,左側圖像為將識別出的邊緣標記到原圖像上得到的圖像) 2015年3月17日 ? 西安交通大學轉載請注明出處。
實驗結果如下圖(右側圖像為用CVCanny得到的圖像,左側圖像為將識別出的邊緣標記到原圖像上得到的圖像) 2015年3月17日 ? 西安交通大學轉載請注明出處。
總結
以上是生活随笔為你收集整理的利用openCV中的cvCanny函数检测人脸的边缘的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win7 64位,vs2010(visu
- 下一篇: 检测生成.xml文件的效果:以人脸xml