c++版 nms
定义的box是左上角的x、y以及宽度w、高度h
iou计算出来的交集的w、h必须判断是否大于0,这避免了两个框没有交集的情况。如果不判断,可能存在w、h都为负生成iou>0的情况进而影响结果。
+1操作是计算像素点个数,这个地方其实有点没太理解到,但开源的代码都是这么写的。
- #include<iostream>
- #include<vector>
- #include<algorithm>
- #include <stdio.h>
- #include <stdlib.h>
- using namespace std;
- typedef struct Bbox{
- int x;
- int y;
- int w;
- int h;
- float score;
- }Bbox;
- class Solution {
- public:
- static bool sort_score(Bbox box1,Bbox box2){
- return box1.score > box2.score ? true : false;
- }
- float iou(Bbox box1,Bbox box2){
- int x1 = max(box1.x,box2.x);
- int y1 = max(box1.y,box2.y);
- int x2 = min(box1.x+box1.w,box2.x+box2.w);
- int y2 = min(box1.y+box1.h,box2.y+box2.h);
- int w = max(,x2 - x1 + );
- int h = max(,y2 - y1 + );
- float over_area = w*h;
- return over_area/(box1.w * box1.h + box2.w * box2.h - over_area);
- }
- vector<Bbox> nms(std::vector<Bbox>&vec_boxs,float threshold){
- vector<Bbox>results;
- std::sort(vec_boxs.begin(),vec_boxs.end(),sort_score);
- while(vec_boxs.size() > )
- {
- results.push_back(vec_boxs[]);
- int index = ;
- while(index < vec_boxs.size()){
- float iou_value = iou(vec_boxs[],vec_boxs[index]);
- cout << "iou:" << iou_value << endl;
- if(iou_value > threshold)
- vec_boxs.erase(vec_boxs.begin() + index);
- else
- index++;
- }
- vec_boxs.erase(vec_boxs.begin());
- }
- return results;
- }
- };
- int main(){
- Solution a;
- vector<Bbox> input;
- // Bbox box1 = {1,1,1,1,0.3};
- // Bbox box2 = {0,0,2,2,0.4};
- //Bbox box1 = {1,3,2,2,0.3}; //iou为负
- //Bbox box2 = {0,0,2,2,0.4};
- //Bbox box1 = {4,4,2,2,0.3};
- //Bbox box2 = {0,0,2,2,0.4};
- // Bbox box1 = {4,4,1,1,0.3};
- // Bbox box2 = {0,0,2,2,0.4};
- // Bbox box1 = {3,3,1,1,0.3};
- // Bbox box2 = {0,0,2,2,0.4};
- input.push_back(box1);
- input.push_back(box2);
- vector<Bbox> res;
- res = a.nms(input,0.3);
- // for(int i = 0;i < res.size();i++){
- // printf("%d %d %d %d %f",res[i].x,res[i].y,res[i].w,res[i].h,res[i].score);
- // cout << endl;
- // }
- return ;
- }
c++版 nms的更多相关文章
- YOLACT : 首个实时one-stage实例分割模型,29.8mAP/33.5fps | ICCV 2019
论文巧妙地基于one-stage目标检测算法提出实时实例分割算法YOLACT,整体的架构设计十分轻量,在速度和效果上面达到很好的trade-off. 来源:[晓飞的算法工程笔记] 公众号 论文: ...
- 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数006, image,影像处理(像素图)
<zw版·Halcon-delphi系列原创教程> Halcon分类函数006, image,影像处理(像素图) 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“* ...
- 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数004·edge,边缘处理
<zw版·Halcon-delphi系列原创教程> Halcon分类函数004·edge,边缘处理 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替换:“ ...
- 《zw版·delphi与halcon系列原创教程》zw版_THOperatorSetX控件函数列表 v11中文增强版
<zw版·delphi与halcon系列原创教程>zw版_THOperatorSetX控件函数列表v11中文增强版 Halcon虽然庞大,光HALCONXLib_TLB.pas文件,源码就 ...
- 《zw版·delphi与halcon系列原创教程》zw版_THImagex控件函数列表
<zw版·delphi与halcon系列原创教程>zw版_THImagex控件函数列表 Halcon虽然庞大,光HALCONXLib_TLB.pas文件,源码就要7w多行,但核心控件就是两 ...
- zw版_Halcon图像库delphi接口文件
zw版_Halcon图像库delphi接口文件 Halcon图像库delphi接口文件,根据安装时用户设置的文件目录不同,会有所差异,笔者一般安装在delphi的import目录下. 参见:& ...
- 一步步学习操作系统(1)——参照ucos,在STM32上实现一个简单的多任务(“啰里啰嗦版”)
该篇为“啰里啰嗦版”,另有相应的“精简版”供参考 “不到长城非好汉:不做OS,枉为程序员” OS之于程序员,如同梵蒂冈之于天主教徒,那永远都是块神圣的领土.若今生不能亲历之,实乃憾事! 但是,圣域不是 ...
- 非极大值抑制(Non-Maximum Suppression,NMS)
概述 非极大值抑制(Non-Maximum Suppression,NMS),顾名思义就是抑制不是极大值的元素,可以理解为局部最大搜索.这个局部代表的是一个邻域,邻域有两个参数可变,一是邻域的维数,二 ...
- 非极大值抑制(NMS)
转自:https://www.cnblogs.com/makefile/p/nms.html 概述 非极大值抑制(Non-Maximum Suppression,NMS),顾名思义就是抑制不是极大值的 ...
随机推荐
- WPF流程图制作系列相关基础二
我们现在知道 thumb ,可以让用户自行拖动其在 canvas上移动,在这个而基础上 我们可以试着往流程图方向靠近一下. 我们知道,流程图,都是一个一个的流程块,然后用线连起来的,这一个一个的 ...
- 分布式理论基础(一)一致性及解决一致性的两种方式:2PC和3PC (转载 不错)
分布式理论基础(一)一致性及解决一致性的两种方式:2PC和3PC 1 一致性 1.1 简述 一致性,是指对每个节点一个数据的更新,整个集群都知道更新,并且是一致的 假设一个具有N个节点的分布式系统,当 ...
- 【学习笔记】--- 老男孩学Python,day10, 初识函数 形参、实参
函数:对功能的封装语法: def 函数名(形参): 函数体 函数名(实参) 函数名:命名规则和变量一样 函数的返回值: return, 函数执行完毕. 不会执行后面逻辑 1. 如果函数中不写retur ...
- 在php中怎么利用js把参数传递给弹窗
1.在php页面中经常用到把参数传递给弹窗页面,在弹窗页面中操作 2.两种方式,截图为一种 3.最常见的就是利用hideen隐藏域,点击按钮的时候把要传递的参数值传递给隐藏域,需要的时候在弹窗中获取. ...
- package.json中devDependencies与dependencies的区别
前言:之前一直不懂既然都是项目的依赖,为什么要分成两个部分,devDependencies和dependencies,有什么区别? 安装方式 我们在通过npm安装插件或库时,有三种方式: npm in ...
- CSS选择器之基本选择器+属性选择器
1.1 id选择器 #main{ font-size:12px; margin:0; padding:0; } 其中的#main就是id选择器,用于选择HTML页面中id = "m ...
- 五种常用web服务器jvm参数设置
一.tomcat Tomcat默认可以使用的内存为128MB,在较大型的应用项目中,这点内存是不够的,需要调大.有以下几种方法可以选用:第一种方法:在配置文件中设置Windows下,在文件/bi ...
- linux 用户管理修改用户信息、密码状态、删除用户、退出登陆、切换用户
修改用户信息usermoduseradd支持的选项usermod都支持passwd有两个选项-l(在密码串前面加了两个叹号),-u,usermod有两个选项:-L 临时锁定用户(Lock)(在密码串前 ...
- shell_basic
1.回顾基础命令 2.脚本 3.变量 4.别名 5.条件判断 6.test判断 一.回顾基础命令 shutdown --关机/重启 exit --退出当前shell rmdir --删除空目录 d ...
- Linux 查看双节点是否做了SSH信任
perl $AD_TOP/patch/115/bin/txkRunSSHSetup.pl verifyssh -contextfile=$CONTEXT_FILE -hosts=erpapp1,erp ...