halcon学习之仿射变换1

本文探讨了Halcon库中的仿射变换,包括如何使用变换矩阵将原点转化为目标点,添加缩放因子到仿射矩阵,以及如何对特定点进行仿射变换操作。

1.根据仿射变换提供的变换矩阵,转化给定原点到目标点

HHomMat2D hommat2d;
    hommat2d.HomMat2dIdentity();//产生一个均匀变换矩阵(单位矩阵,没有实质上转化影响)
    Hlong x = 4, y = 6;
    double result_x, result_y;
    hommat2d.AffineTransPixel(x,y,&result_x,&result_y);//进行像素坐标点的仿射变换
    cout << "result_x:" << result_x << " result_y:" << result_y << endl;

2.添加缩放因子到一个仿射矩阵中。

//添加缩放因子到一个仿射矩阵中。
    HHomMat2D hommat2d_scale = hommat2d.HomMat2dScale(0.5, 0.5, 10.0, 
### Halcon仿射变换的使用方法 #### 创建仿射变换模型 在 Halcon 中,创建仿射变换模型的第一步是初始化一个单位矩阵。这可以通过 `hom_mat2d_identity` 函数实现,该函数返回一个标准的 3×3 单位矩阵用于后续操作[^3]。 ```cpp // 初始化仿射变换矩阵为单位矩阵 hom_mat2d_identity (HomMat2DIdentity) ``` #### 计算特定类型的仿射变换矩阵 为了执行平移、旋转或缩放等操作,需要计算相应的仿射变换矩阵。例如,要绕图像中心旋转一定角度并同时进行缩放: ```cpp // 定义旋转角(度数)和缩放因子 Angle := deg_to_rad(30) // 将角度转换成弧度制 ScaleX := 1.5 // X方向上的缩放比例 ScaleY := 1.5 // Y方向上的缩放比例 // 获取输入图像尺寸以确定中心点位置 get_image_size(Image, Width, Height) // 设置新的原点到图像中心 Row := floor((Height-1)/2) Column := floor((Width-1)/2) // 构建完整的仿射变换矩阵:先移动至新坐标系 -> 执行旋转变换 -> 应用缩放 -> 返回原始坐标系 hom_mat2d_translate(HomMat2DIdentity, Row, Column, HomMat2DTmp) hom_mat2d_rotate(HomMat2DTmp, Angle, 'positive', HomMat2DRotate) hom_mat2d_scale(HomMat2DRotate, ScaleX, ScaleY, Row, Column, HomMat2DScale) hom_mat2d_translate(HomMat2DScale, -Row, -Column, HomMat2DTransformed) ``` #### 对象轮廓线的仿射变换应用 当处理对象轮廓时,可以利用 `affine_trans_contour_xld` 函数来施加之前构建好的仿射变换矩阵给指定的对象轮廓数据集。 ```cpp // 假设已经有一个名为 Contours 的 XLD 类型变量表示目标物体边缘信息 affine_trans_contour_xld(Contours, TransformedContours, HomMat2DTransformed) dev_display(TransformedContours) // 显示变换后的结果 ``` 通过上述过程,在 Halcon 环境下实现了基于自定义参数设置下的仿射几何变化效果展示[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值