You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现byte[r,c,c]与Halcon HObject/HImage及byte[]的相互转换?

解决方案:Zivid/Halcon/ML.NET 图像数据内存级转换

1. Zivid三维byte数组(row, column, channel)转Halcon HImage/HObject

Halcon.NET 提供直接从内存创建图像的API,无需通过文件中转。核心是利用GenImage1(单通道)或GenImage3(三通道)方法,将三维数组按通道提取为一维内存块后传入。

三通道彩色图示例(RGB):

// 假设zividImageData是Zivid返回的byte[rows, cols, 3]数组
int rows = zividImageData.GetLength(0);
int cols = zividImageData.GetLength(1);

// 提取RGB各通道的一维数据(Halcon要求按行连续存储)
byte[] rChannel = new byte[rows * cols];
byte[] gChannel = new byte[rows * cols];
byte[] bChannel = new byte[rows * cols];

for (int r = 0; r < rows; r++)
{
    for (int c = 0; c < cols; c++)
    {
        int flatIdx = r * cols + c;
        rChannel[flatIdx] = zividImageData[r, c, 0];
        gChannel[flatIdx] = zividImageData[r, c, 1];
        bChannel[flatIdx] = zividImageData[r, c, 2];
    }
}

// 创建HImage
HImage halconImage = new HImage();
halconImage.GenImage3("byte", cols, rows, rChannel, gChannel, bChannel);

// 转HObject直接赋值即可
HObject halconObj = halconImage;

单通道灰度/深度图示例:

int rows = zividImageData.GetLength(0);
int cols = zividImageData.GetLength(1);

byte[] singleChannel = new byte[rows * cols];
for (int r = 0; r < rows; r++)
{
    for (int c = 0; c < cols; c++)
    {
        singleChannel[r * cols + c] = zividImageData[r, c, 0];
    }
}

HImage halconGrayImage = new HImage();
halconGrayImage.GenImage1("byte", cols, rows, singleChannel);

注意:确认Zivid返回的通道顺序(RGB/BGR),如果是BGR,需要调整GenImage3的通道参数顺序。


2. Halcon HImage转ML.NET所需的一维byte数组(PNG格式,与File.ReadAllBytes结果一致)

利用Halcon的WriteImage方法直接写入内存流,避免磁盘IO,得到的字节数组与读取PNG文件的结果完全一致。

// 假设halconImage是已有的HImage实例
byte[] pngBytes;
using (MemoryStream ms = new MemoryStream())
{
    // 将图像写入内存流,格式指定为png
    halconImage.WriteImage("png", 0, ms);
    // 转换为一维byte数组
    pngBytes = ms.ToArray();
}

// pngBytes可直接传入ML.NET,效果等同于File.ReadAllBytes("xxx.png")

注意:如果需要其他格式(如JPG),只需将"png"替换为对应格式字符串(如"jpeg"),但ML.NET通常优先支持PNG以避免压缩损失。

内容的提问来源于stack exchange,提问作者Malinko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 04:10:32