OpenCV中,坐标点(Point)利用变换矩阵进行坐标变换

参考:
【OpenCV进行各种矩阵变换及变换参数求解】

在opencv中,在利用 getAffineTransform 等函数得到了变换矩阵后,假如需要进行图像的变换,可以通过 warpAffine进行。
但是假如只是想对Point的坐标进行变换,就需要用transform来进行了。


        ...
        Mat warp_mat = getAffineTransform(srcTri, dstTri);
        ...
        vector<Point2f> srcVec;
        vector<Point2f> dstVec;

        srcVec.push_back(Point2f(1, 2));
        srcVec.push_back(Point2f(3 ,4));

        cv::transform(srcVec, dstVec, warp_mat);

        mLine = QLineF(QPointF(dstVec[0].x, dstVec[0].y), QPointF(dstVec[1].x, dstVec[1].y));
OpenCVSharp 的 warpAffine 函数可以用于对图像进行仿射变换,包括平移、旋转、缩放和剪切等。对于坐标变换,可以通过使用 transformPoints 函数来实现。下面是一个示例代码,演示了如何使用 warpAffine 和 transformPoints 实现坐标变换: ```csharp using OpenCvSharp; // 定义变换矩阵 Mat affineMatrix = new Mat(2, 3, MatType.CV_32FC1); affineMatrix.Set<float>(0, 0, Math.Cos(angle)); affineMatrix.Set<float>(0, 1, -Math.Sin(angle)); affineMatrix.Set<float>(1, 0, Math.Sin(angle)); affineMatrix.Set<float>(1, 1, Math.Cos(angle)); affineMatrix.Set<float>(0, 2, tx); affineMatrix.Set<float>(1, 2, ty); // 定义待变换Point2f[] srcPoints = new Point2f[] { new Point2f(100, 100), new Point2f(200, 100), new Point2f(200, 200), new Point2f(100, 200) }; // 进行仿射变换 Point2f[] dstPoints = new Point2f[srcPoints.Length]; Cv2.TransformPoints(srcPoints, dstPoints, affineMatrix); // 打印变换前后的坐标 for (int i = 0; i < srcPoints.Length; i++) { Console.WriteLine($"src: ({srcPoints[i].X}, {srcPoints[i].Y}) -> dst: ({dstPoints[i].X}, {dstPoints[i].Y})"); } ``` 在上述示例代码,我们首先定义了一个 2x3 的仿射变换矩阵 affineMatrix,其包括旋转和平移变换。然后定义了一个待变换集 srcPoints,包括四个坐标。通过调用 transformPoints 函数,将 srcPoints 变换后得到 dstPoints,最后打印变换前后的坐标
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值