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( : Image : FileName : )
示例:
* 读取图像
read_image(Image, 'test.jpg')
语法:
copy_image(Image : DupImage : : )
示例:
copy_image(Image, DupImage)
语法:
gen_image_const( : Image : Type, Width, Height : )
示例:
* 生成一张灰度为0的单通道图像
gen_image_const(Image, 'byte', 15, 15)
语法:
gen_image_gray_ramp( : ImageGrayRamp : Alpha, Beta, Mean, Row, Column, Width, Height : )
Width, Height
,围绕 Row, Column
为中心,此点均值为 Mean
,纵向变化率为 Alpha
,横向变化率 Beta
,就这么样整个渐变图出来byte
格式示例:
* 生成一种灰度渐变的图像
gen_image_gray_ramp (ImageGrayRamp, 0.5, 0.5, 128, 256, 256, 512, 512)
gen_image_gray_ramp
功能几乎一致,只是可以指定图像类型语法:
gen_image_surface_first_order( : ImageSurface : Type, Alpha, Beta, Gamma, Row, Column, Width, Height : )
示例:
gen_image_surface_first_order(ImageGrayRamp2,'real', 0.5, 0.5, 128, 256, 256, 512, 512)
gen_image_surface_first_order
算子可以实现更加复杂的图像生成效果
语法:
gen_image_surface_second_order( : ImageSurface : Type, Alpha, Beta, Gamma, Delta, Epsilon, Zeta, Row, Column, Width, Height : )
示例:
gen_image_surface_second_order(ImageGrayRamp3, 'real', 0.5, 0.5, 1, 0.1, 0.1, 128, 256, 256, 512, 512)
语法:
gen_image_proto(Image : ImageCleared : Grayval : )
示例:
gen_image_proto(ImageGrayRamp, ImageCleared, 128)
不论输入图像通道数为多少,输出图像均为单通道。
语法:
gen_image_interleaved( : ImageRGB : PixelPointer, ColorFormat, OriginalWidth, OriginalHeight, Alignment, Type, ImageWidth, ImageHeight, StartRow, StartColumn, BitsPerChannel, BitShift : )
示例:
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)
语法:
gen_image1( : Image : Type, Width, Height, PixelPointer : )
示例:
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( : Image : Type, Width, Height, PixelPointer, ClearProc : )
示例:
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( : ImageRGB : Type, Width, Height, PixelPointerRed, PixelPointerGreen, PixelPointerBlue : )
示例:
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( : Image : Type, Width, Height, PointerRed, PointerGreen, PointerBlue, ClearProc : )
示例:
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);
}
语法:
Image : PixelPointer, Width, Height, VerticalPitch, HorizontalBitPitch, BitsPerPixel, DoCopy, ClearProc : )
示例:
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(Region : BinImage : ForegroundGray, BackgroundGray, Width, Height : )
示例:
gen_rectangle1 (Rectangle, 30, 20, 100, 200)
region_to_bin (Rectangle, BinImage, 255, 0, 400, 400)
语法:
region_to_label(Region : ImageLabel : Type, Width, Height : )
示例:
gen_rectangle1 (Rectangle, 30, 20, 100, 200)
region_to_label (Rectangle, BinImage, 'byte', 400, 400)
语法:
region_to_mean(Regions, Image : ImageMean : : )
示例:
read_image(Image, 'test.jpg')
gen_rectangle1 (Rectangle, 300, 200, 700, 800)
region_to_mean (Rectangle, Image, ImageMean)