完整opencv(emgucv)人脸、检测、采集、识别、匹配、对比
//成对几何直方图匹配
public static string MatchHist()
{
string haarXmlPath = @"haarcascade_frontalface_alt_tree.xml";
HaarCascade haar = new HaarCascade(haarXmlPath);
int[] hist_size = new int[1] { 256 };//建一个数组来存放直方图数据
//IntPtr img1 = CvInvoke.cvLoadImage("", Emgu.CV.CvEnum.LOAD_IMAGE_TYPE.CV_LOAD_IMAGE_ANYCOLOR); //根据路径导入图像
//准备轮廓
Image<Bgr, Byte> image1 = new Image<Bgr, byte>("D:\\code\\picture\\frunck.jpg");
Image<Bgr, Byte> image2 = new Image<Bgr, byte>("D:\\code\\picture\\lena.jpg");
MCvAvgComp[] faces = haar.Detect(image1.Convert<Gray, byte>(), 1.4, 1, Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING, new Size(20, 20), Size.Empty);
MCvAvgComp[] faces2 = haar.Detect(image2.Convert<Gray, byte>(), 1.4, 1, Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING, new Size(20, 20), Size.Empty);
int l1 = faces.Length;
int l2 = faces2.Length;
image1 = image1.Copy(faces[0].rect);
image2 = image2.Copy(faces2[0].rect);
Image<Gray, Byte> imageGray1 = image1.Convert<Gray, Byte>();
Image<Gray, Byte> imageGray2 = image2.Convert<Gray, Byte>();
Image<Gray, Byte> imageThreshold1 = imageGray1.ThresholdBinaryInv(new Gray(128d), new Gray(255d));
Image<Gray, Byte> imageThreshold2 = imageGray2.ThresholdBinaryInv(new Gray(128d), new Gray(255d));
//Contour<Point> contour1 = imageThreshold1.FindContours(Emgu.CV.CvEnum.CHAIN_APPROX_METHOD.CV_CHAIN_APPROX_SIMPLE, Emgu.CV.CvEnum.RETR_TYPE.CV_RETR_EXTERNAL);
Contour<Point> contour1 = imageThreshold1.FindContours();
Contour<Point> contour2 = imageThreshold2.FindContours();
IntPtr HistImg1 = CvInvoke.cvCreateHist(1, hist_size, Emgu.CV.CvEnum.HIST_TYPE.CV_HIST_ARRAY, null, 1); //创建一个空的直方图
IntPtr HistImg2 = CvInvoke.cvCreateHist(1, hist_size, Emgu.CV.CvEnum.HIST_TYPE.CV_HIST_ARRAY, null, 1);
//CvInvoke.cvHaarDetectObjects();
IntPtr[] inPtr1 = new IntPtr[1] { imageThreshold1 };
IntPtr[] inPtr2 = new IntPtr[1] { imageThreshold2 };
CvInvoke.cvCalcHist(inPtr1, HistImg1, false, IntPtr.Zero); //计算inPtr1指向图像的数据,并传入HistImg1中
CvInvoke.cvCalcHist(inPtr2, HistImg2, false, IntPtr.Zero);
Stopwatch sw = new Stopwatch();
sw.Start();
double compareResult;
Emgu.CV.CvEnum.HISTOGRAM_COMP_METHOD compareMethod = Emgu.CV.CvEnum.HISTOGRAM_COMP_METHOD.CV_COMP_BHATTACHARYYA;
CvInvoke.cvNormalizeHist(HistImg1, 1d); //直方图对比方式
CvInvoke.cvNormalizeHist(HistImg2, 1d);
compareResult = CvInvoke.cvCompareHist(HistImg1, HistImg2, compareMethod);
//compareResult = CvInvoke.cvMatchShapes(HistImg1, HistImg2, Emgu.CV.CvEnum.CONTOURS_MATCH_TYPE.CV_CONTOURS_MATCH_I3, 1d);
sw.Stop();
double time = sw.Elapsed.TotalMilliseconds;
return string.Format("成对几何直方图匹配(匹配方式:{0}),结果:{1:F05},用时:{2:F05}毫秒\r\n", compareMethod.ToString("G"), compareResult, time);
}
完整opencv(emgucv)人脸、检测、采集、识别、匹配、对比相关推荐
- 基于opencv的人脸检测与识别(python)(1)
基于opencv的人脸检测与识别(python语言)(1) 人脸检测和识别技术就目前而言,已经相对成熟,各类算法层出不穷,这都归功于各位奋斗在一线的大佬的努力(站在巨人的肩膀上的感觉就是爽).本文是参 ...
- opencv(人脸检测和识别)
Opencv的人脸检测函数,定义了具体可跟踪对象类型的数据文件. Haar级联分类器,通过对比分析相邻图像区域来判断给定图像或子图像与已知对象是否匹配. 两个图像的相似程度可以通过它们对应特征的欧式距 ...
- 【OpenCV】人脸检测和识别
文章目录 前言 一.人脸检测 1.基于Haar的人脸检测 2.基于深度学习的人脸检测 二.人脸识别 1.特征脸EigenFaces 2.人鱼脸FisherFaces 3.局部二进制编码直方图LBPH ...
- pytorch 实现人脸检测与识别
pytorch + opencv 实现人脸检测与识别 准备工作 人脸检测 opencv实现人脸检测 卷积神经网络 CNN 实现人脸检测 数据导入 CNN模型训练 人脸检测 存在的问题 人脸识别 获取数 ...
- python3项目源代码下载_人脸检测和识别 源代码 下载-opencv3+python3.6完整实战项目源代码 识别视频《欢乐颂》中人物,-opencv3《欢乐颂》...
人脸检测和识别 源代码 下载-opencv3+python3.6完整实战项目源代码 识别视频<欢乐颂>中人物,-opencv3<欢乐颂> 效果图 源代码import os im ...
- opencv 训练人脸对比_Page21-树莓派4B人脸检测与识别(opencv)
申明:本系列专栏相关说明与镜像包.源码等: 塔图:Page00-本系列实验记录说明zhuanlan.zhihu.com 一.人脸检测(后续有时间再补录个操作视频吧) 人脸识别的先决在于先进行人脸检测 ...
- Qt之OpenCV人脸检测以及识别
简介 最近做了一个人脸检测以及识别的程序,很多的文章都有比较详细的叙述,可以自行查找.但是个人觉得大部分文章都太细致了以至于初学者无法快速领会主干(不是否认质量),是侧重点问题.所以结合我遇到了一些问 ...
- OpenCV Dbt人脸检测Dbt face detection的实例(附完整代码)
OpenCV相 Dbt人脸检测Dbt face detection的实例 OpenCV Dbt人脸检测Dbt face detection的实例 OpenCV Dbt人脸检测Dbt face dete ...
- 【OpenCV实战】OpenCV实现人脸检测详解(含代码)
OpenCV中有许多可以进行人脸.人眼检测的特征文件,今天我们利用OpenCV中自带的特征文件haarcascade_frontalface_default.xml来进行人脸检测. [OpenCV实战 ...
最新文章
- 关于人工智能工程可能不知的7件事
- csapp 大作业 hello的一生
- mysql数据库的增删改查命令_MySQL 初识别语句,数据库、表、行的增删改查
- C++中的空类,编译器默认可以产生哪些成员函数
- Shell脚本监控专线Network并SendEmail报警
- display:inline-block 间隙
- python数据分析特训营课件,Python数据分析PPT学习课件
- LVS和Keeplive
- 浙江大学黄杨思博计算机学院,浙江大学节能减排社会实践与科技竞赛成功举行.DOC...
- ArcGIS:土地利用变化模式图绘制,土地利用转移矩阵
- 解决:应用程序无法启动,因为应用程序的并行配置不正确
- 『Android开源控件』Banner广告图片轮播控件
- 服务器系统做个备份吗,服务器操作系统能做备份吗
- 健壮F.T.+新裸金属重磅发布,全新升级版ZStack加速新基建
- 积目服务器维护,搭建经济高效的制作网络服务器群试验平台
- 环境参数智能监测站设计(说明书篇)
- OA办公系统,推动企业管理革新
- 5.8G存在感应雷达模块,雷达智能感应灯应用,多普勒雷达技术发展
- 【数据库系统】嵌入式SQL语言查询编程
- 90后电子工程师暴力拆解“华强北版AirPods”
热门文章
- linux 中文文件名不能下载不了,linux 64位系统 mod_encoding解决中文文件名不能下载问题...
- c语言strchr的用法,C 库函数 - strchr()
- flask post json_【python:flask-SocketIO】网络通信框架简单了解
- python定时任务crontab_【Python】Linux crontab定时任务配置方法(详解)
- 交换排序图解_排序算法学习分享(二)交换排序---冒泡排序与快速排序
- 干货 | extern的用法解析
- C编程实践:简单的通讯录
- 一位嵌入式工程师,硬核单片机编程思想!
- java百度地图添加标注_调取百度地图接口,实现取自己的实时位置,然后可以在百度地图上添加信息标注...
- 计算机专业高校鄙视链,清华大学“鄙视链”,本科生看不起研究生?本科非清华不算清华人...