从Emgu CV

时间:2017-12-01 19:28:26

标签: vb.net emgucv

这里有点新的EmguCV

只想问一下关于CopyMakeBorder功能

的快速提问

目标图像的像素值是否可访问?

我想进一步处理目标图像,但是当我尝试从图像中访问像素值时,它只返回0(即使在不应该为0的位置,例如中心像素)。当我使用Imshow时,它显示图像边框已经完美处理,但问题仅在我尝试访问像素值时仍然存在,只有在像素位置的任何位置都会得到0。

当我尝试使用其他EmguCV函数的目标图像时,这不是问题,例如Threshold函数

任何人都可以澄清吗?非常感谢!!

我正在使用VB.net,这是代码(我周末离开我的工作站,所以我只是想记住代码,可能是一些大写字母,这里有错误,但我希望你得到要点。)

首先我初始化源图像和目标图像

Dim img As Image(Of Gray,Byte) = New Image (Of Gray, Byte)("myimage.jpg")
Dim img1 As Image(Of Gray,Byte) = New Image (Of Gray, Byte)(img.size)

CopyMakeBorder功能,将1个像素扩展到顶部,底部,左侧和右侧。边界类型常量0值

Cvinvoke.CopyMakeBorder(img,img1,1,1,1,1,BorderType.Constant, New MCvscalar(0))

从目标图像访问像素值,获取x = 100,y = 100和通道0(因为它是灰度图像)的示例像素

Console.writeline(img1.data(100,100,0))

这将使调试输出为0,无论我在哪里尝试获取像素值,它仍为0,即使我尝试显示图像时特定像素不应为0(它不是黑色)

Cvinvoke.Imshow("test",img1)

1 个答案:

答案 0 :(得分:0)

您正尝试通过Image.Data访问数据,但是,这不包括添加的边框;只是原始的位图。

但是,添加的边框位于Mat属性中。通过它可以访问各个像素

' returns data from original bitmap
Console.WriteLine(img1.Data(100, 100, 0))
' returns data from modified bitmap
Console.WriteLine(img1.Mat.GetData(100, 100)(0))