可以';访问图像<;Bgr,字节>;.C#emgucv中的数据属性

本文关键字:C#emgucv gt 字节 数据属性 Bgr 访问 图像 lt 可以 | 更新日期: 2023-09-27 18:00:40

我可以使用Data[,,]访问Gray图像的每个像素,但无法访问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

然后下一行导致错误

为什么是currentFrame。数据,应该是一个三维数组,为空?如何访问图像。Bgr映像的数据属性?

我使用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); }

在上面的代码中:Line(A)抛出异常"Object refence not set to A instance of A Object"。但添加代码后

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

线路(B)运行平稳,无一例外。

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

可以';访问图像<;Bgr,字节>;.C#emgucv中的数据属性

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

CCD_ 6返回的图像的CCD_。其图像数据存储在非托管内存中,因此无法通过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];

捕获。QueryFrame()返回null,您尝试在最后一行访问它。我会看看这个方法的内部。我猜。Convert是一个扩展方法,该方法检查null并返回非null的内容。

Hey在那里,尝试在您的/bin/调试。然后在ProcesFrame方法中键入://haar is HaarCascade haar=new HaarCasade("HaarCascade_foronalface_default.xml");