Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用BlobFromImage时出现EmguCV访问冲突异常_C#_Emgucv - Fatal编程技术网

C# 使用BlobFromImage时出现EmguCV访问冲突异常

C# 使用BlobFromImage时出现EmguCV访问冲突异常,c#,emgucv,C#,Emgucv,我一直在尝试在EmguCV中实现姿势检测,但没有成功。 我用OpenCV在C++中有一个成功的程序。当我试图用C#翻译它时,我无法浏览“BlobFromImage”,因为我遇到了一个异常(“访问冲突”)。。。 我尝试了多种方法,我用x64编译,图像是正确的(我可以毫无问题地将其显示为图像)。在此之前,我使用的是Mat而不是UMat,但它是一样的。 Emgu版本:4.2.0.3662(也尝试了其他版本,仍然得到相同的错误。 如果有帮助,请参阅下面的代码: private void Prov

我一直在尝试在EmguCV中实现姿势检测,但没有成功。 我用OpenCV在C++中有一个成功的程序。当我试图用C#翻译它时,我无法浏览“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语言来做。
非常感谢

尝试将编译器更改为任何CPU,Emgucv有时在CPU编译时会造成麻烦。谢谢Aaron,问题是我无法在x86中使用它。如果不在OpenCL中使用GPU(在x64中工作)这将慢15倍,对我的应用程序来说太多了=\n尝试切换回Mat对象而不是UMat,我认为这两种变量类型之间实际上存在差异。我再次尝试了,但不幸的是,我仍然得到相同的异常。据我所知,UMat用于透明API,并且可以传输到GPU以实现更快的计算ting.尝试将编译器更改为任何CPU,当涉及到CPU编译时,Emgucv有时会是一个麻烦。谢谢Aaron,问题是我无法将其用于x86。如果不将GPU与OpenCL结合使用(在x64下工作)这将慢15倍,对我的应用程序来说太多了=\n尝试切换回Mat对象而不是UMat,我认为这两种变量类型之间实际上存在差异。我再次尝试了,但不幸的是,我仍然得到相同的异常。据我所知,UMat用于透明API,并且可以传输到GPU以实现更快的计算叮叮声。