【问题标题】:Byte[r,c,c] to Halcon HObject/HImage to byte[]Byte[r,c,c] 到 Halcon HObject/HImage 到 byte[]
【发布时间】:2022-11-15 17:54:53
【问题描述】:

我正在同时使用 Zivid.NET、Halcon.NET 和 ML.NET。 Zivid 为我提供了一个 3D 字节数组(行、列、通道),Halcon 使用 HImages/HObjects,ML.NET 功能需要一个 1D 字节数组(与 File.ReadAllBytes() 相同)

到目前为止,我使用了一种解决方法:

  1. save()'d Zivid's imageRGBA 作为 PNG,
  2. 我用 Halcon 的read_image() 阅读了它,它给了我一个 HObject
  3. 经过一些图形处理后,我使用write_image() 再次将HObject 保存为PNG。
  4. 使用 File.ReadAllBytes() 读取 PNG,我得到了我的 ML.NET 功能所期望的 byte[]

    但这对于大量数据来说远非理想。

    我需要的是:

    1. 一种将byte[r,c,c] 图像转换为HObject/HImage 的方法。
    2. 一种将HObject/HImage 图像转换为byte[] 的方法。

      Halcon 的read_image()write_image() 似乎对此没有任何选择,到目前为止我还没有发现任何有用的东西。

      编辑:在使用建议的 Halcon 程序(谢谢!)从 IntPtr 导入图像并使用 Halcon 的write_image() 保存到文件后,我得到一个非常扭曲的图像: 我使用的来自 Zivid 的 ImageRGBA class 可以给我:

      1. 图像中第一个像素的 IntPtr
      2. [行、列、通道] 格式的 3D 字节数组
      3. [row,col] 格式的二维字节数组

        我直接使用建议的 Halcon 程序尝试了 IntPtr,2 和 3 我尝试使用来自 How to get IntPtr from byte[] in C# 的建议,所有 3 都导致了相同的失真图像。

【问题讨论】:

    标签: halcon


    【解决方案1】:

    要从字节创建 HImage 对象,您需要一个指向数组的指针,然后很简单:

    public HImage(string type, int width, int height, IntPtr pixelPointer)
    

    要获取指针并从 Image 访问数据,需要以下函数:

    IntPtr HImage.GetImagePointer1(out string type, out int width, out int height)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-02
      • 2023-03-18
      相关资源
      最近更新 更多