/**
* 矩形拟合
* @param mats
* @return
*/
vector<Rect> PublicCardFrameDetection::RectContainFit(vector<Rect> rects,Mat src) { //获取图像中心坐标
int src_w = src.cols;
int src_h = src.rows;
Point2i center = (Point2i(src_w/2),Point2i(src_h/2));
Rect rect_center (int(src_w/3),int(src_h/3),int(src_w/3),int(src_h/3));
// rectangle(src,rect_center.tl(),rect_center.br(),cv::Scalar(255,255,255),5,8);
//存放结果Rect区域
vector<Rect> results;
vector<Rect> roi_tl; //左上
vector<Rect> roi_tr; //右上
vector<Rect> roi_bl; //左下
vector<Rect> roi_br; //右下
vector<Rect> roi_center; //中间
int size = rects.size();
for (auto rct : rects){
Point2i tl_pt = rct.tl();
Point2i tr_pt = Point2i(rct.tl().x + src_w,rct.tl().y);
Point2i br_pt = rct.br();
Point2i bl_pt = Point2i(rct.br().x - src_w,rct.br().y);
Point2i center_pt = (tl_pt+br_pt)/2;
//rect是否落在中间3*3的九宫格区域
if ((tl_pt.x < rect_center.tl().x && tl_pt.y < rect_center.tl().y) &&
(br_pt.x < rect_center.br().x && br_pt.y < rect_center.br().y)){
if ((tl_pt.x + rct.width < rect_center.tl().x + rect_center.width) &&
(tl_pt.y + rct.height < rect_center.tl().y + rect_center.height))
roi_center.emplace_back(rct);
} //rect在中心点center左上方
if (center_pt.y < center.y && center_pt.x > center.x){
// if (br_pt.x < center.x && br_pt.y < center.y &&
// bl_pt.x < center.x && bl_pt.y < center.y)
roi_tr.emplace_back(rct);
}
//rect在中心点center右上方
if (center_pt.y < center.y && center_pt.x > center.x){
// if (br_pt.x < center.x && br_pt.y < center.y &&
// bl_pt.x < center.x && bl_pt.y < center.y)
roi_tl.emplace_back(rct);
}
//rect在中心点center左下方
if (center_pt.y > center.y && center_pt.x > center.x){
// if (tl_pt.x > center.x && tl_pt.y > center.y &&
// tr_pt.x < center.x && tr_pt.y < center.y)
roi_br.emplace_back(rct);
}
//rect在中心点左下方
if (center_pt.y > center.y && center_pt.x < center.x){
// if (tl_pt.x > center.x && tl_pt.y > center.y &&
// tr_pt.x < center.x && tr_pt.y < center.y)
roi_bl.emplace_back(rct);
} }//for_end //若rect落在正中间,说明识别单卡片,直接返回results结果
// if (!roi_center.empty()){
// rectangle(src,roi_center[0].tl(),roi_center[0].br(),cv::Scalar(0,0,255),5,8);
// results.emplace_back(roi_center[0]);
// imshow("rectangle",src);
// waitKey(0);
// return results;
// } else {
//否则,说明识别多卡片,对卡片进行排序
//顺序为:逆时针==>左上,左下,右下,左上
//若四个方向的集合为空,存入原图分割后的四个象限
if (roi_tl.empty()) {
Rect tl(0,0,src_w/2,src_h/2);
roi_tl.emplace_back(tl);
}
if (roi_bl.empty()) {
Rect bl(0,src_h/2,src_w/2,src_h/2);
roi_bl.emplace_back(bl);
}
if (roi_br.empty()) {
Rect br(src_w/2,src_h/2,src_w/2,src_h/2);
roi_br.emplace_back(br);
}
if (roi_tr.empty()) {
Rect tr(src_w/2,0,src_w/2,src_h/2);
roi_tr.emplace_back(tr);
}
//Scalr(BGR)
rectangle(src,roi_tl[0].tl(),roi_tl[0].br(),cv::Scalar(0,0,255),5,8);
rectangle(src,roi_bl[0].tl(),roi_bl[0].br(),cv::Scalar(255,0,0),5,8);
rectangle(src,roi_br[0].tl(),roi_br[0].br(),cv::Scalar(0,255,0),5,8);
rectangle(src,roi_tr[0].tl(),roi_tr[0].br(),cv::Scalar(255,0,255),5,8);
imshow("rectangle",src);
waitKey(0);
results.emplace_back(roi_tl[0]);
results.emplace_back(roi_bl[0]);
results.emplace_back(roi_br[0]);
results.emplace_back(roi_tr[0]);
// }
return results;
}

[opencv]Rect集合象限法分类聚合 函数的更多相关文章

  1. SQL Server温故系列(4):SQL 查询之集合运算 & 聚合函数

    1.集合运算 1.1.并集运算 UNION 1.2.差集运算 EXCEPT 1.3.交集运算 INTERSECT 1.4.集合运算小结 2.聚合函数 2.1.求行数函数 COUNT 2.2.求和函数 ...

  2. 集合运算 & 聚合函数

    SQL 查询之集合运算 & 聚合函数   1.集合运算 1.1.并集运算 UNION 1.2.差集运算 EXCEPT 1.3.交集运算 INTERSECT 1.4.集合运算小结 2.聚合函数 ...

  3. SQL Server数据库--》top关键字,order by排序,distinct去除重复记录,sql聚合函数,模糊查询,通配符,空值处理。。。。

    top关键字:写在select后面 字段的前面 比如你要显示查询的前5条记录,如下所示: select top 5 * from Student 一般情况下,top是和order by连用的 orde ...

  4. Django 数据聚合函数 annotate

    统计各个分类下的文章数 2 周,3 日前 字数 3818 阅读 546 评论 21 在我们的博客侧边栏有分类列表,显示博客已有的全部文章分类.现在想在分类名后显示该分类下有多少篇文章,该怎么做呢?最优 ...

  5. Django之数据聚合函数 annotate

    在我们的博客侧边栏有分类列表,显示博客已有的全部文章分类.现在想在分类名后显示该分类下有多少篇文章,该怎么做呢?最优雅的方式就是使用 Django 模型管理器的annotate方法. 模型回顾 回顾一 ...

  6. Day03:集合、文件处理和函数基础

    上节课复习:    1.总结        可变/不可变:            可变类型:list,dict            不可变类型:int,float,str,tuple         ...

  7. Mongodb学习笔记四(Mongodb聚合函数)

    第四章 Mongodb聚合函数 插入 测试数据 ;j<;j++){ for(var i=1;i<3;i++){ var person={ Name:"jack"+i, ...

  8. 数据查询语言DQL 与 内置函数(聚合函数)

    数据查询语言DQL 从表中获取符合条件的数据 select select*from表的名字   查询表所有的数据.(select跟from必须一块用 成对出现的) * 表示所有字段,可以换成想要查询的 ...

  9. SQL语句汇总(三)——聚合函数、分组、子查询及组合查询

    聚合函数: SQL中提供的聚合函数可以用来统计.求和.求最值等等. 分类: –COUNT:统计行数量 –SUM:获取单个列的合计值 –AVG:计算某个列的平均值 –MAX:计算列的最大值 –MIN:计 ...

随机推荐

  1. day07 Linux配置修改

    day07 Linux配置修改 昨日回顾 1.系统目录 /etc :系统配置目录 /bin-> /usr/bin :保存常用命令的目录 /root :超级管理员目录 /home :普通管理员目录 ...

  2. 数仓day03-----日志预处理

    1. 为什么要构建一个地理位置维表(字典) 在埋点日志中,有用户的地理位置信息,但是原始数据形式是GPS坐标,而GPS坐标在后续(地理位置维度分析)的分析中不好使用.gps坐标的匹配,不应该做这种精确 ...

  3. pyqt5 的串口编写进度

    2020.12.18 今天遇到一个问题, 想用回车实现串口数据的发送. 下面这句话是让光标移动到文字的尾部,但是不能够实现. 对QTextEdit控件中的文字改写,或清除后,再调用下面的移动到尾部,就 ...

  4. listView 多布局

    最近在开发项目中遇到了实现类似淘宝首页的需求,使用listView可以解决,在此记录一下. 实现步骤: 重写 getViewTypeCount() – 返回你有多少个不同的布局 重写 getItemV ...

  5. zabbix之二进制安装

    #:参考官方网站 https://www.zabbix.com/documentation/4.0/manual/installation/install_from_packages/debian_u ...

  6. 【Service】【Database】【Cache】Redis

    1. 简介: 1.1. redis == REmote DIctionary Server 1.2. KV cache and store, in-memory, 持久化,主从(sentinel实现一 ...

  7. 通过Jedis操作Redis

    package com.yh; import org.junit.After; import org.junit.Before; import org.junit.Test; import redis ...

  8. FindUserByPageServlet

    package com.hopetesting.web.servlet;import com.hopetesting.domain.PageBean;import com.hopetesting.do ...

  9. uni-app使用腾讯地图注意点

    地图map组件使用腾讯地图自定义样式: 1:在使用地图map组件腾讯地图时,获取本地定位,经纬度转地址与地址转经纬度解析时,小程序可以直接使用.但是h5版本会报跨域问题,目前前端没有找到更好的解决方法 ...

  10. HMAC在“挑战/响应”(Challenge/Response)身份认证的应用

    HMAC的一个典型应用是用在"挑战/响应"(Challenge/Response)身份认证中. 认证流程 (1) 先由客户端向服务器发出一个验证请求. (2) 服务器接到此请求后生 ...