首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用OpenCvSharp绘制矩形

用OpenCvSharp绘制矩形
EN

Stack Overflow用户
提问于 2021-05-19 12:46:39
回答 2查看 1.1K关注 0票数 1

我正试图在视频上画出现场检测到的面孔,但我似乎很难让它正常工作。

代码语言:javascript
复制
var haarcascade = new CascadeClassifier("C:/Users/NotMyName/Desktop/haar/haarcascade_frontalface_alt2.xml");
using (Window window = new Window("capture"))
using (Mat image = new Mat())//Image Buffer
{
    while (true)
    {
        Video.Read(image);
        var gray = image.CvtColor(ColorConversionCodes.RGB2GRAY);
        OpenCvSharp.Rect[] faces = haarcascade.DetectMultiScale(gray, 1.08, 2, HaarDetectionTypes.ScaleImage, new OpenCvSharp.Size(30,30));
        foreach (Rect i in faces)
        {
            Cv2.Rectangle(image, (faces[i].BottomRight.X, faces[i].BottomRight.Y), (faces[i].TopLeft.X, faces[i].TopLeft.Y), 255, 1);
        }

然而,编译器只是吐出错误。将faces数组直接传递给函数也不起作用。错误消息是(翻译自德语)。

错误CS0029类型"OpenCvSharp.Rect“不能转换为"int"

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-05-19 13:00:51

我认为正确的做法应该是:

代码语言:javascript
复制
...
foreach (Rect i in faces)
{
    Cv2.Rectangle(image, new Point(i.BottomRight.X, i.BottomRight.Y), new Point(i.TopLeft.X, i.TopLeft.Y), 255, 1);
}
....

前瞻引用当前i中的局部变量Rect

Cv2.Rectangle方法接受OpenCvSharp.Point

票数 3
EN

Stack Overflow用户

发布于 2021-05-19 13:09:58

您可以直接使用Rect变量:

代码语言:javascript
复制
foreach (Rect r in faces)
    Cv2.Rectangle(image, (r.BottomRight.X, r.BottomRight.Y), (r.TopLeft.X, r.TopLeft.Y), 255, 1);

或者使用int如下:

代码语言:javascript
复制
foreach (int i = 0; i < faces.Length; i++)
    Cv2.Rectangle(image, (faces[i].BottomRight.X, faces[i].BottomRight.Y), (faces[i].TopLeft.X, faces[i].TopLeft.Y), 255, 1);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67603572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档