在使用非商业许可证的EmguCV 3.1.X(从Nuget安装)中,我有这个代码,我从is undefined behaviour获得并且工作正常:
public static dynamic GetValue(this UMat mat, int row, int col)
{
var value = CreateElement(mat.Depth);
Marshal.Copy(mat.ToMat(AccessType.Read).DataPointer + (row * mat.Cols + col) * mat.ElementSize, value, 0, 1);
return value[0];
}
我现在想切换到EmguCV 3.3.X的商业版本(从Nuget安装),因此必须将此代码更改为:
public static dynamic GetValue(this UMat mat, int row, int col)
{
var value = CreateElement(mat.Depth);
Marshal.Copy(mat.GetMat(AccessType.Read).DataPointer + (row * mat.Cols + col) * mat.ElementSize, value, 0, 1);
return value[0];
}
由于没有明显原因,此代码无异常挂起或在线上发生任何事情:
Marshal.Copy(mat.GetMat(AccessType.Read).DataPointer + (row * mat.Cols + col) * mat.ElementSize, value, 0, 1);
我做错了什么或者这可能是EmguCV中的错误?
答案 0 :(得分:0)
我没有“CreateElement”功能,所以我使用以下代码进行测试。它应该是类似的。
UMat u = new UMat(new Size(480, 320), DepthType.Cv8U, 1);
u.SetTo(new MCvScalar(100));
byte[] value = new byte[1];
int row = 100;
int col = 200;
using (Mat m = u.GetMat(AccessType.Read))
{
IntPtr ptr = m.DataPointer + row * m.Step + col * m.ElementSize;
Marshal.Copy(ptr, value, 0, 1);
}
使用Emgu CV商业版本nuget存储库中的v3.3.0.2824版本进行测试,无需挂起即可正常工作。如果您仍然遇到同样的问题,请上传完整的代码,我会看一下。
感谢。