【问题标题】:Can't acess Image<Bgr, byte>.Data property in C# emgucv无法访问 C# emgucv 中的 Image<Bgr, byte>.Data 属性
【发布时间】:2018-02-27 05:37:07
【问题描述】:

我可以使用Data[,,] 访问灰度图像的每个像素,但不能对 Bgr 图像进行访问。 我写了以下代码:

Image<Bgr, byte> currentFrame = capture.QueryFrame();
Image<Gray, byte> grayFrame = currentFrame.Convert<Gray, byte>();
Byte gray = grayFrame.Data[0, 10, 0];
Byte blue = currentFrame.Data[0, 10, 0];

抛出异常:Object reference not set to an instance of an object.

我通过添加断点检查,结果是这样的:

currentFrame.Data is nul
grayFrame.Data has 3d array
gray has value 71

然后下一行导致错误

为什么应该是 3d 数组的 currentFrame.Data 为空?如何访问 Bgr 图像的 Image.Data 属性?

我正在使用 emgucv 2.2.1。 2.1版本也出现同样的问题。

感谢您的帮助


我的发现非常令人惊讶。

Image<Bgr, byte> currentFrame = capture.QueryFrame();
byte b;
try
{
   b = image.Data[0, 0, 0];            //Line (A)
}
catch (Exception ex)
{ MessageBox.Show("Before Convert : "+ex.Message); }         

image = image.Convert<Bgr, byte>();

try
{
   b = image.Data[0, 0, 0];           //Line (B)
}
catch (Exception ex)
{ MessageBox.Show("AfterConvert : "+ex.Message); }

在上面的代码中:行 (A) 抛出异常“对象引用未设置为对象的实例”。但是添加代码后

image = image.Convert<Bgr, byte>();

Line(B) 运行平稳,没有任何异常。

有人知道为什么会这样吗?

【问题讨论】:

  • 那是什么语言?那是C#吗?添加适当的标签,以便您可以从了解您的代码的人那里获得帮助。

标签: c# opencv emgucv


【解决方案1】:

[虽然回答太晚了,但我将其发布以供将来参考。]
最近我遇到了同样的问题。我无法访问由QueryFrame 通过Data 属性返回的图像的像素值。但是在应用任何操作(例如调整大小、转换)之后,结果图像是可访问的。这背后的原因和解决方案很简单。

QueryFrame 返回的图像的Data 属性始终为空。它的图像数据存储在非托管内存中,因此无法通过Data 属性访问。要访问帧的像素值,您只需克隆它即可。

Image<Bgr, byte> currentFrame = capture.QueryFrame();
Image<Bgr, byte> frame = currentFrame.Clone();
// now access using Data property
byte b = frame.Data[0,0,0];
byte g = frame.Data[0,0,1];
byte r = frame.Data[0,0,2];

【讨论】:

    【解决方案2】:

    capture.QueryFrame() 返回 null,您尝试在最后一行访问它。我会看看那个方法。我猜 .Convert 是一个扩展方法,该方法检查 null 并返回非 null 的东西。

    【讨论】:

    • capture.QueryFrame() 已返回有效帧,因为我能够在 imageBox 中显示该帧(因为 imageBox1.Image = currentFrame; 工作正常)
    【解决方案3】:

    嘿嘿,尝试在你的 .../bin/Debug 中添加 .xml 文件。然后输入你的 ProcesFrame 方法: //haar is HaarCascade haar = new HaarCascade("haarcascade_frontalface_default.xml");

    【讨论】:

      猜你喜欢
      • 2018-07-15
      • 1970-01-01
      • 2017-12-12
      • 2012-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-08
      • 1970-01-01
      相关资源
      最近更新 更多