HALCON算子【图像操作】`get_image_pointer1 ` 和 `get_image_pointer3`

在使用 HALCON 进行图像处理时,我们通常使用其自带的图像处理算子来操作图像。但是在某些情况下,我们希望直接访问图像数据进行高效处理,这时候 get_image_pointer1get_image_pointer3 这两个算子就能派上用场。它们的作用是 获取图像数据的指针,让我们可以直接读取或修改像素值。
在这里插入图片描述


1. get_image_pointer1——获取单通道图像指针

get_image_pointer1 用于 单通道图像(例如灰度图、深度图、二值图像),它返回该图像的 指针、类型、宽度和高度

1.1 语法

get_image_pointer1(Image : Pointer, Type, Width, Height)
  • Image:输入的单通道图像。
  • Pointer:返回的指针(可以通过它访问图像数据)。
  • Type:图像的类型,例如 'byte'(灰度图)。
  • WidthHeight:图像的宽度和高度。

1.2 使用示例

以下是 C 语言的使用示例:

Hobject Image;
char Type[20];
Hlong Pointer, Width, Height;

read_image(&Image, "example.jpg");  // 读取图像
get_image_pointer1(Image, &Pointer, Type, &Width, &Height);  // 获取指针

printf("图像类型: %s\n", Type);
printf("指针地址: %ld\n", Pointer);
printf("图像宽高: %ld x %ld\n", Width, Height);

在这里,Pointer 指向图像的第一个像素,我们可以用它来遍历或修改像素值。

1.3 使用注意事项

1. 指针的生命周期

  • Pointer 只有在 Image 仍然存在时才有效,如果 Image 被释放或覆盖,指针会变成无效,使用它会导致 程序崩溃

2. 共享数据的影响

  • 如果多个 HALCON 变量共享同一张图像,修改指针指向的数据会影响所有变量
    示例
    reduce_domain(Image, ROI, ReducedImage)  
    get_image_pointer1(Image, Pointer, Type, Width, Height)
    
    这里 ImageReducedImage 共享同一片数据,修改 Pointer 的内容时,ReducedImage 也会跟着变。

解决方案

  • 如果要修改数据,最好创建新的图像
    gen_image1(NewImage, 'byte', Width, Height, Pointer)
    

2. get_image_pointer3——获取彩色图像(RGB)指针

get_image_pointer3 适用于 彩色图像(RGB),它会返回 红、绿、蓝三个通道的指针,让你可以分别访问每个通道的像素值。

2.1 语法

get_image_pointer3(ImageRGB : PointerRed, PointerGreen, PointerBlue, Type, Width, Height)
  • ImageRGB:输入的彩色图像。
  • PointerRedPointerGreenPointerBlue:分别返回 R、G、B 三个通道的指针。
  • Type:图像的类型(如 'byte',表示 0~255)。
  • WidthHeight:图像的宽度和高度。

2.2 使用注意事项

1. 只能用于单张图像

  • get_image_pointer3 一次只能获取一张彩色图像的指针,如果有多张图像需要处理,必须分别调用该算子。

2. 三个通道是独立的

  • PointerRedPointerGreenPointerBlue 分别指向 R、G、B 三个通道的数据,修改某一个不会影响其他两个通道。

3. 修改数据的影响

  • 如果 ImageRGB 被多个 HALCON 变量引用,修改指针指向的数据,会导致 所有变量的图像数据都被改变

解决方案

  • 如果你要修改数据,建议复制一份新图像
    gen_image3(NewImage, 'byte', Width, Height, PointerRed, PointerGreen, PointerBlue)
    

3. get_image_pointer1 vs get_image_pointer3

get_image_pointer1 get_image_pointer3
适用图像 灰度图(单通道) 彩色图(RGB)
返回数据 1 个指针 3 个指针(R、G、B)
存储方式 一块连续的内存 三块独立的内存
修改数据影响 影响所有共享该图像的变量 修改 R/G/B 影响该通道的所有变量
适合的场景 深度图、灰度摄像头、二值图像 彩色图像、摄像头视频流

4. 什么时候该用哪个?

如果处理的是灰度图(单通道) → 用 get_image_pointer1
如果处理的是彩色图(RGB) → 用 get_image_pointer3
如果需要修改数据,建议先创建新图像,避免影响原图像