如何解决使用 OpenCvSharp 绘制矩形
我正在尝试在视频中实时绘制检测到的人脸,但我似乎无法让它正常工作
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”
解决方法
我认为正确的方法应该是这样的:
...
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);
}
....
foreach 内部对当前 i
的引用的局部变量 Rect
。
Cv2.Rectangle
方法接受 OpenCvSharp.Point
。
您可以直接使用 Rect
变量:
foreach (Rect r in faces)
Cv2.Rectangle(image,(r.BottomRight.X,r.BottomRight.Y),(r.TopLeft.X,r.TopLeft.Y),1);
或者像这样使用 int
:
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),1);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。