[opencv]Rect集合象限法分类聚合 函数

/**
* 矩形拟合
* @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集合象限法分类聚合 函数的更多相关文章
- SQL Server温故系列(4):SQL 查询之集合运算 & 聚合函数
1.集合运算 1.1.并集运算 UNION 1.2.差集运算 EXCEPT 1.3.交集运算 INTERSECT 1.4.集合运算小结 2.聚合函数 2.1.求行数函数 COUNT 2.2.求和函数 ...
- 集合运算 & 聚合函数
SQL 查询之集合运算 & 聚合函数 1.集合运算 1.1.并集运算 UNION 1.2.差集运算 EXCEPT 1.3.交集运算 INTERSECT 1.4.集合运算小结 2.聚合函数 ...
- SQL Server数据库--》top关键字,order by排序,distinct去除重复记录,sql聚合函数,模糊查询,通配符,空值处理。。。。
top关键字:写在select后面 字段的前面 比如你要显示查询的前5条记录,如下所示: select top 5 * from Student 一般情况下,top是和order by连用的 orde ...
- Django 数据聚合函数 annotate
统计各个分类下的文章数 2 周,3 日前 字数 3818 阅读 546 评论 21 在我们的博客侧边栏有分类列表,显示博客已有的全部文章分类.现在想在分类名后显示该分类下有多少篇文章,该怎么做呢?最优 ...
- Django之数据聚合函数 annotate
在我们的博客侧边栏有分类列表,显示博客已有的全部文章分类.现在想在分类名后显示该分类下有多少篇文章,该怎么做呢?最优雅的方式就是使用 Django 模型管理器的annotate方法. 模型回顾 回顾一 ...
- Day03:集合、文件处理和函数基础
上节课复习: 1.总结 可变/不可变: 可变类型:list,dict 不可变类型:int,float,str,tuple ...
- Mongodb学习笔记四(Mongodb聚合函数)
第四章 Mongodb聚合函数 插入 测试数据 ;j<;j++){ for(var i=1;i<3;i++){ var person={ Name:"jack"+i, ...
- 数据查询语言DQL 与 内置函数(聚合函数)
数据查询语言DQL 从表中获取符合条件的数据 select select*from表的名字 查询表所有的数据.(select跟from必须一块用 成对出现的) * 表示所有字段,可以换成想要查询的 ...
- SQL语句汇总(三)——聚合函数、分组、子查询及组合查询
聚合函数: SQL中提供的聚合函数可以用来统计.求和.求最值等等. 分类: –COUNT:统计行数量 –SUM:获取单个列的合计值 –AVG:计算某个列的平均值 –MAX:计算列的最大值 –MIN:计 ...
随机推荐
- Spark(十)【RDD的读取和保存】
目录 一.文件类型 1.Text文件 2.Json文件 3.对象文件 4.Sequence文件 二.文件系统 1. MySQL 2. Hbase 一.文件类型 1.Text文件 读写 读取 scala ...
- Scala(四)【集合基础入门】
目录 一.Array 二. List 三.Set 四.Tuple 五.Map 一.Array package com.bigdata.scala.day01 /** * @description: 不 ...
- EBS 抓trace 文件
如果要对FORM的操作做TRACE操作,可以使用 帮助->诊断->跟踪 中启用跟踪功能来实现. 但是如果要实现对并发请求的trace,需要在 系统管理员->并发->方案-> ...
- HGAME2021 week3 pwn writeup
一共放出五道题,都不是很难. blackgive 考栈转移,值得注意的一点是转移过去先填充几个ret,因为如果直接在转移过去的地方写rop链,执行起来会覆盖到上面的一些指针,导致程序不能正常输入和输出 ...
- HMS Core版本发布公告
新增动作捕捉能力.通过简单拍摄即可获得人体3D骨骼关键点数据,广泛应用于虚拟形象.体育运动和医学分析等场景: 3D物体建模能力iOS版本上线. 查看详情>> 新增道路吸附能力.可根据坐标点 ...
- vscode提示提示安装似乎损坏,请重新安装
安装 Fix VSCode Checksums 插件 Ctrl+Shift+P , 输入Fix Checksums : Apply, 点击,重启即可
- JAVA获取六位随机数
public static String getSixNum() { String str = "0123456789"; StringBuilder sb = new Strin ...
- Maven配置使用阿里云镜像
在settings.xml文件中的mirrors下添加mirror标签 <!-- 阿里云仓库 --> <mirror> <id>alimaven</id> ...
- ARTS Week 18
Algorithm 本周的 LeetCode 题目为 55. 跳跃游戏 给定一个非负整数数组 nums, 你最初位于数组的 第一个下标 .数组中的每个元素代表你在该位置可以跳跃的最大长度.判断你是否能 ...
- vc mfc listctrl使用虚拟列表 虚拟列表用法
note 虚拟列表可有效加载大量数据 需要处理listctrl的 LVN_GETDISPINFO 消息 使用虚拟列表 不能 使用 insert的方法插入数据,而是告诉listctrl 当前要显示多少行 ...