可以';访问图像<;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)运行平稳,无一例外。
有人知道为什么会这样吗?
[虽然现在回答已经很晚了,但我会发布这篇文章供将来参考。]
最近我也遇到了同样的问题。我无法通过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");