这里有点新的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)
答案 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))