码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Qt-OpenCV学习笔记--最小包覆矩形--minAreaRect()


    概述

    这个函数用来获取最小包覆矩形。

    由于返回的是旋转矩形,可以比较容易的获得矩形的 旋转角度 、中心坐标 和 顶点的值 ,便于后续的图像处理。

    函数

    1. RotatedRect cv::minAreaRect
    2. (
    3. InputArray points
    4. )
    points轮廓(点的集合)

    测试代码

    1. #include "widget.h"
    2. #include "ui_widget.h"
    3. #include <QDebug>
    4. #include <opencv2/core/core.hpp>
    5. #include <opencv2/highgui/highgui.hpp>
    6. #include <opencv2/imgproc/imgproc.hpp>
    7. #include <vector>
    8. using namespace cv;
    9. using namespace std;
    10. Widget::Widget(QWidget *parent)
    11. : QWidget(parent)
    12. , ui(new Ui::Widget)
    13. {
    14. ui->setupUi(this);
    15. //定义输入和输出图像
    16. Mat src;
    17. Mat dst_gray,
    18. dst_blur,
    19. dst_canny,
    20. dst_dilate;
    21. //载入图像
    22. src = imread("c:/opencv/x6.bmp");
    23. if(src.empty())
    24. {
    25. qDebug()<<"加载图片失败!";
    26. return;
    27. }
    28. //显示
    29. imshow("src",src);
    30. //灰度处理
    31. cv::cvtColor(src,dst_gray,COLOR_BGR2GRAY);
    32. //高斯模糊
    33. GaussianBlur(dst_gray,dst_blur,Size(3,3),0,0);
    34. //边缘检测
    35. Canny(dst_blur,dst_canny,200,220);
    36. //膨胀
    37. dilate(dst_canny,dst_dilate,Mat());
    38. //检测轮廓
    39. vector<vector<Point>> contours;
    40. findContours(dst_dilate,contours,RETR_EXTERNAL,CHAIN_APPROX_NONE);
    41. qDebug()<<contours.size();
    42. //最小包覆矩形
    43. vector<RotatedRect> rect(contours.size());
    44. vector<vector<Point>> box(contours.size());
    45. //克隆
    46. Mat dst= src.clone();
    47. for (uint i=0;i<contours.size();i++)
    48. {
    49. //得到矩形
    50. rect[i]=minAreaRect(contours[i]);
    51. //打印
    52. qDebug()<<rect[i].angle;
    53. //获得矩形顶点
    54. Point2f ps[4];
    55. rect[i].points(ps);
    56. box[i].push_back(ps[0]);
    57. box[i].push_back(ps[1]);
    58. box[i].push_back(ps[2]);
    59. box[i].push_back(ps[3]);
    60. //绘制
    61. polylines(dst,box[i],1,Scalar(0,255,0),2,8,0);
    62. }
    63. //显示
    64. imshow("dst",dst);
    65. }
    66. Widget::~Widget()
    67. {
    68. delete ui;
    69. }

    测试结果

    测试过程中,发现函数 boxPoints() 可以获取旋转矩形的四个顶点,反复实验,发现在C++中,其返回类型居然不是 Point 类型,而是 Mat 类型!若定义为其它类型,运行代码就会报错。着实不方便后续操作,百思不得其解。

    而 Python 接口中,返回类型确是 Point !是的,你没看错! 

    查阅官方文档得知,在C++中可以直接使用 RotatedRect::points 方法,获得旋转矩形的4个顶点。官方文档的相关教程和案例也全部使用的上述方法。

  • 相关阅读:
    易基因|ONT:三代原核甲基化在痤疮杆菌噬菌体表观遗传印迹中的工程选择性研究
    飞瞳引擎™集装箱人工智能AI识别检测云服务,集装箱人工智能集装箱残损检测信息识别,全球港航人工智能/集装箱人工智能领军者中集飞瞳
    kafka3.6.0集群部署
    微信小程序之会议OA首页数据交互,会议状态,会议人数转换,会议室交互,WXS的使用
    Codeforces Round #803 (Div. 2) A. XOR Mixup
    源码编译安装LNMP
    持久与速度 鱼和熊掌 MySQL怎么去兼得
    JVM如何优化
    2022年十三届蓝桥杯国赛(C/C++大学B组)个人题解
    基于ssm的大学生信息管理及就业预测系统
  • 原文地址:https://blog.csdn.net/ssismm/article/details/127896834
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号