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