当前位置: 首页 > news >正文

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

仿照练习:原文链接

步骤一:准备图片

正样本集:正样本集为包含“识别物体”的灰度图,一般大于等于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()

相关文章:

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

仿照练习:原文链接 步骤一:准备图片 正样本集:正样本集为包含“识别物体”的灰度图,一般大于等于2000张,尺寸不能太大,尺寸太大会导致训练时间过长。 负样本集:负样本集为不含“识别物体”的…...

计算机科学基础知识第二节讲义

课程链接 运行环境:WSL Ubuntu OMZ终端 PS:看到老师终端具有高亮和自动补全功能,我连夜肝出oh-my-zsh安装教程,实现了此功能。 这节课主要讲变量的语法、控制流程、shell功能等内容。 修改终端用户名,输入密码后重启…...

openssl genrsa 命令详解

文章目录一、openssl genrsa 命令介绍二、openssl genrsa 命令的语法及选项三、实例1、生成512位的 RSA 秘钥,输出到屏幕。2、生成512位 RSA 私钥,输出到指定的文件 genrsa.txt3、生成 1024 位 RSA 秘钥,采用 des 算法加密,加密密…...

C语言标准 —— C89(C90)、C99、C11、C17、C2X

C语言主要的三个标准:C89(C90)、C99、C11、K&R C 指的是 C 语言的原始版本。1978年,C 语言的发明者丹尼斯里奇(Dennis Ritchie)和布莱恩柯林(Brian Kernighan)合写了一本…...

基于Java+Dubbo设计的智能公交查询系统

一、项目背景 随着经济的飞速发展,人们的生活质量有了较大的提高,城市居民的出行变得越来越频繁,城市交通也面临越来越多的挑战。城市公共交通具有客流量大、成本低、效率高、节约资源等优势,因此,如何大力发展公交产业,鼓励人们乘坐公交出行,进而改善交通状况,是一个值得思考…...

go语言的并发编程

并发编程是 Go语言的一个重要特性,而 go语言也是基于此而设计出来的。 本文将会介绍如何使用go-gc中的“runtime”方法实现 go语言中的并发编程。 在之前的文章中,我们已经对 runtime方法进行了详细介绍,这次文章将对 runtime方法进行深入分析,并讲解如何在go-gc中使用该方…...

亚马逊要求UL94防火测试阻燃测试标准及项目

UL94认证是什么?分几个等级?是如何表示各等级?带电的产品上架亚马逊都需要相关的UL报告,需要有ISO 17025资质的实验室出具的测试报告才能正常销售和恢复链接,UL94防火测试则是其中一项。UL94试验共有五种:1.B级的水平燃烧试验2.…...

ClickHouse 合并树表引擎 MergeTree 原理分析

目录 前言 MergeTree 存储 MergeTree思想 MergeTree存储结构 MergeTree查询 索引检索 数据Sampling 数据扫描 建表​ 数据存储​...

用YOLOv8推荐的Roboflow工具来训练自己的数据集

YOLOv8是Ultralytics公司开发的YOLO目标检测和图像分割模型的最新版本,相较于之前的版本,YOLOv8可以更快速有效地识别和定位图像中的物体,以及更准确地分类它们。 作为一种深度学习技术,YOLOv8需要大量的训练数据来实现最佳性能。…...

三层交换机【实验】

目录 1、要求: 2、拓扑: 3、创建vlan和端口定义并划入vlan: 4、创建以太网中继Eth-Trunk使sw1和sw2的相互冗余并且不浪费链路: 5、使用mstp定义组和对应的根: 6、配置网关冗余: 7、核心层的路由的IP配…...

Anolis 8.6 部署 Kafka 3.3.1 安装和测试(二)

动态初始化Kafka消费者实例一.Kafka 环境搭建二.动态初始化消费者1.Topic定义2.方法处理器工厂3.参数解析器(Copy SpringBoot 源码)4.消费接口和消费实现5.动态初始化1.关键类简介2.动态初始化实现一.Kafka 环境搭建 参考:Kafka搭建和测试 …...

sed和awk

文章目录1、sed的简单介绍2、sed的使用方法2.1 命令行格式2.2 案例2.3 sed结合正则使用2.4 脚本格式3、awk的简单介绍4、awk的使用方法4.1 命令行模式4.2 脚本模式5、awk内部相关变量5.1 案例6、awk工作原理7、awk进阶使用8、awk脚本编程8.1 案例1、sed的简单介绍 sed是流编辑…...

使用STM32 CUBE IDE配置STM32F7 用DMA传输多通道ADC数据

我的使用环境: 硬件:STM32F767ZGT6、串口1、ADC1、16MHz晶振、216MHz主频 软件:STM32 CUBE IDE 优点:不用定时触发采样,ADC数据是不停的实时更新,ADC数据的更新频率根据采样时钟和采样周期决定,…...

linux 学习(持续更新)

一:初识linux 新装操作环境: mac intel电脑 CentOS系统版本:CentOS-8.1.1911 在这里解释一下[chenllocalhost /]$这句话的含义: chenl是用户名,也就是你自己起的名字。 是分割的符号 localhost是主机名,也…...

Nacos【一】Nacos集群部署配置

系列文章目录 暂无 文章目录系列文章目录前言一、Nacos集群架构1.ip直连2. SLB3. 域名-SLB二、集群部署准备2.1 机器准备2.2 Nginx安装配置1.安装2.负载均衡配置2.3 nacos安装配置1.nacos节点2. MySQL准备1.Docker安装MySQL2. nacos对应数据库初始化三、 集群启动1.失败原因汇…...

“亚洲一号”也能上市?REITs背后的物流设施风起云涌

京东最近发生了两件大事,两件都与物流基础设施有关。 一件是2月8日,嘉实京东仓储物流封闭式基础设施证券投资基金(简称“京东仓储REIT”)正式登陆上交所,投资者获得了机会,去分享京东三处物流园区的收益&a…...

2023养老展,CBIAIE第十届中国北京国际老年产业博览会

8月招商季,第十届中国(北京)国际老年产业博览会再次盛大举办; CBIAIE北京国际老年产业博览会位域优势: ——北京,中国首都,世界一线城市,地处中国北部、华北平原北部,东…...

【Android -- 每日一问】现在 Android 怎么学?学什么?

不管在任何行业,任何岗位,初级技术人才总是供大于求;不管任何行业、岗位,技术过硬的也都是非常吃香的! 这几年 Android 新技术的迭代明显加速了,有来自外部跨平台新物种的冲击,有去 Java 化的商…...

JVM垃圾回收

概述 Java是支持自动垃圾回收的,有些语言不支持自动垃圾回收(C)自动垃圾回收不是Java的首创 垃圾是什么? 在 JVM 中垃圾是指在运行程序中没有任何指针指向的对象,这个对象就是需要被回收的垃圾。 哪些区域需要回收…...

clickhouse集群安装

单机安装 yum install yum-utilsrpm --import https://repo.clickhouse.com/CLICKHOUSE-KEY.GPGyum-config-manager --add-repo https://repo.clickhouse.com/rpm/clickhouse.reposudo yum install clickhouse-server clickhouse-client 配置文件 vim /etc/clickhouse-serve…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)&#xff…...

从面试角度回答Android中ContentProvider启动原理

Android中ContentProvider原理的面试角度解析,分为​​已启动​​和​​未启动​​两种场景: 一、ContentProvider已启动的情况 1. ​​核心流程​​ ​​触发条件​​:当其他组件(如Activity、Service)通过ContentR…...

OD 算法题 B卷【正整数到Excel编号之间的转换】

文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的:a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...