使用 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#) 查找人脸的位置的主要内容,如果未能解决你的问题,请参考以下文章

图像处理 - 查找轮廓 EmguCv

C# - Emgu CV - 人脸识别代码在 EigenObjectRecognizer 处停止执行并无错误退出

在使用 C# 语言进行人脸检测方面需要帮助 [关闭]

C# - Emgu Cv - 人脸识别 - 将保存到 Access 数据库的人脸训练集作为二进制文件加载到 EigenObjectRecognizer 中以进行人脸识别

初步了解C#版图像处理库emgucv

EMgucv 保存从网络摄像头检测到的多张人脸