当前位置: 首页 > news >正文

OPENCV 基于旋转矩阵 旋转Point2f

测试效果

创建两个点,让第二个点绕第一个点转45度

代码解析

Mat a; a = imread("D:\\0.bmp", -1);

读取一张图片当作背景板

Point2f p1(350, 150); Point2f p2(550.0f, 150.0f);

创建两个点

cv::Mat mat = getRotationMatrix2D(p1, 45, 1.0);

生成旋转矩阵,中心点为p1

std::vector<cv::Point2f> points = { p2 }; cv::Mat srcPoint(points);

将p2的数据放进一个mat对象中

cv::Mat dstPoint; // 应用变换 cv::transform(srcPoint, dstPoint, mat);

创建结果Mat 执行矩阵变换

float x = dstPoint.at<float>(0, 0); float y = dstPoint.at<float>(0, 1); cv::Point2f rotatedPoint(x, y);

输出结果也是一个Mat对象 从这个Mat对象中取出仿射变换之后的点坐标数据

std::cout << "Rotated Point: " << rotatedPoint << std::endl; circle(mergedImage, p1, 3, Scalar(0, 255, 0), 3, LINE_AA); circle(mergedImage, p2, 3, Scalar(0, 255, 0), 3, LINE_AA); circle(mergedImage, rotatedPoint, 3, Scalar(0, 0, 255), 3, LINE_AA); line(mergedImage,p1,p2, Scalar(0, 255, 255),2,LINE_AA); line(mergedImage, p1, rotatedPoint, Scalar(0, 0, 255), 2, LINE_AA);

三个点坐标数据,绘制到图像上,以便确认执行正确。

原始代码

    Mat a;a = imread("D:\\0.bmp", -1);cv::Mat mergedImage;std::vector<cv::Mat> channels = { a, a, a };cv::merge(channels, mergedImage);Point2f p1(350, 150);Point2f p2(550.0f, 150.0f);cv::Mat mat = getRotationMatrix2D(p1, 45, 1.0);std::vector<cv::Point2f> points = { p2 };cv::Mat srcPoint(points);cv::Mat dstPoint;// 应用变换cv::transform(srcPoint, dstPoint, mat);// 提取结果float x = dstPoint.at<float>(0, 0);float y = dstPoint.at<float>(0, 1);cv::Point2f rotatedPoint(x, y);std::cout << "Rotated Point: " << rotatedPoint << std::endl;circle(mergedImage, p1, 3, Scalar(0, 255, 0), 3, LINE_AA);circle(mergedImage, p2, 3, Scalar(0, 255, 0), 3, LINE_AA);circle(mergedImage, rotatedPoint, 3, Scalar(0, 0, 255), 3, LINE_AA);line(mergedImage,p1,p2, Scalar(0, 255, 255),2,LINE_AA);line(mergedImage, p1, rotatedPoint, Scalar(0, 0, 255), 2, LINE_AA);imshow("1", mergedImage);waitKey();

http://www.dtcms.com/a/361730.html

相关文章:

  • 代码随想录二刷之“回溯”~GO
  • 机器翻译:python库translatepy的详细使用(集成了多种翻译服务)
  • Spring框架入门:从IoC到AOP
  • 爬虫实战练习
  • 如何在Github中创建仓库?如何将本地项目上传到GitHub中?
  • IDEA Spring属性注解依赖注入的警告 Field injection is not recommended 异常解决方案
  • Python绘制多彩多角星实战
  • MyBatis 性能优化最佳实践:从 SQL 到连接池的全面调优指南
  • 链表相关OJ题
  • MongoDB 备份与恢复:mongodump 和 mongorestore 实战
  • NestJS 3 分钟搭好 MySQL + MongoDB,CRUD 复制粘贴直接运行
  • Flutter Container 阴影设置指南 2025版
  • Flutter 完全组件化的项目结构设计实践
  • 复刻elementUI的步骤条Steps
  • 【架构师干货】系统架构设计
  • Pytorch的CUDA版本安装使用教程
  • XGBoost学习笔记
  • docker 数据管理
  • 徐州服务器:机柜租用具体包含哪些内容?
  • 『Java』把Java项目打成Jar包,并引用项目外的Jar依赖
  • Spring Boot 常用注解有哪些?
  • 【MySQL】进阶技术详解
  • 机器学习-时序预测2
  • uniapp使用uview UI,自定义级联选择组件
  • 正则表达式与grep文本过滤详解
  • 盲盒抽谷机小程序开发:如何用3D技术重构沉浸式体验?
  • 【Proteus仿真】8*8LED点阵控制系列仿真——循环显示数字/按键控制显示图案
  • 虚拟机- + linux
  • UFUNCTION C++ 的再次理解
  • 凸集与优化