前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Halcon 创建图像

Halcon 创建图像

作者头像
为为为什么
发布2023-02-18 14:43:00
3.1K0
发布2023-02-18 14:43:00
举报
文章被收录于专栏:又见苍岚又见苍岚

Halcon 中 HImage 为图像的数据结构,本文记录 HALCON 中生成图像的几种方式。

创建图像相关算子

序号

算子名称

算子含义

1

copy_image

复制一个图像并为其分配新的内存。

2

gen_image1

从指向像素的指针创建图像。

3

gen_image1_extern

使用存储管理从像素上的指针创建图像。

4

gen_image1_rect

从像素上的指针创建一个带有矩形域的图像(带存储管理)。

5

gen_image3

创建一个从三个指针到像素(红色/绿色/蓝色)的图像。

6

gen_image3_extern

使用存储管理从像素上的三个指针创建一个三通道图像。

7

gen_image_const

创建一个具有常量灰度值的图像。

8

gen_image_gray_ramp

创建一个灰色值斜坡。

9

gen_image_interleaved

从指向交错像素的指针创建一个三通道图像。

10

gen_image_proto

创建具有指定常数灰度值的图像。

11

gen_image_surface_first_order

用一阶多项式创建一个倾斜的灰色曲面。

12

gen_image_surface_second_order

用二阶多项式创建一个曲面。

13

region_to_bin

将区域转换为二进制字节映像。

14

region_to_label

将区域转换为标签图像。

15

region_to_mean

用它们的平均灰度值绘制区域。

read_image

  • 读取图像,作为测试图像

语法:

代码语言:javascript
复制
read_image( : Image : FileName : )

示例:

代码语言:javascript
复制
* 读取图像
read_image(Image, 'test.jpg')

copy_image

  • 复制一个图像并为其分配新的内存

语法:

代码语言:javascript
复制
copy_image(Image : DupImage : : )

示例:

代码语言:javascript
复制
copy_image(Image, DupImage)

gen_image_const

  • 创建指定大小的灰度为 0 的单通道图像

语法:

代码语言:javascript
复制
gen_image_const( : Image : Type, Width, Height : )

示例:

代码语言:javascript
复制
* 生成一张灰度为0的单通道图像
gen_image_const(Image, 'byte', 15, 15)

gen_image_gray_ramp

  • 根据下式创建一个渐变单通道图像
ImageGrayRamp(r,c)=Alpha \times (r-row)+Beta \times (c-col) + 平均值

语法:

代码语言:javascript
复制
gen_image_gray_ramp( : ImageGrayRamp : Alpha, Beta, Mean, Row, Column, Width, Height : )
  • 图像的大小由宽度和高度决定,灰度值的类型为 byte,有效区域外的灰色值会被剪切
  • 就是整张图大小为 Width, Height,围绕 Row, Column 为中心,此点均值为 Mean,纵向变化率为 Alpha,横向变化率 Beta,就这么样整个渐变图出来
  • 如果数值大于 255 或小于 0 会被置为 255 或 0
  • 输出为 byte 格式

示例:

代码语言:javascript
复制
* 生成一种灰度渐变的图像
gen_image_gray_ramp (ImageGrayRamp, 0.5, 0.5, 128, 256, 256, 512, 512)

gen_image_surface_first_order

  • 该函数和 gen_image_gray_ramp 功能几乎一致,只是可以指定图像类型

语法:

代码语言:javascript
复制
gen_image_surface_first_order( : ImageSurface : Type, Alpha, Beta, Gamma, Row, Column, Width, Height : )

示例:

代码语言:javascript
复制
gen_image_surface_first_order(ImageGrayRamp2,'real', 0.5, 0.5, 128, 256, 256, 512, 512)

gen_image_surface_second_order

  • gen_image_surface_first_order 算子可以实现更加复杂的图像生成效果
  • 公式:
\begin{aligned} \text { ImageSurface }(r, c) & =\text { Alpha }(r-\text { Row })^{2} \ & +\operatorname{Beta}(c-\text { Column })^{2} \ & +\operatorname{Gamma}(r-\text { Row }) *(c-\text { Column }) \ & +\operatorname{Delta}(r-\text { Row }) \ & +\operatorname{Epsilon}(c-\text { Column }) \ & +\text { Zeta }\end{aligned}

语法:

代码语言:javascript
复制
gen_image_surface_second_order( : ImageSurface : Type, Alpha, Beta, Gamma, Delta, Epsilon, Zeta, Row, Column, Width, Height : )

示例:

代码语言:javascript
复制
gen_image_surface_second_order(ImageGrayRamp3, 'real', 0.5, 0.5, 1, 0.1, 0.1, 128, 256, 256, 512, 512)

gen_image_proto

  • 生成一张和输入图像一样长宽的指定灰度值的单通道图像

语法:

代码语言:javascript
复制
gen_image_proto(Image : ImageCleared : Grayval : )

示例:

代码语言:javascript
复制
gen_image_proto(ImageGrayRamp, ImageCleared, 128)

不论输入图像通道数为多少,输出图像均为单通道。

gen_image_interleaved

  • 通过一个指向交错像素的图像指针来创建一个三通道图像
  • 这个函数比较复杂也比较奇怪,要求输入图像的指针指向交错的图像,例如将 RGB 三通道图像按照 RGB像素的顺序压缩写入单通道图像中,然后再用这个函数解构出来,感觉用处不大

语法:

代码语言:javascript
复制
gen_image_interleaved( : ImageRGB : PixelPointer, ColorFormat, OriginalWidth, OriginalHeight, Alignment, Type, ImageWidth, ImageHeight, StartRow, StartColumn, BitsPerChannel, BitShift : )

示例:

代码语言:javascript
复制
read_image(Image, 'test.jpg')
rgb3_to_interleaved (Image, ImageInterleaved)
* 获取指针
get_image_pointer1 (ImageInterleaved, Pointer, TypeRGB, Width, Height)
* 恢复 rgb 图像
gen_image_interleaved (BImageRGB1, Pointer, 'rgb', Width / 3, Height, -1, 'byte', 0, 0, 0, 0, -1, 0)
* 恢复部分 图像
gen_image_interleaved (BImageRGB2, Pointer, 'rgb', Width / 3, Height, -1, 'byte', Width / 6, Height / 2, 0, Width / 12, -1, 0)

  • 直观上理解为左边的单通道图(RGB压缩到一行,所以宽三倍)提取组成右边的图

gen_image1

  • 根据图像数据指针生成单通道

语法:

代码语言:javascript
复制
gen_image1( : Image : Type, Width, Height, PixelPointer : )

示例:

代码语言:javascript
复制
read_image(Image, 'test.jpg')
get_image_pointer3(Image, PointerRed, PointerGreen, PointerBlue, Type, Width, Height)
gen_image1(ImageBlue, Type, Width, Height, PointerBlue)

gen_image1_extern

  • 根据图像数据指针生成单通道,并带有内存管理

语法:

代码语言:javascript
复制
gen_image1_extern( : Image : Type, Width, Height, PixelPointer, ClearProc : )

示例:

代码语言:javascript
复制
voidNewImage(Hobject *new)
{
unsignedchar  *image;
int            r,c;
  image = malloc(640*480);
for (r=0; r<480; r++)
for (c=0; c<640; c++)
      image[r*640+c] = c % 255;
  gen_image1_extern(new,"byte",640,480,(Hlong)image,(Hlong)free);
}

gen_image3

  • 根据图像数据指针生成三通道图像

语法:

代码语言:javascript
复制
gen_image3( : ImageRGB : Type, Width, Height, PixelPointerRed, PixelPointerGreen, PixelPointerBlue : )

示例:

代码语言:javascript
复制
read_image(Image, 'test.jpg')
get_image_pointer3(Image, PointerRed, PointerGreen, PointerBlue, Type, Width, Height)
gen_image3(ImageBRG, 'byte', Width, Height, PointerBlue, PointerRed, PointerGreen)

gen_image3_extern

  • 根据图像数据指针生成三通道图像,并带有内存管理

语法:

代码语言:javascript
复制
gen_image3_extern( : Image : Type, Width, Height, PointerRed, PointerGreen, PointerBlue, ClearProc : )

示例:

代码语言:javascript
复制
voidNewImage(Hobject *new)
{
unsignedchar  *image_red;
unsignedchar  *image_green;
unsignedchar  *image_blue;
int            r,c;
  image_red = malloc(640*480);
  image_green = malloc(640*480);
  image_blue = malloc(640*480);
for (r=0; r<480; r++)
for (c=0; c<640; c++)
    {
      image_red[r*640+c] = c % 255;
      image_green[r*640+c] = (c+64) % 255;
      image_blue[r*640+c] = (c+128) % 255;
    }
  gen_image3_extern(new,"byte",640,480,(Hlong)image_red,\
	(Hlong)image_green,(Hlong)image_blue,(Hlong)free);
}

gen_image1_rect

  • 从像素上的指针创建一个带有矩形域的图像(带存储管理)。
  • 函数很危险,不建议使用

语法:

代码语言:javascript
复制
Image : PixelPointer, Width, Height, VerticalPitch, HorizontalBitPitch, BitsPerPixel, DoCopy, ClearProc : )

示例:

代码语言:javascript
复制
read_image(Image, 'test.jpg')
get_image_pointer3(Image, PointerRed, PointerGreen, PointerBlue, Type, Width, Height)
gen_image1_rect(Image1, PointerRed, Width, Height, Width, 8, 8, 'false', PointerRed)

region_to_bin

  • 将区域转换为二进制字节映像。

语法:

代码语言:javascript
复制
region_to_bin(Region : BinImage : ForegroundGray, BackgroundGray, Width, Height : ) 

示例:

代码语言:javascript
复制
gen_rectangle1 (Rectangle, 30, 20, 100, 200)
region_to_bin (Rectangle, BinImage, 255, 0, 400, 400)

region_to_label

  • 将区域转换为标签图像。

语法:

代码语言:javascript
复制
region_to_label(Region : ImageLabel : Type, Width, Height : )

示例:

代码语言:javascript
复制
gen_rectangle1 (Rectangle, 30, 20, 100, 200)
region_to_label (Rectangle, BinImage, 'byte', 400, 400)

region_to_mean

  • 用平均灰度值绘制区域。

语法:

代码语言:javascript
复制
region_to_mean(Regions, Image : ImageMean : : )

示例:

代码语言:javascript
复制
read_image(Image, 'test.jpg')
gen_rectangle1 (Rectangle, 300, 200, 700, 800)
region_to_mean (Rectangle, Image, ImageMean)

参考资料

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023年1月5日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 创建图像相关算子
  • read_image
  • copy_image
  • gen_image_const
  • gen_image_gray_ramp
  • gen_image_surface_first_order
  • gen_image_surface_second_order
  • gen_image_proto
  • gen_image_interleaved
  • gen_image1
  • gen_image1_extern
  • gen_image3
  • gen_image3_extern
  • gen_image1_rect
  • region_to_bin
  • region_to_label
  • region_to_mean
  • 参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档