我正在尝试使用 Emgu CV 进行一些图像处理。
我在 byte [] 中有灰度图像的原始像素数据。我知道图像的大小和类型。
我首先创建一个已知大小的图像宽度类型,然后我想将日期加载到图像中(我经常在 C ++ OpenCV 中完成此操作。)
Image<Gray, Byte> image = new Image<Gray, byte>(width, height);
image.Bytes = data;
但是形象总是“切入和困惑”。它适用于宽度%4 = 0 的图像。这就是为什么我认为它是某种“内存对齐”问题。
有人遇到此问题并知道如何修复它吗?
谢谢, 塞巴斯蒂安
答案 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