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

Image Emgu CV图像宽度不是4的倍数,image,opencv,image-processing,alignment,emgucv,Image,Opencv,Image Processing,Alignment,Emgucv,我正在尝试使用Emgu CV进行一些图像处理 Image<Gray, Byte> image = new Image<Gray, byte>(width, height); image.Bytes = data; 我有字节[]中灰色图像的原始像素数据。我知道图像的大小和类型 我首先创建一个已知大小的图像宽度类型,然后我想将日期加载到图像中(我经常在C++OpenCV中这样做) 图像图像=新图像(宽度、高度); image.Bytes=数据; 但画面总是有点“一刀

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

Image<Gray, Byte> image = new Image<Gray, byte>(width, height);   
image.Bytes = data;
我有字节[]中灰色图像的原始像素数据。我知道图像的大小和类型

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

图像图像=新图像(宽度、高度);
image.Bytes=数据;
但画面总是有点“一刀切,一盘散沙”。它适用于宽度%4=0的图像。这就是为什么我认为这是某种“内存对齐”问题

你们中有人遇到过这个问题并且知道如何解决它吗

谢谢,
Sebastian

您的原始数据和图像。字节是连续的内存块。但数组的每一行都采用宽度字节,但映像的每一行采用Image.widthStep(我谈论的是IPLImage结构,不知道Emgu的特殊性)字节,该值按4字节对齐(99=>100等)。

因此,您可以将Yth行的宽度字节复制到字节[Y*widthStep](高度时间),或创建特殊的4字节对齐数组来收集原始数据,然后将其分配给图像。字节请尝试使用其他构造函数:

Image<Gray, Byte> image = new Image<Gray, byte>(width, height, bytesNum, data);  
Image Image=新图像(宽度、高度、字节数、数据);
另见