halcon基础示例之图像变换

功能:实现图像的平移旋转和缩放。

核心由以下三个算子组成:
1.hom_mat2d_identity()
2.hom_mat2d_translate()或者hom_mat2d_rotate()或者hom_mat2d_scale()
3.affine_trans_region()

步骤:
1.首先得到一个3*3的单位矩阵,因为像素点的位置和单位矩阵进行计算并不会产生任何作用,所以以此为基准。
2.改变单位矩阵相应位置的数值,从而使得单位矩阵不再是单纯的单位矩阵。
3.根据矩阵的特性,将其与对应像素点的位置进行运算,从而实现像素点位置的移动。

总结:
图像移动的本质就是对像素点的位置进行矩阵操作。

一.平移
在这里插入图片描述
代码示例:

dev_clear_window()
dev_open_window(0, 0, 512, 512, 'black', WindowHandle)
dev_set_color('red')
draw_region(Region, WindowHandle)

//创建单位矩阵
hom_mat2d_identity(HomMat2DIdentity)
//改造单位矩阵,这里是平移操作,所以向单位矩阵中添加偏移量,100和50就是对应的偏移量
hom_mat2d_translate(HomMat2DIdentity, 100, 50, HomMat2DTranslate)
//将图像的像素点进行矩阵的操作,从而得到新的坐标位置,也就实现了图像的平移
affine_trans_region(Region, RegionAffineTrans, HomMat2DTranslate, 'nearest_neighbor')

dev_clear_window()
dev_set_color('red')
dev_set_draw('margin')
dev_display(Region)
dev_set_color('green')
dev_display(RegionAffineTrans)

二.旋转
在这里插入图片描述
代码示例:

dev_clear_window()
dev_open_window(0, 0, 512, 512, 'black', WindowHandle)
dev_set_color('red')
draw_region(Region, WindowHandle)
area_center(Region, Area, Row, Column)
hom_mat2d_identity(HomMat2DIdentity)
hom_mat2d_rotate(HomMat2DIdentity, 3.14, Row,Column, HomMat2DRotate)
affine_trans_region(Region, RegionAffineTrans, HomMat2DRotate, 'nearest_neighbor')
dev_clear_window()

dev_set_draw('margin')
dev_set_color('red')
dev_display(Region)
dev_set_color('blue')
dev_display(RegionAffineTrans)

三.缩放:
在这里插入图片描述
代码示例:

dev_clear_window()
dev_open_window(0, 0, 512, 512, 'black', WindowHandle)
dev_set_color('red')
draw_region(Region, WindowHandle)
dev_display(Region)

//得到Region的圆心位置
area_center(Region, Area, Row, Column)


hom_mat2d_identity(HomMat2DIdentity)

//第2,3个参数相等,说明图像是按照比例变大或者变小
hom_mat2d_scale(HomMat2DIdentity, 2, 2, Column, Row, HomMat2DScale)
affine_trans_region(Region, RegionAffineTrans, HomMat2DScale, 'nearest_neighbor')
dev_clear_window()
dev_set_color('red')
dev_set_draw('margin')
dev_display(Region)
dev_set_color('blue')
dev_display(RegionAffineTrans)


dev_clear_window()
hom_mat2d_identity(HomMat2DIdentity)
dev_display(Region)
//第2,3个参数的值不同,会产生畸变
hom_mat2d_scale(HomMat2DIdentity, 3, 2, Column, Row, HomMat2DScale1)
affine_trans_region(Region, RegionAffineTrans1, HomMat2DScale1, 'nearest_neighbor')
dev_set_color('red')
dev_display(RegionAffineTrans1)





  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

coder_gaozhiwei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值