【问题标题】:EmguCV - Create image from unmanaged dataEmguCV - 从非托管数据创建图像
【发布时间】:2011-05-09 19:34:00
【问题描述】:

我正在使用 EmguCV,我有一个大小为 640x480 的字节类型灰度矩阵,矩阵的每个元素都是 255 或 0。现在我需要从中制作一个图像。我找到的最好的构造函数是这样的:

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.

我将不胜感激。

【问题讨论】:

    标签: c# image access-violation emgucv


    【解决方案1】:

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

    【讨论】:

    • 谢谢,正如您可能已经猜到的那样,该行不是异常的确切位置。异常发生在使用制作图像的下一行。矩阵的 copyTo() 将 CvArray 作为输入,但图像只有一个 byte[] 成员。您对如何将其复制到图像有任何想法吗?
    • 我很确定 Image 可以用作 CvArray 的替代品(iirc 它是从它派生的)。现在没时间测试。
    • 哇,它成功了。你不知道我多么感谢你的帮助。
    猜你喜欢
    • 2013-01-05
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-15
    • 1970-01-01
    • 2013-01-26
    相关资源
    最近更新 更多