1、计算iou
定义
float iou(BBox_struct sign_box, BBox_struct box2)
{
int x1 = std::max(sign_box.x, box2.x);
int y1 = std::max(sign_box.y, box2.y);
int x2 = std::min((sign_box.x + sign_box.w), (box2.x + box2.w));
int y2 = std::min((sign_box.y + sign_box.h), (box2.y + box2.h));
if ((x2 - x1) < 0 || (y2 - y1) < 0)
{
return 0.0;
}
float over_area = (x2 - x1) * (y2 - y1);
float iou = over_area / (sign_box.w * sign_box.h + box2.w * box2.h - over_area);
return iou;
}
调用
float t_iou = iou(crop_sign_box, text_box);
2、判断一个字符串是否包含另一个子字符串
定义
bool contains_str(std::string big, std::string small)
{
std::string::size_type idx;
idx = big.find(small);
if (idx == std::string::npos)
{
return false;
}
else
return true;
}
调用
contains_str(“09000A”, "09")
3、判断一个数组是否包含某个字符串
定义
bool contains_arr(std::string arr[], std::string d)
{
for (int i = 0; i < 7; i++)
{
if (arr[i] == d)
{
return true;
}
}
return false;
}
调用
std::string warning_class[7] = { "08200D","071002","074001","072004","07200C","07200B","073002" };
contains_arr(warning_class, “090002”)
四、c++数组
在c++中的数组有点类似python中的列表。
数组数据结构:可以存储一个固定大小的相同类型元素的顺序集合。
1、声明数组
double balance[10];
2、初始化数组
double balance[5] = {1000.0, 2.0, 3.4, 7.0, 50.0};
3、访问数组元素
double salary = balance[9];
4、二维数组的初始化和访问
int a[3][4] = {0,1,2,3,4,5,6,7,8,9,10,11};
int val = a[2][3];
5、传递数组给函数
通过指定不带索引的数组名称来给函数传递一个指向数组的指针
#include <iostream>
using namespace std;
// 函数声明
double getAverage(int arr[], int size);
int main ()
{
// 带有 5 个元素的整型数组
int balance[5] = {1000, 2, 3, 17, 50};
double avg;
// 传递一个指向数组的指针作为参数
avg = getAverage( balance, 5 ) ;
// 输出返回值
cout << "平均值是:" << avg << endl;
return 0;
}
6、从函数返回数组
参考菜鸟教程
参考https://blog.csdn.net/lishun1422840684/article/details/78773203
c++中函数是不能直接返回一个数组的,但是数组其实就是指针,所以可以让函数返回指针来实现
#include<iostream>
using namespace std;
typedef int arrT[10];//类型别名,表示含有10个整形的数组
//using arrT = int[10]; //arrT的等价声明,c++11版本新加的
int arry[10] = {1,3,5,4,5,11,7,13,9,20};
arrT* func()
{
return &arry;
}
int main()
{
int (*p)[10] =func();
for(int i=0;i<10;i++)
{
cout<<*(*p + i)++<<" "<<endl;
}
return 0;
}