下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、OpenCV学习笔记3:找出人脸,同时比较两张图片中的人脸相似度分类:OpenCV2012-11-12 18:505394人阅读评论(4)收藏举报 终于到了有实际应用的功能了,有2张图片,里面各有一个人脸,我的目的是比较这两个人脸的相似度,这里用到了facedetect的功能,还有图像转换,图像剪切,以及直方图的比较。具体流程是: 1。分别用facedetect功能将两张图片中的人脸检测出来 2。将人脸部分的图片剪切出来,存到两张只有人脸的图片里。 3。将这两张人脸图片转换成单通道的图像 4。使用直方图比较这两张单通道的人脸图像,得出相似度。 这里对图的要求还是比较高的,光线和姿势不能有差别,
2、脸的垂直或者左右角度偏差就会影响比较,但和两张图片的大小关系不大,本人觉得较适合于证件照的对比。下面是代码,其中haarcascade_frontalface_alt.xml是opencv里facedetect例子用的样本。 比较的是srcImage和targetImage对应的文件.还有下面是IplImage和Mat混用,纯当熟悉这两个类了。cppview plaincopy1. cppview plaincopy1. cppview plaincopy1. #includeopencv/cv.hpp2. #includeopencv2/objdetect/objdetect.hpp3. #
3、includeopencv2/highgui/highgui.hpp4. #includeopencv2/imgproc/imgproc.hpp5. 6. #include7. #include8. 9. usingnamespacestd;10. usingnamespacecv;11. 12. StringcascadeName=D:OpenCV-2.4.2datahaarcascadeshaarcascade_frontalface_alt.xml;13. 14. IplImage*cutImage(IplImage*src,CvRectrect)15. cvSetImageROI(sr
4、c,rect);16. IplImage*dst=cvCreateImage(cvSize(rect.width,rect.height),17. src-depth,18. src-nChannels);19. 20. cvCopy(src,dst,0);21. cvResetImageROI(src);22. returndst;23. 24. 25. IplImage*detect(Mat&img,CascadeClassifier&cascade,doublescale)26. 27. inti=0;28. doublet=0;29. vectorfaces;30. Matgray,s
5、mallImg(cvRound(img.rows/scale),cvRound(img.cols/scale),CV_8UC1);31. 32. cvtColor(img,gray,CV_BGR2GRAY);33. resize(gray,smallImg,smallImg.size(),0,0,INTER_LINEAR);34. equalizeHist(smallImg,smallImg);35. 36. t=(double)cvGetTickCount();37. cascade.detectMultiScale(smallImg,faces,38. 1.3,2,CV_HAAR_SCAL
6、E_IMAGE,39. Size(30,30);40. t=(double)cvGetTickCount()-t;41. printf(detectiontime=%gmsn,t/(double)cvGetTickFrequency()*1000.);42. for(vector:const_iteratorr=faces.begin();r!=faces.end();r+,i+)43. 44. IplImage*temp=cutImage(&(IplImage(img),cvRect(r-x,r-y,r-width,r-height);45. returntemp;46. 47. 48. r
7、eturnNULL;49. 50. /画直方图用51. intHistogramBins=256;52. floatHistogramRange12=0,255;53. float*HistogramRange1=&HistogramRange10;54. intCompareHist(IplImage*image1,IplImage*image2)55. 56. IplImage*srcImage;57. IplImage*targetImage;58. if(image1-nChannels!=1)59. srcImage=cvCreateImage(cvSize(image1-width
8、,image1-height),image1-depth,1);60. cvCvtColor(image1,srcImage,CV_BGR2GRAY);61. else62. srcImage=image1;63. 64. 65. if(image2-nChannels!=1)66. targetImage=cvCreateImage(cvSize(image2-width,image2-height),srcImage-depth,1);67. cvCvtColor(image2,targetImage,CV_BGR2GRAY);68. else69. targetImage=image2;
9、70. 71. 72. CvHistogram*Histogram1=cvCreateHist(1,&HistogramBins,CV_HIST_ARRAY,HistogramRange);73. CvHistogram*Histogram2=cvCreateHist(1,&HistogramBins,CV_HIST_ARRAY,HistogramRange);74. 75. cvCalcHist(&srcImage,Histogram1);76. cvCalcHist(&targetImage,Histogram2);77. 78. cvNormalizeHist(Histogram1,1)
10、;79. cvNormalizeHist(Histogram2,1);80. 81. /CV_COMP_CHISQR,CV_COMP_BHATTACHARYYA这两种都可以用来做直方图的比较,值越小,说明图形越相似82. printf(CV_COMP_CHISQR:%.4fn,cvCompareHist(Histogram1,Histogram2,CV_COMP_CHISQR);83. printf(CV_COMP_BHATTACHARYYA:%.4fn,cvCompareHist(Histogram1,Histogram2,CV_COMP_BHATTACHARYYA);84. 85. 86.
11、 /CV_COMP_CORREL,CV_COMP_INTERSECT这两种直方图的比较,值越大,说明图形越相似87. printf(CV_COMP_CORREL:%.4fn,cvCompareHist(Histogram1,Histogram2,CV_COMP_CORREL);88. printf(CV_COMP_INTERSECT:%.4fn,cvCompareHist(Histogram1,Histogram2,CV_COMP_INTERSECT);89. 90. cvReleaseHist(&Histogram1);91. cvReleaseHist(&Histogram2);92. i
12、f(image1-nChannels!=1)93. cvReleaseImage(&srcImage);94. 95. if(image2-nChannels!=1)96. cvReleaseImage(&targetImage);97. 98. return0;99. 100. StringsrcImage=d:ldh1.jpg;101. StringtargetImage=d:ldh5.jpg;102. intmain(intargc,char*argv)103. 104. CascadeClassifiercascade;105. namedWindow(image1);106. nam
13、edWindow(image2);107. if(!cascade.load(cascadeName)108. 109. return-1;110. 111. 112. MatsrcImg,targetImg;113. IplImage*faceImage1;114. IplImage*faceImage2;115. srcImg=imread(srcImage);116. targetImg=imread(targetImage);117. faceImage1=detect(srcImg,cascade,1);118. if(faceImage1=NULL)119. return-1;120. 121. /cvSaveImage(d:face.jpg,faceImage1,0);122. faceImage2=detect(targetImg,cascade,1);123. if(faceImage2=NULL)124. return-1;125. 126. /cvSaveImage(d:face1.jpg,faceImage2,0);127
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中职大气污染化学和物理(污染治理技术)试题及答案
- 2025年大学大一(经济学基础)经济学综合测试试题及答案
- 2025年注册会计师(CPA)考试 会计科目押题试卷:历2025年真题深度解析及答案
- 2025 小学二年级科学下册了解植物根的生长实验报告课件
- 社群营销培训
- 夏津第一中学2025~2026学年高一上学期1月份月考政治试题
- 湖南省株洲市2025-2026学年高三教学质量统一检测(一模)化学试题(含答案)
- 2025广东佛山市高明建设投资集团有限公司(第十五期)招聘2人备考题库含答案详解
- 2025广东佛山禅城区南庄镇吉利中学招聘数学地理临聘教师备考题库及答案详解(新)
- 2026年陕西师范大学少数民族学生专职辅导员招聘备考题库及答案详解(考点梳理)
- 深度解析(2026)《MZT 238-2025 监测和定位辅助器具 毫米波雷达监测报警器》
- 2025-2026学年小学美术湘美版(2024)四年级上册期末练习卷及答案
- 办公用品、耗材采购服务投标方案
- 辽宁省大连市2026届高三上学期1月双基模拟考试语文试题(含答案)
- 2025年肿瘤科年度工作总结汇报
- 浙江省宁波市2025-2026学年八年级上数学期末自编模拟卷
- (正式版)DB51∕T 3336-2025 《零散天然气橇装回收安全规范》
- 初三数学备课组年终工作总结
- 2025年高职工业机器人(机器人编程调试)试题及答案
- 湖南名校联考联合体2026届高三年级1月联考物理试卷+答案
- GB/T 19466.3-2025塑料差示扫描量热(DSC)法第3部分:熔融和结晶温度及热焓的测定
评论
0/150
提交评论