Получение ошибки: 'Изображение'не содержит определения' DetectHaarCascade 'и недоступного метода расширения' DetectHaarCascade ' - PullRequest
0 голосов
/ 22 сентября 2019

Я занимаюсь проектом по обнаружению лиц с использованием EmguCV в C #. Моя цель - обнаруживать лица с помощью веб-камеры.Тем временем я получаю некоторые ошибки.

Я включил все зависимости EmguCV и OpenCV.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Emgu.CV;
using Emgu.Util;
using Emgu.CV.Structure;
using Emgu.CV.CvEnum;

namespace demo
{
    public partial class Form1 : Form
    {
        private VideoCapture cap;
        private CascadeClassifier haar;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // passing 0 gets zeroth webcam
            cap = new VideoCapture(0);
            // adjust path to find your xml
            haar = new CascadeClassifier("haarcascade_frontalface_alt2.xml");
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            using (Image<Bgr, byte> nextFrame = cap.QueryFrame().ToImage<Bgr, Byte>())
            {
                if (nextFrame != null)
                {
                    // there's only one channel (greyscale), hence the zero index
                    //var faces = nextFrame.DetectHaarCascade(haar)[0];
                    Image<Gray, byte> grayframe = nextFrame.Convert<Gray, byte>();
                    var faces =
                            grayframe.DetectHaarCascade(haar, 1.4, 4,HAAR_DETECTION_TYPE.DO_CANNY_PRUNING,new Size(nextFrame.Width / 8, nextFrame.Height / 8))[0];
                    foreach (var face in faces)
                    {
                        nextFrame.Draw(face.rect, new Bgr(0, double.MaxValue, 0), 3);
                    }
                    pictureBox1.Image = nextFrame.ToBitmap();
                }
            }
        }
    }
}

Я попытался заменить DetectHaarcascade на Detectmultiscale.

ErrorCS1061: «Image» не содержит определения для «DetectHaarCascade», и нет доступного метода расширения «DetectHaarCascade», принимающего первый аргумент типа «Image» (вы пропустили директиву using или ссылку на сборку?)

ErrorCS0103: имя 'HAAR_DETECTION_TYPE' не существует в текущем контексте

ErrorCS1579: оператор foreach не может работать с переменными типа '?'потому что '?'не содержит общедоступного определения экземпляра для GetEnumerator

1 Ответ

0 голосов
/ 22 сентября 2019

Попробуйте добавить следующие библиотеки:

using Emgu.CV.UI;
using System.Drawing;
using System.Diagnostics;
...