QQ登录

只需一步,快速开始

halcon图像创建相关函数

[ 复制链接 ]
1.copy_image(Image : DupImage : : )
复制一个图像,并为它分配新的内存。

2.gen_image1( : Image : Type, Width, Height, PixelPointer : )
此函数生成一个Width*Height,类型为Type的图片。其数据指针PixelPointer中的像素是按行顺序存储。新图像的存储由HALCON重新创建。因此,可以在调用之后释放PixelPointer指向的资源。
注意,如何传递指针值取决于使用的函数签名和编程环境。
确保传递的是存储图像数据的实际内存地址,而不是指针变量的地址。
必须注意不要截断64位体系结构上的64位指针。
例程:
read_image (Image, 'printer_chip/printer_chip_01')
get_image_pointer1 (Image, Pointer, Type, Width, Height)
gen_image1 (Image1, Type, Width, Height, Pointer)


3.gen_image1_extern( : Image : Type, Width, Height, PixelPointer, ClearProc : )
创建一张Width * Height的图像,图像数据存储于PixelPointer,像素按行顺序存储。
注意,如何传递指针值取决于已使用的函数签名和编程环境。
确保传递的是存储图像数据的实际内存地址,而不是指针变量的地址。
必须注意不要截断64位体系结构上的64位指针。
与gen_image1相反,新图像的内存不是由HALCON新分配的。
PixelPointer指向内存的释放得通过删除Image 实现,通过调用函数ClearProc 来删除。
ClearProc 的定义格式为void ClearProc(void* ptr);调用约定为__cdecl。


4.gen_image1_rect( : Image : PixelPointer, Width, Height, VerticalPitch, HorizontalBitPitch, BitsPerPixel, DoCopy, ClearProc : )
生成一张大小为(VerticalPitch/(HorizontalBitPitch / 8)) * Height的图像。
图像数据保存于PixelPointer,像素逐行存储。
注意,如何传递指针值取决于使用的函数签名和编程环境。
确保传递的是存储图像数据的实际内存地址,而不是指针变量的地址。
必须注意不要截断64位体系结构上的64位指针。
VerticalPitch决定内存中第n行像素m和第n+1行像素m之间的距离(以字节为单位)。
“输入图像”的所有行具有相同的垂直间距。输出图像的宽度为VerticalPitch / (HorizontalBitPitch / 8),其高度为height。
输出图像Image 的区域是一个大小为宽*高的矩形。
参数HorizontalBitPitch是相邻两个像素之间的水平距离(以比特为单位)。
BitsPerPixel是每个像素使用的位元数。


如果DoCopy设置为“true”,PixelPointer指向的图像数据将被复制,HALCON将为新图像分配内存。
否则,在删除对象Image 时,图像数据不会重复,并且必须释放PixelPointer指向的内存空间。
通过 ClearProc实现释放。其定论格式为void ClearProc(void* ptr);调用约定为__cdecl ;
如果不释放内存,可以传递一个空指针NULL,


5.gen_image3( : ImageRGB : Type, Width, Height, PixelPointerRed, PixelPointerGreen, PixelPointerBlue : )
参考gen_image1,此函数生成一个Width*Height三通道图片。


6.gen_image3_extern( : Image : Type, Width, Height, PointerRed, PointerGreen, PointerBlue, ClearProc : )
参考gen_image1_extern,创建一张Width * Height的图像。


7.gen_image_const( : Image : Type, Width, Height : )
创建一张Width * Height的图像,图像类型由Type确定。常用的有byte,int1,uint2,int2等。
通过 set_system('init_new_image',<'true'/'false'>)可将新建的图像初始为0


8.gen_image_gray_ramp( : ImageGrayRamp : Alpha, Beta, Mean, Row, Column, Width, Height : )
算子gen_image_gray_ramp根据下式创建一个灰度值渐变:
ImageGrayRamp(r,c) = Alpha(r-Row) + Beta(c-Column) + Mean。
图像大小为 Width* Height ,类型为byte,有效区域外的灰色值被剪切。


9.gen_image_interleaved( : ImageRGB : PixelPointer, ColorFormat, OriginalWidth, OriginalHeight, Alignment, Type, ImageWidth, ImageHeight, StartRow, StartColumn, BitsPerChannel, BitShift : )
函数通过图像数据指针PixelPointer创建一个三通道图像,原始图像长宽必须由OriginalWidth, OriginalHeight,传递。
像素格式由ColorFormat指定,Alignment保留不用,传递0.
输出图像尺寸由ImageWidth * ImageHeight.确定,通过左上角坐标StartRow ,StartColumn 来截取输入图像范围。
当 ImageWidth, ImageHeight, StartRow, StartColumn都为0时,输出与输入图像大小相同。
注意,必须选择合适的输出图像ImageRGB的图像类型Type(参见gen_image_const),以便能够表示输入图像的整个可能的颜色值范围。
例如gen_image_interleaved不允许从输入格式为'rgb48'的图像,创建一个字节图像。
当格式“rgb48”、“bgr48”、“rgbx64”和“bgr64”不使用每个通道和像素的全部16位时,应该在BitsPerChannel中传递实际使用的位的数量。
此外,输入图像的像素值可以通过BitShift 向右移位来改变。

格式为“rgbx”、“bgrx”、“rgbx64”和“bgrx64”的输入四通道图像的第四个通道被简单地丢弃。

新图像的存储是由HALCON新创建的。

因此,它可以在调用之后释放。注意,如何传递指针值取决于使用的操作符签名和编程环境。

确保传递的是存储图像数据的实际内存地址,而不是指针变量的地址。

必须注意不要截断64位体系结构上的64位指针


例程
read_image(Image,'claudia')
rgb3_to_interleaved (Image, ImageInterleaved)
get_image_pointer1 (ImageInterleaved, Pointer, Type, Width, Height)
gen_image_interleaved (ImageRGB, Pointer, 'rgb', Width/3, Height, 0, 'byte', 0, 0, 0, 0, -1, 0)

10.region_to_mean(Regions, Image : ImageMean : : )
region_to_mean返回一个图像,其中的区域Regions 使用基于Image 的平均灰度值绘制区域。
该算子主要用于分割结果的可视化。


11. region_to_bin(Region : BinImage : ForegroundGray, BackgroundGray, Width, Height : )
region_to_bin生成 Width*Height的图像。将区域中给定的输入区域转换为“byte”图像,并为区域中的所有像素分配灰度值ForegroundGray
如果输入区域大于生成的图像,则在图像边框处剪切。区域外背景灰度为BackgroundGray
例程
gen_rectangle1 (Rectangle, 30, 20, 100, 100)
region_to_bin (Rectangle, BinImage, 255, 128, 512, 512)

12.region_to_label(Region : ImageLabel : Type, Width, Height : )
根据输入区域的索引(1..n)将其转换为标签图像,即,第一个区域用灰度值1绘制,
第二个区域用灰度值2绘制,以此类推。只使用正灰色值。
对于“byte”图像,索引以256模数输入。
对大于生成图像的区域进行适当的裁剪。
如果区域重叠,则输入具有较高图像的区域(即,它们按包含在输入区域中的顺序绘制)。
如果需要,可以通过调用expand_region使区域不重叠。
未被区域包含的背景,使用0填充。
例程
gen_rectangle1 (Rectangle, 30, 20, 100, 200)
region_to_label (Rectangle, ImageLabel, 'int2', 512, 512)

13.interleave_channels(MultichannelImage : InterleavedImage : PixelFormat, RowBytes, Alpha : )
interleave_channels从包含三个或四个通道的输入多通道图像创建一个InterleavedImage。
这对于准备用于可视化的彩色图像非常有用,例如,将其转换为. net位图。


InterleavedImage中的像素格式使用PixelFormat指定。
可能的格式是“rgb”、“rgba”、“argb”、“bgr”、“bgra”和“abgr”,其中“a”表示第4个(“alpha”)通道。
注意,与gen_image_interleaved不同,LittleEndian字节顺序是在PixelFormat中使用的。
例程
read_image(Image,'claudia')
interleave_channels (Image, InterleavedImage, 'rgba', 'match', 128)。


14.gen_image_proto(Image : ImageCleared : Grayval : )
gen_image_proto创建一个输出图像ImageCleared,用常量灰度值填充。
如果输入的图像类型为“direction”,则将结果图像中不属于“direction”图像有效值范围的灰度值设置为255,将其标记为无效。
ImageCleared具有与输入图像相同的尺寸和像素类型。
例程
read_image(Image,'claudia')
gen_image_proto (Image, ImageCleared1, 128)
get_image_pointer1 (ImageCleared1, Pointer1, Type1, Width1, Height1)

15.gen_image_surface_first_order( : ImageSurface : Type, Alpha, Beta, Gamma, Row, Column, Width, Height : )
gen_image_surface_first_order根据下面的方程创建一个倾斜的灰度值表面:
ImageSurface(r,c) = Alpha(r - Row) +  Beta(c - Column) + Gamma







图像的大小由Width, Height 决定。
参数Row, Column定义创建的灰色表面的参考点。
灰度值的类型为type(有关像素类型的详细描述,请参见gen_image_const)。
有效区域外的灰色值被剪切。
gen_image_surface_first_order (ImageSurface, 'byte', 1, 1, 1, 256, 256, 512, 512)


16.gen_image_surface_second_order( : ImageSurface : Type, Alpha, Beta, Gamma, Delta, Epsilon, Zeta, Row, Column, Width, Height : )
gen_image_surface_second_order根据下式创建一个弯曲的灰度值曲面
2019-05-07_224642.jpg
图像的大小由Width, Height决定。
参数 Row, Column定义创建的灰色表面的参考点。
灰度值的类型为type(有关像素类型的详细描述,请参见gen_image_const)。
有效区域外的灰色值被剪切。
gen_image_surface_second_order (ImageSurface1, 'byte', 1, 1, 1, 1, 1, 1, 256, 256, 512, 512)




回复

使用道具 举报

快速回复 返回列表 客服中心 搜索