opencv+python物体检测【03-模仿学习】

news/2024/4/26 23:17:30/文章来源:https://blog.csdn.net/weixin_47229654/article/details/128956942

仿照练习:原文链接

步骤一:准备图片

正样本集:正样本集为包含“识别物体”的灰度图,一般大于等于2000张,尺寸不能太大,尺寸太大会导致训练时间过长。

负样本集:负样本集为不含“识别物体”的任何图片,一般大于等于5000张,尺寸比正样本集稍大。一般为正样品集的3倍。
效果:

需要识别的物体称为正样本集,不含该物体称为负样本集

正样本集:20张
在这里插入图片描述
负样本集:60张
在这里插入图片描述

步骤二:图片预处理

统一大小
统一改为灰度图

处理后正样本集:
在这里插入图片描述

处理后负样本集:
在这里插入图片描述

步骤三:生成描述文件(.txt文件)

正样本描述文件:
在这里插入图片描述
负样本描述文件:
在这里插入图片描述

步骤四:生成.vec文件

在该主目录文件下打开终端窗口

 .\opencv_createsamples.exe -info pos.txt -vec detect_number.vec -bg neg.txt -num 19 -w 40 -h 40

-info 正样本txt
-vec 是你生成vec文件的位置和名称
-bg 负样本txt
-num 正样本数量
-w 正样本宽度
-h 正样本高度

步骤五:生成自定义分类器文件(.xml)

在该主目录文件下打开终端窗口

./opencv_traincascade.exe -data xml -vec detect_number.vec -bg neg.txt -numPos 19 -numNeg 25 -numStages 20 -featureType HAAR -w 40 -h 40

-data 前面创建好的xml文件夹
-vec 是你之前生成vec文件
-bg 负样本集txt
-numPos 正样本的数量
-numNeg 负样本的数量
-numStages 训练步数
-featureType 特征类型
训练时,提取图像特征的类型,目前只支持LBP、HOG、Haar三种特征。但是HAAR训练非常非常的慢,而LBP则相对快很多,因为HAAR需要浮点运算,精度自然比LBP更高
-w -h 正样本的宽高

在这里插入图片描述

步骤六:识别检测

训练集路径:./xml/cascade.xml
在这里插入图片描述

代码部分::

import cv2 as cv
import osfrom matplotlib import pyplot as plt# 解决中文显示问题,固定格式
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = Falsepospath = "./ini_pos"  # 正样本集文件夹路径
pos = os.listdir(pospath)  # 读取路径下的所有文件
negpath = "./ini_neg"
neg = os.listdir(negpath)# 图片处理,注意图片不能有gif格式
def picdif():global pos, negi = 1for picname in pos:  # 遍历pos文件数组所有的文件名# 读取灰度图pic = cv.imread(pospath + "\\" + picname)pic = cv.cvtColor(pic, cv.COLOR_BGR2GRAY)# 修改尺寸pic = cv.resize(pic, (40, 40))# 保存图片cv.imwrite("./pos/" + str("%03d" % i) + ".jpg", pic)i += 1# 同理对负样本集进行处理j = 1for picname in neg:  # 遍历neg文件数组所有的文件名# 读取灰度图pic = cv.imread(negpath + "\\" + picname)pic = cv.cvtColor(pic, cv.COLOR_BGR2GRAY)# 修改尺寸pic = cv.resize(pic, (50, 50))# 重命名,并保存图片cv.imwrite("./neg/" + str("%03d" % j) + ".jpg", pic)j += 1# 描述文件生成
def createtxt():global pos, neg# 正样本描述文件:for picname in pos:line = "pos/" + picname + " 1 0 0 40 40" + "\n"  # "1"为图片数量(0,0)是坐标,(40,40)是正样本集的w,hwith open('pos.txt', 'a') as f:f.write(line)# 负样本描述文件:for picname in neg:line = "neg/" + picname + "\n"  # (0,0)是坐标,(40,40)是正样本集的w,hwith open('neg.txt', 'a') as f:f.write(line)if __name__ == '__main__':# 1.导入文件夹,对图像统一处理,统一尺寸大小,统一灰度图picdif()# pos和neg改成处理后的图片文件夹;pospath = "./pos"  # 正样本集文件夹路径pos = os.listdir(pospath)  # 读取路径下的所有文件negpath = "./neg"neg = os.listdir(negpath)# 2.正负样本描述文件的生成createtxt()
import cv2 as cv
import matplotlib.pyplot as plt# 解决中文显示问题,固定格式
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False# 加载分类器
cascade = cv.CascadeClassifier("./xml/cascade.xml")
cascade.load("./xml/cascade.xml")
# 读取灰度图片
pic1 = cv.imread("1.jpg")
pic2 = cv.imread("0.jpg")
pic1 = cv.resize(pic1, (100, 100))
pic2 = cv.resize(pic2, (400, 400))
pic2[200:300, 100:200] = pic1
gray = cv.cvtColor(pic2, cv.COLOR_BGR2GRAY)
# 探测图片中的船只
faces = cascade.detectMultiScale(gray,scaleFactor=1.1,minNeighbors=150,minSize=(50, 50),
)
# 绘制矩形
pic3 = pic2.copy()
for (x, y, w, h) in faces:cv.rectangle(pic3, (x, y), (x + h, y + w), (0, 0, 255), 5)
# 绘图
fig, axes = plt.subplots(nrows=1, ncols=2)
axes[0].imshow(pic2[:, :, ::-1])
axes[0].set_title("原图")
axes[1].imshow(pic3[:, :, ::-1])
axes[1].set_title("识别")plt.show()
cv.waitKey()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_255791.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微服务--Gateway网关学习

Gateway服务网关 为什么需要网关 网关功能: 身份认证和权限校验服务路由,负载均衡请求限流 网关的技术实现:在SpringCloud网关的实现包括两种: gatewayzuul Zuul是基于Servlet的实现,属于阻塞式编程。而SpringCloudGa…

车道线检测-E2E_LSFitting 论文学习笔记

论文:《End-to-end Lane Detection through Differentiable Least-Squares Fitting》 代码:https://github.com/wvangansbeke/LaneDetection_End2End 材料:https://zhuanlan.zhihu.com/p/94419168 特点: 拟合二次曲线&#xff1b…

专家说年轻人工资低是能力不行….

我们国家的很多专家总讲究语不惊人死不休,同时他们还很喜欢话风高速原地调头。 最近又有一个碉堡了的专家在大放厥词,就在前几天的首届长白山高峰论坛上中航基金副总经理邓海清发表批评年轻人的言论,邓老板是这么说的:很多年轻人…

synchronized 关键字-监视器锁 monitor lock

1.代码示例: package thread3;import java.util.Scanner;public class Test2 {public static Object object new Object();public static void main(String[] args) throws InterruptedException {Thread thread1 new Thread(() -> {Scanner scanner new Sca…

第五十一章 BFS进阶(一)——双端队列广搜

第五十一章 BFS进阶(一)——双端队列广搜一、原理二、例题1、问题2、分析三、代码一、原理 在介绍双端队列广搜之前,我们先回顾一下堆优化版本的dijkstradijkstradijkstra算法。 在这个算法中,我们使用的是小根堆来找到距离起点…

Windows/VM虚拟机安装黑群晖6.1-----保证有效而且简单操作

1视频:Windows/VM虚拟机安装黑群晖教程_哔哩哔哩_bilibili2:网址:Synology Web Assistant3:重新打开群晖操作步骤1:按着视频下载好资源后,按照视频操作,途中修改地方(两个情况选择其中一个&…

Flowable进阶学习(九)数据对象DataObject、租户Tenant、接收任务ReceiveTask

文章目录一、数据对象DataObject二、租户 Tenant三、接收任务 ReceiveTask案例一、数据对象DataObject DataObject可以⽤来定义⼀些流程的全局属性。 绘制流程图,并配置数据对象(不需要选择任意节点) 2. 编码与测试 /*** 部署流程*/ Test…

函数/任意波形发生器 DG5072 技术资料

函数/任意波形发生器 DG5072 DG5000人性化的界面设计和键盘布局,给用户带来非凡体验;丰富的标准配置接口,可轻松实现仪器远程控制,为用户提供更多解决方案。 产品特性 4.3英寸16M真彩TFT液晶显示屏 350 MHz、250MHz、100 MHz或70…

微信卸载后重装的聊天记录还能找回吗?

很多人微信卸载后,问能不能恢复之前的聊天记录? 我想大家肯定都去百度搜索了,能搜出来可行的办法了么,没有是吧,那就看看我能不能帮到你,根据我的经验来解决。 答:理论上是不能的,因…

详细聊聊spring核心思想

犹记我当年初学 Spring 时,还需写一个个 XML 文件,当时心里不知所以然,跟着网上的步骤一个一个配置下来,配错一个看着 error 懵半天,不知所谓地瞎改到最后能跑就行,暗自感叹 tmd 这玩意真复杂。 到后来用上…

C语言入门教程||C语言 循环||C语言 函数

C语言 循环有的时候,可能需要多次执行同一块代码。一般情况下,语句是顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推。编程语言提供了允许更为复杂的执行路径的多种控制结构。循环语句允许我们多次执…

【Django】云笔记项目

一、介绍 用户可在系统中记录自己的笔记,用户的数据被存储在云笔记平台;用户和用户之间的数据为隔离存储(登陆后才能使用相关笔记功能,且只能查阅自己的笔记) 二、功能拆解 1、用户模块 注册:成为平台…

【Java 面试合集】简述下自定义异常的应用场景

简述下自定义异常的应用场景 1. 概述 如上图所示,我们想回答这个问题就要了解异常的基本结构。哪些是我们可以控制的,哪些是我们不能控制的。 也许有人会问了,其实在逻辑中可以多加判断,为什么要需要自定义呢。 其实判断的内容无…

跳跃游戏 II 解析

题目描述给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处:0 < j < nums[i] i j < n返回到达 nums[n - 1] 的…

【i2c协议介绍】

文章目录协议简单介绍五种速度模式master/slave和transmitter/receiver关系第一种情况&#xff1a;master作为transmitter&#xff0c;slave作为receiver第二种情况&#xff1a;当master作为receiver&#xff0c;slave作为transmitteri2c基本信号start产生stop信号数据传输有效…

基于OpenCV 的车牌识别

基于OpenCV 的车牌识别 车牌识别是一种图像处理技术&#xff0c;用于识别不同车辆。这项技术被广泛用于各种安全检测中。现在让我一起基于 OpenCV 编写 Python 代码来完成这一任务。 车牌识别的相关步骤 1. 车牌检测&#xff1a;第一步是从汽车上检测车牌所在位置。我们将使用…

《Spring揭秘》记录

IOC部分 IOC不等于IOC容器&#xff0c;即使不使用spring&#xff0c;我们也可以使用IOC&#xff0c;只不过spring提供了IOC容器实现。Spring的IoC容器的功能就包含一个提供依赖注入服务的IoC Service Provider。它提供两方面的支持&#xff0c;业务对象的构建管理和业务对象间的…

python读取.stl文件

目录 .1 文本方式读取 1.2 stl解析 1.3 stl创建 .2 把点转换为.stl .1 文本方式读取 代码如下 stl_path/home/pxing/codes/point_improve/data/003_cracker_box/0.stlpoints[] f open(stl_path) lines f.readlines() prefixvertex num3 for line in lines:#print (l…

《里奥哈酒友记》 | 里奥哈的历史—品鉴瑞格尔侯爵葡萄酒

2022年末&#xff0c;里奥哈大使组合怪怪和思羽完成了里奥哈线上活动两大“壮举”&#xff0c;10期《里奥哈酒友记》系列视频和40集《美酒之乡——里奥哈》有声专辑&#xff0c;吸引了许多葡萄酒资深爱好者的目光&#xff0c;也成功地让更多的人了解到里奥哈。由里奥哈推广大使…

windows无法访问指定设备路径或文件怎么办?2个解决方案

有时候Win10电脑打不开程序或文件&#xff0c;windows无法访问指定设备路径或文件该怎么办&#xff1f;原因是什么呢&#xff1f;一般导致这种情况的出现&#xff0c;大多是因为我们的电脑缺乏相应的查看权限&#xff0c;我们只需要通过赋予权限就可以解决这个难题了。 操作环境…