C++ OPENCV 获得两矩形的交集矩形

2023-11-19

获得两个矩形的交集,该交集类型也是矩形

在这里插入图片描述
这种情况就范围交集的矩形,蓝色部分;

在这里插入图片描述
这种情况返回 cv::Rect(cv::Point(0,0),cv::Point(0,0) );

欢迎测试,提BUG;


/** @brief 获得两个矩形的交集
@param rect1; rect2 is lds range.
@output cv::Rect 交集
 */
cv::Rect get_IOU(cv::Rect rect1, cv::Rect rect2){


    // 横向和纵向距离
    cout <<"input " << rect1 << rect2 << endl;
    cv::Point center_rect1 = (rect1.tl()+rect1.br()) * 0.5;
    cv::Point center_rect2 = (rect2.tl()+rect2.br()) * 0.5;
    cout <<"input center" << rect1 << rect2 << endl;
    auto verti_dis = abs(center_rect1.x - center_rect2.x);
    auto horiz_dis = abs(center_rect1.y - center_rect2.y);
    // 高度和宽度之和的一半
    auto half_w = (rect1.width + rect2.width) / 2;
    auto half_y = (rect1.height + rect2.height) / 2;
    cout << verti_dis << " " << half_y << " " << verti_dis << " " << half_w << endl;

    if ( horiz_dis < half_y && verti_dis < half_w) {
        int x_tl , x_br, y_tl, y_br;

        if(rect1.tl().x > rect2.tl().x){
            if(rect1.br().x > rect2.br().x){
                x_tl = rect1.tl().x;
                x_br = rect2.br().x;
            } else{
                x_tl = rect1.tl().x;
                x_br = rect1.br().x;
            }
        } else{
            if(rect1.br().x > rect2.br().x){
                x_tl = rect2.tl().x;
                x_br = rect2.br().x;
            } else{
                x_tl = rect2.tl().x;
                x_br = rect1.br().x;
            }
        }


        if(rect1.tl().y > rect2.tl().y){
            if(rect1.br().y > rect2.br().y){
                y_tl = rect1.tl().y;
                y_br = rect2.br().y;
            } else{
                y_tl = rect1.tl().y;
                y_br = rect1.br().y;
            }
        } else{
            if(rect1.br().x > rect2.br().y){
                y_tl = rect2.tl().y;
                y_br = rect2.br().y;
            } else{
                y_tl = rect2.tl().y;
                y_br = rect1.br().y;
            }
        }

        cv::Point tl(x_tl, y_tl);
        cv::Point br(x_br, y_br);
        return cv::Rect(tl, br);

    }
    return cv::Rect(cv::Point(0,0),cv::Point(0,0) );


}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ OPENCV 获得两矩形的交集矩形 的相关文章

随机推荐

  • jar包与war包部署的区别及jar包部署的一个路径访问问题

    1 jar包与war包部署的区别 什么是jar包 jar包是类的归档文件 jar文件格式以流行的ZIP文件格式作为基础 和ZIP文件不一样的是 JAR文件不仅仅用来进行压缩和发布 还用来部署和封装库 组件以及插件程序 并且 还能够被像编译器
  • 《Centos7——logstash启动报错》

    logstash启动报错 root localhost systemctl start logstash Failed to start logstash service Unit not found 解决方法 root localhost
  • python入门指南

    python入门指南 python是一门简单易学且功能强大的编程语言 它拥有高效的高级数据结构 并且能够简单而又高效的方式进行面向对象编程 python是一门解释性语言 因为无需编译和链接 在开发中节省时间 使用python解释器 调用py
  • docker容器无法启动, no space left on device

    背景 通过jekens 部署服务 发现部署失败 后通过手动拉取镜像发现直接报错 报错大致意思就是没有剩余可用空间 复现路径 如下操作 启动容器docker start 3ad663158cf6 报错 Error response from
  • Free C, C++ Compilers(免费的C/C++编译器)

    以下内容来源于 http www programmerworld net resources c compiler htm 1 Free Microsoft eMbedded Visual C Microsoft eMbedded Visu
  • 一分钟搞定微信小程序定位(wx.getLocation)功能

    欢迎大家来到我的一分钟系列 跟大家安利一分钟系列主要让大家快速完成一个功能少踩不必要的坑 先完成功能再悟其中的原理 这期主要为大家提供微信小程序的定位功能 换不多说 直接上干货 首先微信官方提供的wx getLocation 应用之后发现这
  • python采集keep运动数据

    我国2009年确立 全民健身日 2012年 广泛开展全民健身运动 写入十八大报告 到2014年上升为国家战略 全民健身的分量越来越重 推动全民健身和全民健康深度融合 通过全民健身实现全民健康 全民健身运动在我国越来越普及 每天清晨和傍晚时分
  • Umi+Dva初印象<基础应用,结构,流转逻辑>

    目录 前言 知识储备 generator函数 Dva初识 实际交互 函数式组件 class组件 前言 项目初始为umi脚手架进行初始化 lt 初始化过程 http t csdn cn cuTaY gt 工程中加载了umi自带的antd ui
  • 记一次开源PR

    提示 不要懒得看英文文档 要认真看别人的贡献文档 否则会浪费更多的时间 开源PR一般流程 1 远程仓库fork 2 你得发现bug或有优化修改 提交到fork的仓库 3 提issue 沟通 4 提PR 5 机器审核 修改问题 6 等待人工审
  • 【微信支付】分享一个失败的项目

    这个项目是去年做的 开始客户还在推广 几个月后发现服务器已经关掉了 这是一个发图片猜谜语的应用 用户猜对了分红包 所得奖金可以提现 开发的时候对需求都不太看好 觉得用户粘性太低了 今天就把所有的程序拿了出来 供有兴趣的伙伴玩耍 用户从公众号
  • C++Primer第三章习题

    3 2 编写一段程序从标准输入中一次读入一整行 然后修改该程序使其一次读入一个词 include
  • UITableViewCell 设置单元格选中后只显示一个打勾的状态

    UITableViewCell 设置单元格选中后只显示一个打勾的状态 2013 06 28 22 28 33 转载 标签 ios tableviewcell it 分类 iOS 今天做个表格 突然发现在选中某行时打勾 再次选中其它行时 上次
  • (最简单详细)关于nginx配置解决页面刷新以后404 Not Found和403 Forbidden

    仔细看我下面所说 每一步都是坑 1 页面刷新404 Not Found 1 问题原因 web单页面开发模式 只有一个index html入口 其他路径是前端路由去跳转的 nginx没有对应这个路径 所以就会报404了 2 解决方法 增加tr
  • Linux中常见目录操作和文件操作命令

    pwd命令 用于查看显示当前所在目录 ls命令 用于显示指定目录中的文件或子目录的信息 cd命令 用于切换当前用户所在的工作目录 其中路径可以是绝对路径 也可以是相对路径 mkdir命令 用于创建目录 rm命令 用于删除文件或目录 touc
  • QQ被盗后,如何找回好友

    QQ被盗了 可以再申请一个号码 但是QQ里面的好友却无法再申请了 特别是一些重要的联系人也丢失了 下面的方法可以帮你找回好友 1 确认电脑中保存着被盗QQ号码的登录记录 也就是QQ安装目录下的包含这个号码为目录名的子目录 如果你采用的是网吧
  • Ubuntu下工作空间的创立以及思岚系列激光雷达的使用(详细)和驱动安装及地图创建

    环境 ubuntu20 04 双系统 其他环境也是可以的 首先我们需要先创建rplidar ros的工作空间 这里为推荐从源码处下载 我将介绍两种创建工作空间的方法 1 直接创建 比较简单 个人推荐 mkdir p catkin ws sr
  • qt, connect参数,Qt::DirectConnection,Qt::QueuedConnection

    connect用于连接qt的信号和槽 在qt编程过程中不可或缺 它其实有第五个参数 只是一般使用默认值 在满足某些特殊需求的时候可能需要手动设置 Qt AutoConnection 默认值 使用这个值则连接类型会在信号发送时决定 如果接收者
  • 期货开户手续费的组成和收费模式

    期货公司的费用 公开透明 不会私自提高费率 A级别的期货公司 不会私自提高期货投资者的交易费率 不会私自提高期货投资者的保证金比例 说一下投资者最关系的费率问题 期货投资交易的手续费是由两部分组成 1 交易所手续费 这个是固定标准也是市场上
  • linux安装nacos集群

    一 前置环境 java nacos mysql 3台vm 192 168 5 171 192 168 5 172 192 168 5 181 一台配置好其他都一样的 1 下载安装包 https github com alibaba naco
  • C++ OPENCV 获得两矩形的交集矩形

    获得两个矩形的交集 该交集类型也是矩形 这种情况就范围交集的矩形 蓝色部分 这种情况返回 cv Rect cv Point 0 0 cv Point 0 0 欢迎测试 提BUG brief 获得两个矩形的交集 param rect1 rec