halcon随机贴图生成缺陷图片,用于深度学习训练:
read_image (Image, 'C:/Users/61082/Desktop/bentiiamge/omron/S06-1211/ok/ok_images/D246B_CPFNNUBA8LT0SX_AAA_S2412001793_C1216_1733895885320066.jpg')
get_image_size (Image, Width, Height)
gen_rectangle1 (Rectangle, 22, 17, 89, 47)
reduce_domain (Image, Rectangle, ImageReduced)
crop_domain (ImageReduced, ImagePart)
for i:=0 to 100 by 1
Rand:=rand(3)
paster_Row:=int(Rand[0]*Height)
paster_Col:=int(Rand[1]*Width)
Angle:=int(Rand[2]*360)
minImageWidth:=sqrt(Width*Width+Height*Height)
minImageHeight:=sqrt(Width*Width+Height*Height)
vector_angle_to_rigid ( Height/2,Width/2, 0, minImageHeight/2, minImageHeight/2, rad(Angle), HomMat2D)
*获取图像的通道数
count_channels (ImagePart, Channels)
*如果是单通道图像
if (Channels==1)
*生成一个画布
gen_image_const (Image1, 'byte', minImageWidth, minImageHeight)
*将image放到画布上
overpaint_gray (Image1, ImagePart)
*图片旋转
affine_trans_image (Image1, ImageAffineTrans, HomMat2D, 'constant', 'false')
get_image_size (ImageAffineTrans, Width1, Height1)
dev_clear_window ()
dev_display (ImageAffineTrans)
*如果是三通道彩色图像
endif
if (Channels==3)
*分解三通道图像
decompose3 (ImagePart, Image11, Image2, Image3)
*生成三个画布
gen_image_const (Image4, 'byte', minImageWidth, minImageHeight)
gen_image_const (Image5, 'byte', minImageWidth, minImageHeight)
gen_image_const (Image6, 'byte', minImageWidth, minImageHeight)
*依次将三个单通道图像overpaint到画布上
overpaint_gray (Image4, Image11)
overpaint_gray (Image5, Image2)
overpaint_gray (Image6, Image3)
*仿射变换单通道图像
affine_trans_image (Image4, ImageAffineTrans1, HomMat2D, 'constant', 'false')
affine_trans_image (Image5, ImageAffineTrans2, HomMat2D, 'constant', 'false')
affine_trans_image (Image6, ImageAffineTrans3, HomMat2D, 'constant', 'false')
*三个单通道图像合成彩色图像
compose3 (ImageAffineTrans1, ImageAffineTrans2, ImageAffineTrans3, rotateImage)
dev_clear_window ()
dev_display (rotateImage)
endif
dev_update_off ()
*rgb分离
decompose3 (Image, ImageR, ImageG, ImageB)
decompose3 (rotateImage, ImagePartR, ImagePartG, ImagePartB)
*小图去背景
threshold (ImagePartR, Regions1, 210, 255)
connection (Regions1, ConnectedRegions2)
select_shape_std (ConnectedRegions2, SelectedRegions3, 'max_area', 70)
fill_up (SelectedRegions3, SelectedRegions3)
smallest_rectangle1 (SelectedRegions3, Row1, Column1, Row2, Column2)
get_region_points (SelectedRegions3, oriPartRows, oriPartColumns)
count:=|oriPartRows|
subRs:=gen_tuple_const(count, Row1)
subCs:=gen_tuple_const(count, Column1)
PartRows:=oriPartRows-subRs
PartColumns:=oriPartColumns-subCs
if ((paster_Row+(Row2-Row1)>=Height) or (paster_Col+(Column2-Column1)>=Width))
continue
endif
startRs:=gen_tuple_const(count, paster_Row)
startCs:=gen_tuple_const(count, paster_Col)
*将所有像素坐标加上偏移量
Rows:=startRs+PartRows
Cols:=startCs+PartColumns
*r绘制
get_grayval (ImagePartR, oriPartRows, oriPartColumns, Grayval)
copy_image (ImageR, DupImageR)
set_grayval (DupImageR, Rows, Cols, Grayval)
*g绘制
get_grayval (ImagePartG, oriPartRows, oriPartColumns, Grayval1)
copy_image (ImageG, DupImageG)
set_grayval (DupImageG, Rows, Cols, Grayval1)
*b绘制
get_grayval (ImagePartB, oriPartRows, oriPartColumns, Grayval2)
copy_image (ImageB, DupImageB)
set_grayval (DupImageB, Rows, Cols, Grayval2)
compose3 (DupImageR, DupImageG, DupImageB, MultiChannelImage)
dev_clear_window()
dev_display(MultiChannelImage)
wait_seconds(1)
endfor