halcon图像旋转不丢角
如果一张0度的图,经过旋转一定角度,不加处理,四个角肯定会消失在视野中,那怎么才能做到不丢四角的旋转呢.
算法很简单,用最小外接正方形的方法去生成旋转矩阵就可以,这样做到旋转之后不丢角.
read_image (Image, ‘printer_chip/printer_chip_01’)
获取图像宽和高
get_image_size (Image, Width, Height)
旋转图像的最小外接正方形边长
minImageWidth:=sqrt(WidthWidth+HeightHeight)
minImageHeight:=sqrt(WidthWidth+HeightHeight)
*设置旋转的角度
Angle:=15
*建立旋转矩阵,这里将原图旋转15°
vector_angle_to_rigid ( Height/2,Width/2, 0, minImageHeight/2, minImageHeight/2, rad(Angle), HomMat2D)
*获取图像的通道数
count_channels (Image, Channels)
*如果是单通道图像
if (Channels1)
*生成一个画布
gen_image_const (Image1, ‘byte’, minImageWidth, minImageHeight)
*将image放到画布上
overpaint_gray (Image1, Image)
*图片旋转
affine_trans_image (Image1, ImageAffineTrans, HomMat2D, ‘constant’, ‘false’)
get_image_size (ImageAffineTrans, Width1, Height1)
dev_clear_window ()
dev_display (ImageAffineTrans)
*如果是三通道彩色图像
elseif (Channels3)
*分解三通道图像
decompose3 (Image, 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, MultiChannelImage)
dev_clear_window ()
dev_display (MultiChannelImage)
endif