Halcon旋转图像任意角度 不被裁剪

Halcon旋转图像任意角度,保证图像完整性边角不被裁剪,原图旋转后将扩大。(计算旋转后图像尺寸的时候有点问题,待改善……)

dev_update_off ()
optimize_aop ('affine_trans_image', 'byte', 'no_file', ['file_mode','model','parameters'], ['nil','threshold','false'])
set_system ('parallelize_operators', 'true')//只需开一次(默认也是true)

read_image (image_ori, 'C:/Users/Administrator/Desktop/2020-01-02_10_31_56_051.bmp_.png')
get_image_size(image_ori, Width, Height)
get_domain (image_ori, Domain)
get_region_points(Domain, Rows, Columns)

angle:=25

vector_angle_to_rigid (Height/2, Width/2, 0, Height/2, Width/2, rad(angle), HomMat2D)
*****旋转变换前先将'clip_region'置'false',不然超出图像大小的部分区域被裁剪了
set_system ('clip_region', 'false')
affine_trans_region (Domain, RegionAffineTrans, HomMat2D, 'nearest_neighbor')
set_system ('clip_region', 'true')

smallest_rectangle1 (RegionAffineTrans, Row1, Column1, Row2, Column2)
**HeightNew:=Row2-Row1
**WidthNew:=Column2-Column1
HeightNew:=Row2+abs(Row1)+1
WidthNew:=Column2+abs(Column1)+1

count_seconds (Seconds)
count_channels (image_ori, Channels)
***************单通道图像的旋转****************
if(Channels=1)
    get_grayval(image_ori,Rows,Columns,Grayval)
    
    gen_image_const(Image1, 'byte', WidthNew, HeightNew)
    ***关键所在,将旋转之前的图像像素值填到旋转之后新图像的居中位置
    Rows:=Rows+(HeightNew/2-Height/2)
    Columns:=Columns+(WidthNew/2-Width/2)
    set_grayval(Image1,Rows,Columns,Grayval)    
    vector_angle_to_rigid(HeightNew/2, WidthNew/2, 0, HeightNew/2, WidthNew/2, rad(angle), HomMat2D1)
    affine_trans_image(Image1, image_dst, HomMat2D1, 'constant', 'false')    
**************3通道彩色图像的旋转****************
elseif(Channels=3)
    decompose3(image_ori, ImageR, ImageG, ImageB)
    get_grayval(ImageR,Rows,Columns,GrayvalR)
    get_grayval(ImageG,Rows,Columns,GrayvalG)
    get_grayval(ImageB,Rows,Columns,GrayvalB)
    
    gen_image_const(Image1, 'byte', WidthNew, HeightNew)
    gen_image_const(Image2, 'byte', WidthNew, HeightNew)
    gen_image_const(Image3, 'byte', WidthNew, HeightNew)
    Rows:=Rows+(HeightNew/2-Height/2)
    Columns:=Columns+(WidthNew/2-Width/2)
    set_grayval(Image1,Rows,Columns,GrayvalR)
    set_grayval(Image2,Rows,Columns,GrayvalG)
    set_grayval(Image3,Rows,Columns,GrayvalB)
    compose3(Image1, Image2, Image3, MultiChannelImage)
    
    vector_angle_to_rigid(HeightNew/2, WidthNew/2, 0, HeightNew/2, WidthNew/2, rad(angle), HomMat2D1)
    affine_trans_image(MultiChannelImage, image_dst, HomMat2D1, 'constant', 'false')
endif

count_seconds (Seconds1)
Time:=(Seconds1-Seconds)*1000
dev_clear_window ()
dev_display (image_dst)

dev_update_on ()

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值