Исключение нарушения доступа EmguCV при использовании BlobFromImage - PullRequest
1 голос
/ 25 марта 2020

Я долго пытался реализовать обнаружение поз в EmguCV безуспешно. У меня есть успешная программа на C ++ с использованием OpenCV. Когда я попытался перевести его в C#, я не смог go над «BlobFromImage», потому что я получил исключение («Нарушение прав доступа») ... Я пробовал несколько вещей, я компилирую в x64, и изображение правильное (я могу показать его без проблем как изображение). До этого я использовал Mat вместо UMat, но это то же самое. Версия Emgu: 4.2.0.3662 (также пробовал с другими версиями, но по-прежнему выдает ту же ошибку. Если это может помочь, см. Код ниже:

    private void Prova()
    {
        VideoCapture cap = new VideoCapture(videoFile);

        if (!cap.IsOpened)
        {
            Debug.WriteLine("Unable to connect to camera");
            return;
        }

        UMat frame;
        int frameWidth = (int)cap.GetCaptureProperty(Emgu.CV.CvEnum.CapProp.FrameWidth);
        int frameHeight = (int)cap.GetCaptureProperty(Emgu.CV.CvEnum.CapProp.FrameHeight);

        VideoWriter video = new VideoWriter("Output-Skeleton-Davide-MPI-GPU-168.avi", VideoWriter.Fourcc('M', 'J', 'P', 'G'), new System.Drawing.Size(frameWidth, frameHeight), false);

        Net net = Emgu.CV.Dnn.DnnInvoke.ReadNetFromCaffe("./pose_deploy_linevec.prototxt", "./pose_iter_160000.caffemodel");
        net.SetPreferableBackend(Emgu.CV.Dnn.Backend.Default);
        net.SetPreferableTarget(Emgu.CV.Dnn.Target.OpenCL);

        frame = cap.QueryFrame().GetUMat(Emgu.CV.CvEnum.AccessType.ReadWrite);

        if (frame.Rows != 0 && frame.Cols != 0)
        {
            // Exception thrown here...
            Emgu.CV.UMat inpBlob = Emgu.CV.Dnn.DnnInvoke.BlobFromImage(frame).GetUMat(Emgu.CV.CvEnum.AccessType.ReadWrite);

            net.SetInput(inpBlob);
        }
    }

Я знаю, что я мог бы вызвать код c ++ из C#, но я бы предпочел сделать это только из C#. Большое спасибо

...