使用 emgucv (c#) 查找人脸的位置
Posted
技术标签:
【中文标题】使用 emgucv (c#) 查找人脸的位置【英文标题】:Finding the position of a face using emgucv (c#) 【发布时间】:2020-07-26 03:08:18 【问题描述】:我的代码能够检测到人脸,然后在它找到人脸的地方放置一个框,但我希望获得它放置的框的位置。 任何位置都很好,因为我可以为特定位置调整其他代码。
我怎样才能从中获得职位?
非常感谢
private void Device_NewFrame(object sender, NewFrameEventArgs eventArgs)
Bitmap bitmap = (Bitmap)eventArgs.Frame.Clone();
Image<Bgr, byte> grayImage = new Image<Bgr, byte>(bitmap);
Rectangle[] rectangles = cascadeClassifier1.DetectMultiScale(grayImage, 1.2, 1);
foreach (Rectangle rectangle in rectangles)
using (Graphics graphics = Graphics.FromImage(bitmap))
using (Pen pen = new Pen(Color.Red, 1))
graphics.DrawRectangle(pen, rectangle);
plc.Image = bitmap;
【问题讨论】:
【参考方案1】:可以获取矩形的左上角x和y坐标,以及宽度和高度。
//Get the top left cord
int rectX = rectangle.X;
int rectY = rectangle.Y;
//Get the width and height of the rectangle
int rectWidth = rectangle.Width;
int rectHeight = rectangle.Height;
使用上述值,您可以找到矩形其他三个点的线。
//The top right cord
int topRightX = rectX + rectWidth;
int topRightY = rectY;
//The bottom left cord
int bottomX = rectX;
int bottomY = rectY + rectHeight;
//The bottom right cord
int bottomRightX = rectX + rectWidth;
int bottomRightY = rectY + rectHeight;
【讨论】:
感谢有关如何获得积分的帮助。但是,我不明白为什么我需要添加 rectHeight。如果rectY是矩形顶部的高度,你不会减去高度得到矩形的底部吗? 在 Opencv 和 Emgucv 中,像素和坐标位置用于坐标系中的 IV 象限,但 Y 值始终为正。两个库都使用左上角坐标作为它们的参考点,当你从图像的顶部到图像的底部时,你正在增加你的 Y 坐标。我知道这听起来有点奇怪,但就像我之前所说的,我只是认为它使用 IV 象限,但所有值都是正数。以上是关于使用 emgucv (c#) 查找人脸的位置的主要内容,如果未能解决你的问题,请参考以下文章
C# - Emgu CV - 人脸识别代码在 EigenObjectRecognizer 处停止执行并无错误退出
C# - Emgu Cv - 人脸识别 - 将保存到 Access 数据库的人脸训练集作为二进制文件加载到 EigenObjectRecognizer 中以进行人脸识别