C#+OpenCV进阶(一)_人体识别
1.C#+OpenCV学习笔记(目录)-目录2.C#+OpenCV基础(一)_加载创建复制保存图片3.C#+OpenCV基础(二)_灰度化二值化4.C#+OpenCV基础(三)_修改高宽剪切拼接缩放5.C#+OpenCV基础(四)_旋转翻转透视6.C#+OpenCV基础(五)_添加边框7.C#+OpenCV基础(六)_均值中值高斯双边滤波8.C#+OpenCV基础(七)_图像金字塔9.C#+OpenCV基础(八)_获取修改图片亮度10.C#+OpenCV基础(九)_拆分合并图层11.C#+OpenCV基础(十)_灰度变化与直方图12.C#+OpenCV基础(十一)_图片基础计算13.C#+OpenCV基础(十二)_图片形态学计算14.C#+OpenCV基础(十三)_图片白平衡矫正15.C#+OpenCV基础(十四)_绘制像素、图形、文字16.C#+OpenCV基础(十五)_图像的基础分割方法17.C#+OpenCV基础(十六)_识别圆、直线、斑点、轮廓18.C#+OpenCV基础(十七)_计算图片相似度19.C#+OpenCV基础(十八)_模版匹配
20.C#+OpenCV进阶(一)_人体识别
21.C#+OpenCV进阶(二)_文字识别22.C#+OpenCV进阶(三)_操作摄像头与视频文件23.C#+OpenCV进阶(四)_录屏24.C#+OpenCV实战(一)_图片简易角度矫正25.C#+OpenCV实战(二)_春天转秋天26.C#+OpenCV实战(三)_玉米粒计数27.C#+OpenCV实战(四)_特定钢板缺陷检测效果排名:Lbp < Haar < CNN
1、Lbp
/// <summary>
/// Lbp人脸识别
/// </summary>
public static Mat FaceDetection_Lbp(Mat mat)
{
var lbpCascade = new CascadeClassifier("model/lbpcascade_frontalface.xml");
Mat outMat = new Mat();
mat.CopyTo(outMat);
using (var gray = new Mat())
{
Cv2.CvtColor(outMat, gray, ColorConversionCodes.BGR2GRAY);
// 人脸识别
Rect[] faces = lbpCascade.DetectMultiScale(
gray, 1.1, 3, HaarDetectionTypes.ScaleImage, new OpenCvSharp.Size(30, 30));
// Render all detected faces
foreach (Rect face in faces)
{
// 画矩形
outMat.Rectangle(face, Scalar.Red, 2);
}
}
return outMat;
}
2、Haar
/// <summary>
/// Haar人脸识别1
/// haarcascade_frontalface_default.xml
/// </summary>
public static Mat FaceDetection_Haar(Mat mat)
{
var haarCascade = new CascadeClassifier("model/haarcascade_frontalface_default.xml");
Mat outMat = new Mat();
mat.CopyTo(outMat);
using (var gray = new Mat())
{
Cv2.CvtColor(outMat, gray, ColorConversionCodes.BGR2GRAY);
// 人脸识别
Rect[] faces = haarCascade.DetectMultiScale(
gray, 1.1, 3, HaarDetectionTypes.ScaleImage, new OpenCvSharp.Size(30, 30));
// Render all detected faces
foreach (Rect face in faces)
{
// 画矩形
outMat.Rectangle(face, Scalar.Red, 2);
}
}
return outMat;
}
/// <summary>
/// Haar人脸识别2
/// haarcascade_profileface.xml
/// </summary>
public static Mat FaceDetection_HaarProfileFace(Mat mat)
{
var haarCascade = new CascadeClassifier("model/haarcascade_profileface.xml");
Mat outMat = new Mat();
mat.CopyTo(outMat);
using (var gray = new Mat())
{
Cv2.CvtColor(outMat, gray, ColorConversionCodes.BGR2GRAY);
// 人脸识别
Rect[] faces = haarCascade.DetectMultiScale(
gray, 1.1, 3, HaarDetectionTypes.ScaleImage, new OpenCvSharp.Size(30, 30));
// Render all detected faces
foreach (Rect face in faces)
{
// 画矩形
outMat.Rectangle(face, Scalar.Red, 2);
}
}
return outMat;
}
/// <summary>
/// Haar眼睛识别
/// </summary>
public static Mat EyeDetection_Haar(Mat mat)
{
var haarCascade = new CascadeClassifier("model/haarcascade_eye.xml");
Mat outMat = new Mat();
mat.CopyTo(outMat);
using (var gray = new Mat())
{
Cv2.CvtColor(outMat, gray, ColorConversionCodes.BGR2GRAY);
// 眼睛识别
Rect[] faces = haarCascade.DetectMultiScale(
gray, 1.1, 3, HaarDetectionTypes.ScaleImage, new OpenCvSharp.Size(30, 30));
// Render all detected faces
foreach (Rect face in faces)
{
// 画矩形
outMat.Rectangle(face, Scalar.Red, 2);
}
}
return outMat;
}
/// <summary>
/// Haar嘴巴识别
/// </summary>
public static Mat MouthDetection_Haar(Mat mat)
{
var haarCascade = new CascadeClassifier("model/haarcascade_mcs_mouth.xml");
Mat outMat = new Mat();
mat.CopyTo(outMat);
using (var gray = new Mat())
{
Cv2.CvtColor(outMat, gray, ColorConversionCodes.BGR2GRAY);
// 眼睛识别
Rect[] faces = haarCascade.DetectMultiScale(
gray, 1.1, 3, HaarDetectionTypes.ScaleImage, new OpenCvSharp.Size(30, 30));
// Render all detected faces
foreach (Rect face in faces)
{
// 画矩形
outMat.Rectangle(face, Scalar.Red, 2);
}
}
return outMat;
}
/// <summary>
/// Haar微笑识别
/// </summary>
public static Mat SmileDetection_Haar(Mat mat)
{
var haarCascade = new CascadeClassifier("model/haarcascade_smile.xml");
Mat outMat = new Mat();
mat.CopyTo(outMat);
using (var gray = new Mat())
{
Cv2.CvtColor(outMat, gray, ColorConversionCodes.BGR2GRAY);
// 眼睛识别
Rect[] faces = haarCascade.DetectMultiScale(
gray, 1.1, 3, HaarDetectionTypes.ScaleImage, new OpenCvSharp.Size(30, 30));
// Render all detected faces
foreach (Rect face in faces)
{
// 画矩形
outMat.Rectangle(face, Scalar.Red, 2);
}
}
return outMat;
}
/// <summary>
/// Haar全身识别
/// </summary>
public static Mat FullbodyDetection_Haar(Mat mat)
{
var haarCascade = new CascadeClassifier("model/haarcascade_fullbody.xml");
Mat outMat = new Mat();
mat.CopyTo(outMat);
using (var gray = new Mat())
{
Cv2.CvtColor(outMat, gray, ColorConversionCodes.BGR2GRAY);
// 眼睛识别
Rect[] faces = haarCascade.DetectMultiScale(
gray, 1.1, 3, HaarDetectionTypes.ScaleImage, new OpenCvSharp.Size(30, 30));
// Render all detected faces
foreach (Rect face in faces)
{
// 画矩形
outMat.Rectangle(face, Scalar.Red, 2);
}
}
return outMat;
}
/// <summary>
/// Haar上身识别
/// </summary>
public static Mat UpperbodyDetection_Haar(Mat mat)
{
var haarCascade = new CascadeClassifier("model/haarcascade_upperbody.xml");
Mat outMat = new Mat();
mat.CopyTo(outMat);
using (var gray = new Mat())
{
Cv2.CvtColor(outMat, gray, ColorConversionCodes.BGR2GRAY);
// 眼睛识别
Rect[] faces = haarCascade.DetectMultiScale(
gray, 1.1, 3, HaarDetectionTypes.ScaleImage, new OpenCvSharp.Size(30, 30));
// Render all detected faces
foreach (Rect face in faces)
{
// 画矩形
outMat.Rectangle(face, Scalar.Red, 2);
}
}
return outMat;
}
/// <summary>
/// Haar下身识别
/// </summary>
public static Mat LowerbodyDetection_Haar(Mat mat)
{
var haarCascade = new CascadeClassifier("model/haarcascade_lowerbody.xml");
Mat outMat = new Mat();
mat.CopyTo(outMat);
using (var gray = new Mat())
{
Cv2.CvtColor(outMat, gray, ColorConversionCodes.BGR2GRAY);
// 眼睛识别
Rect[] faces = haarCascade.DetectMultiScale(
gray, 1.1, 3, HaarDetectionTypes.ScaleImage, new OpenCvSharp.Size(30, 30));
// Render all detected faces
foreach (Rect face in faces)
{
// 画矩形
outMat.Rectangle(face, Scalar.Red, 2);
}
}
return outMat;
}
3、CNN
/// <summary>
/// CNN人脸识别
/// </summary>
/// <returns></returns>
public static Mat FaceDetection_CNN(Mat mat)
{
const string configFile = "model/deploy.prototxt"; // Dnn参数
const string faceModel = "model/res10_300x300_ssd_iter_140000_fp16.caffemodel"; // Dnn人脸模型
Mat outMat = new Mat();
mat.CopyTo(outMat);
// 读图片
int matHeight = outMat.Rows;
int matWidth = outMat.Cols;
using (var faceNet = CvDnn.ReadNetFromCaffe(configFile, faceModel)) // Dnn初始化
{
using (var blob = CvDnn.BlobFromImage(outMat, 1.0,
new Size(300, 300), new Scalar(104, 117, 123), false, false)) // Dnn网络
{
faceNet.SetInput(blob, "data"); // 识别入参
using (var detection = faceNet.Forward("detection_out"))
{
using (var detectionMat = new Mat(detection.Size(2), detection.Size(3), MatType.CV_32F, detection.Ptr(0)))
{
for (int i = 0; i < detectionMat.Rows; i++)
{
float confidence = detectionMat.At<float>(i, 2);
if (confidence > 0.7) // 识别概率>0.7时
{
// 框选人脸
int x1 = (int)(detectionMat.At<float>(i, 3) * matWidth);
int y1 = (int)(detectionMat.At<float>(i, 4) * matHeight);
int x2 = (int)(detectionMat.At<float>(i, 5) * matWidth);
int y2 = (int)(detectionMat.At<float>(i, 6) * matHeight);
Cv2.Rectangle(outMat,
new OpenCvSharp.Point(x1, y1), new OpenCvSharp.Point(x2, y2),
new Scalar(0, 255, 0), 2, LineTypes.Link4);
}
}
return outMat;
}
}
}
}
}
本文来自博客园,作者:꧁执笔小白꧂,转载请注明原文链接:https://www.cnblogs.com/qq2806933146xiaobai/p/18295770
合集:
C#+机器视觉OpenCV
分类:
C#+机器视觉OpenCV
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
2023-07-11 Element-动态控制el-table的行的显示与隐藏
2019-07-11 javascript修改css样式表