Opencv+YOLO3目标检测/C++

1. 引言

YOLO3能够快速识别图片和视频中的80种物体,而且实时性强,准确度接近SSD。 Opencv是目前最流行的开源图像处理库,使用Opencv能够非常方便的对图像进行处理。 Opencv4.0已经包含DNN相关的库函数,可以非常方便的调用训练好的YOLO3模型使用。

2. 采用YOLO3目标检测

第一步:下载模型

使用wget下载训练号的模型与COCO数据库。 COCO数据库包含了识别的类型名。

wget https://pjreddie.com/media/files/yolov3.weights
wget https://github.com/pjreddie/darknet/blob/master/cfg/yolov3.cfg?raw=true -O ./yolov3.cfg
wget https://github.com/pjreddie/darknet/blob/master/data/coco.names?raw=true -O ./coco.names

第二步:初始化参数

YOLOv3算法的预测结果就是边界框。每一个边界框都旁随着一个置信值。第一阶段中,全部低于置信度阀值的都会排除掉。 对剩余的边界框执行非最大抑制算法,以去除重叠的边界框。非最大抑制由一个参数nmsThrehold控制。读者可以尝试改变这个数值,观察输出的边界框的改变。 接下来,设置输入图片的宽度(inpWidth)和高度(inpHeight)。我们设置他们为416,以便对比YOLOv3作者提供的Darknets的C代码。如果想要更快的速度,读者可以把宽度和高度设置为320。如果想要更准确的结果,改变他们到608。

float confThreshold = 0.5;//置信度阈值
float nmsThreshold = 0.4;//非最大抑制阈值
int inpWidth = 416;//网络输入图片宽度
int inpHeight = 416;//网络输入图片高度

第三步:读取模型和COCO数据库

接下来我们读入COCO数据库并将类名存入vector classes容器。并加载模型与权重文件yolov3.cfg和yolov3.weights。 最后把DNN的后端设置为OpenCV,目标设置CPU。也可以通过cv::dnn::DNN_TARGET_OPENCL设置目标为GPU。

//将类名存进容器
string classesFile = "D:\\Code\\C++\\YOLO3-detecction\\coco.names";//coco.names包含80种不同的类名
ifstream ifs(classesFile.c_str());
string line;
while(getl
  • 4
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值