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 ()

————————————————
版權聲明:本文為CSDN博主「c1learning」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/c1learning/article/details/105268843


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM