Emgu CV图像宽度不是4的倍数

时间:2015-06-29 06:38:25

标签: image opencv image-processing alignment emgucv

我正在尝试使用 Emgu CV 进行一些图像处理。

我在 byte [] 中有灰度图像的原始像素数据。我知道图像的大小和类型。

我首先创建一个已知大小的图像宽度类型,然后我想将日期加载到图像中(我经常在 C ++ OpenCV 中完成此操作。)

Image<Gray, Byte> image = new Image<Gray, byte>(width, height);   
image.Bytes = data;

但是形象总是“切入和困惑”。它适用于宽度%4 = 0 的图像。这就是为什么我认为它是某种“内存对齐”问题。

有人遇到此问题并知道如何修复它吗?

谢谢, 塞巴斯蒂安

2 个答案:

答案 0 :(得分:0)

原始数据和Image.Bytes都是连续的内存。但是你的数组的每一行都需要宽度字节,但是Image的行需要Image.widthStep(我说的是IPLImage结构,不知道Emgu pecularities)字节,这个值对齐4个字节(99 =&gt; 100等) )。
因此,您可以将第Y行的宽度字节复制到字节[Y * widthStep](高度时间),或者创建特殊的4字节对齐数组来收集原始数据,然后将其分配给Image.Bytes

答案 1 :(得分:0)

尝试使用其他构造函数:

Image<Gray, Byte> image = new Image<Gray, byte>(width, height, bytesNum, data);  

另见http://www.emgu.com/wiki/files/2.1.0.0/html/1d51c1ed-6f5e-65f9-206c-ef2d59c5c117.htm