测试opencv的仿射函数getAffineTransform以及稀疏矩阵变换transform函数(单点仿射)

本文介绍了如何使用OpenCV的getAffineTransform进行仿射变换,通过实例展示了平移变换的计算过程,并详细解释了transform函数在处理稀疏矩阵变换时的参数设置和数据类型注意事项,强调了数据类型的重要性。
摘要由CSDN通过智能技术生成

图像,也就是图像中的点坐标变换,实际就是通过一个2*3的矩阵计算而变换的。前面2行2列做缩放或者旋转,后面2行1列做平移。方程不会打字,拍了以前的笔记:

现在我用了个最简单的平移仿射做测试,就是x+100, y+50

我以(0,0)(100,0)(0,50)三点平移变换到(100,50)(200,50)(100,100)三点,那么正确的矩阵应该是1 0 100,0 1 50,则正确;

再根据这个仿射矩阵计算(50,25)(100,25)(100,50)这三点仿射后的三点位置,如果结果是(150,75)(200,75)(200,100),则正确;

首先,仿射变换的原型cv::Mat cv::getAffineTransform(const cv::Point2f* src, const cv::Point2f* dst);

这里src和dst是包含三个二维点的数组。 这个很好赋值,但是读取2*3仿射矩阵时,要特别小心数据类型,这个矩阵的元素类型是CV_64FC1,可以通过Mat的type或者depth方法查看,也就是说元素里的数据是double型的,一定要这样affineMat.at<double>(i,j)读取,将double错用了float,int等,将得到毫不相关的错误数据!!

Mat affineMat = getAffineTransform(triangleA, triangleB);
    qDebug() << CV_MAT_DEPTH(affineMat.depth())<< "-----depth";
    for (int i = 0; i < affineMat.rows; i++)
    {
        for (int j = 0; j < affineMat.cols; j++) {
            qDebug() << affineMat.at<double>(i,j);  //这里类型写错成float等就会得到错值
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值