Update:
2020/5/9 Version: 0.0.1 加入OPENCV模块和Buff类,代码主要基于深圳大学开源代码
ver 0.0.1
- 将代码中的较长的函数拆分成更小的函数,便于进行替换。
- 添加一些更具备通用性质的轮子,独立于Detect类内函数,便于拓展到整个项目中。
- 优化算法,特别是替换yolov2和lenet,初步可以考虑用更快的SVM进行替代。
- 尝试将跟踪算法添加到使用中来,相比来说不需要实时运行,能提高效率,但需要一整套的解决方案。跟踪算法可以直接使用OPENCV自带算法(boosting、KCF等)。
- 文档的编写方式需要规范:目的是将函数作为框架式的黑箱使用。
可以使用Size(width,height) ,注意其宽度和高度的顺序是和Mat相反的( Mat(height,width) )。
有一个Point类的成员(x, y),用来表示矩阵左上角。
有一个Size类成员(width, height),用来表示矩阵的大小。
构造方式多样:
1.cv::Rect r;
2.cv::Rect r2(r); 复制构造
3.cv::Rect(x, y, w, h) 值构造
4.cv::Rect(p, sz) 两个成员构造
5.cv::Rect(p1, p2) 两个对角点构造
常用功能:计算面积、提取左上右下的点、判断点是否在矩阵内、集合操作。
有一个Point类成员(x,y),用来表示旋转矩阵中心点。
有一个Size2f类成员(width,height),用来表示矩阵的大小。x轴顺时针旋转所碰到的第一个边为height。
构造方式可以参考Rect类,有复制构造、两个对角点构造、值构造cv::RotatedRect(p,sz,theta)需要一个点、一个大小和一个角度。
角度的确定: width与x轴的夹角,(-90,0]
enum detectMode : 二值化时的红蓝通道相减顺序
class Detect //主要的类,用来检测能量机关的相关参数和函数的封装
{ enum binaryMode //定义使用的颜色空间
enum predictMode //预测模式
struct armorData //装甲板数据,参数有:中心、圆心、角度、象限、是否识别
struct switchParam //切换调试模式
struct DectParam //检测时的参数 调试时在这调整
}
作用:构造函数,目前只是用来加载lenet/yolo
作用:清理已经识别的装甲板信息
作用:当画布(即某张图)中的某个ROI的坐标出了画布,或者其宽度和高度小于0时,返回false
参数:const Rect rect:待测量ROI
const Size size:画布大小
返回:是否在画布内
作用:根据点集使用最小二乘法拟合圆
参数:const vector<Point2f> &points:已有的点集
Point2f &R_center:需要拟合出来的圆心
返回:是否拟合成功
作用:使用的是amorData类的象限和角度,其中角度为[0,90),把角度按照象限的不同映射到[0,360)
参数:const int quadrant:装甲板所在象限(以能量机关中心为原点)
const float angle:装甲板的角度,[0,90)
float &tran_angle:所要求的的[0,360)的角度
返回:是否修改成功
作用:使用yolo目标检测得目标区域,需要输入3通道的图片
参数:const Mat src:待检测图片
Mat &dect_src:从src检测得到的ROI区域
Point2f &offset:偏移量(一般从setImage函数中获得)
返回:是否检测成功
作用:在摄像头上直接获取的图片src中取出固定大小、中心为能量机关的图片,便于处理但需要把offset信息也输出
参数:const Mat src:原始图像
Mat &dect_src:待获得的中心为能量机关的图像,也是src的ROI
Point2f &offset:dect_src在src的左上角点
返回:是否取出所需ROI
作用:根据不同的bMode进行不同的二值化,目的是二值化图上只有灯条是白色区域
参数:const Mat src:待二值化图像
Mat &binary:二值化后的图像
int bMode:二值化模式,可选值为BGR、HSV、BGR_useG、OTSU、GRAY、YCrCb、LUV,可用整数1~7代替
返回:是否二值化成功
作用:从图片中检测装甲板
参数:const Mat src:待检测图像
const int bMode:二值化处理模式
armorData &data:待检测装甲板信息
Point2f offset:偏移量(一般从setImage函数中获得)
返回:是否检测成功
ps:数据填充步骤中,tran_angle简略示意图: