2011-05-09 18 views
0

我正在使用EmguCV,并且我得到了一个字节类型的灰度矩阵,大小为640x480,矩阵的每个元素都是255或0.现在我需要创建一个图像这个。我找到的最好的构造是这样的:EmguCV - 从非托管数据创建图像

Image<Gray,byte>(int width, int height, int stride, IntPtr scan0) 

我从矩阵中的第一,第二和第四个参数,我送640步幅。但它给我一个

Access violation exception: Attempted to read or write protected memory. This is often an indication that other memory is corrupt. 

我会感谢任何帮助。

回答

1

你很可能传错了指针。错误的步幅只会导致图像内容出现扭曲。 640将是你的情况下正确的值(只需再次使用宽度),因为步幅总是表示内存中一条图像行的长度(在你的情况下为640字节)。我只能猜测,但不要尝试使用矩阵的_ptr指针。这可能听起来合乎逻辑,但是它会指向整个矩阵对象,而不仅仅是数据(你想要的)。现在没有检查,我确定你可以使用矩阵的copyTo()将内容复制到一个图像(如果这足以满足你的用例)。

+0

谢谢,正如您可能猜到的那样,该行并不是异常的确切位置。在使用制作的图像的下一行中会发生异常。矩阵的copyTo()将CvArray作为输入,但图像只有一个byte []成员。你有什么想法如何将其复制到图像? – Auxiliary 2011-05-10 10:14:07

+0

我很确定图像可以用作CvArray替换(它是从它派生的iirc)。没时间现在测试。 – Mario 2011-05-10 11:35:36

+0

哇,它的工作。你不知道我多么感谢你的帮助。 – Auxiliary 2011-05-10 16:01:34