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

OpenCV和Qt坐标系不一致问题

 OpenCV和QT坐标系导致绘图精度下降问题。

OpenCV和Qt常用的坐标系都是笛卡尔坐标系,但是细微处有些不同。

01

OpenCV坐标系

OpenCV是图像处理库,是以图像像素为一个坐标位置,即一个像素对应一个坐标,所以其坐标系也叫图像坐标系。如下所示。其中坐标(1,1)表示红色方块的位置。

1f8495a2b9fc6c1fbe12e80da0a585db.png

02

Qt坐标系

Qt是用于创建图形用户界面(GUI)应用程序,是可以处理亚像素坐标的。坐标(0,0)和(1,0)之间,还有很多坐标,比如(0.5,0)。具体如下所示。

39f81eafadadbf19ef214ee28b3c19b2.png

03

两种绘制多边形对比

比如多边形的点集坐标是{(0,0), (1,0), (2,1), (1,2), (0,1)},分别使用Qt和OpenCV去绘制。绿色的轮廓是OpenCV,红色的是Qt,两者相差较大。当然这是精确到像素级别了,如果绘制的轮廓很大,不放大看是感受不到差别的。

7a97f993c0e2192e7c0f52dcdc180801.png

使用具体的代码绘制对比如下。

opencv代码

const cv::Point* ppt[1] = { contour.data() };int npt[] = { int(contour.size()) };cv::fillPoly(mask, ppt, npt, 1, cv::Scalar(125,0,0));

效果如下

cf64dc111e486dd801de2521b2075c29.jpeg

Qt代码。

// 设置画笔并绘制多边形painter->setPen(pen);painter->setBrush(Qt::blue);  // 不填充painter->drawPolygon(m_points);

e30de1cf8f8bb1e083ca60fc2f2feba7.jpeg

// 设置画笔并绘制多边形painter->setPen(pen);painter->setBrush(Qt::NoBrush);  // 不填充painter->drawPolygon(m_points);

18aebe29b92f42322914107dbcff18cb.jpeg

可以看到QT绘制的轮廓相对于OpenCV整体往左上角偏移了一点点,轮廓范围也缩小了。


http://www.kler.cn/a/406093.html

相关文章:

  • numpy中的nan填充
  • FPGA实现串口升级及MultiBoot(九)BPI FLASH相关实例演示
  • win10右键文件卡顿解决
  • 《Object类》
  • SQL注入的那些面试题总结
  • 大模型呼入系统是什么?
  • window 中安装 php 环境
  • 云高性能计算 CHPC :基因研究的加速器(二)使用Docker工作流示例
  • PID多变量解耦控制
  • Spring Boot3.x自动配置不生效的排查与解决:IDEA 文件夹命名导致的问题
  • 大数据学习17之Spark-Core
  • wordpress二开-WordPress新增页面模板-说说微语
  • 深入理解TensorFlow中的形状处理函数
  • 鸿蒙MVVM模式介绍与使用
  • 数字IC后端笔试面试题库 | 经典时序Timing计算题
  • 解决复杂查询难题:如何通过 Self-querying Prompting 提高 RAG 系统效率?
  • 如何创建软件设计文档(+方法步骤)
  • Admin.NET框架前端由于keep-alive设置缓存导致的onUnmount未触发问题
  • C:mbedtls库实现https双向认证连接示例_七侠镇莫尛貝大侠20241122
  • Linux的基础开发工具
  • dockerfile构建Nginx镜像练习二(5-2)
  • 代码随想录第三十八天
  • Pulid:pure and lightning id customization via contrastive alignment
  • 华为HCCDA云技术认证--数据库服务
  • 上海乐鑫科技总代理商ESP32-C5,2.45GHz双频Wi-Fi6,高效连接更安全
  • 向量数据库FAISS之六:如何让FAISS更快