树莓派外接摄像头火焰检测模块

2024-02-26 22:30

本文主要是介绍树莓派外接摄像头火焰检测模块,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

import cv2
import time
import numpy as np# 打开摄像头
cap = cv2.VideoCapture(0)   # 参数0表示自己电脑的摄像头,1则一般表示电脑外接的摄像头# 设置开始时间
start_time = time.time()
# 设置帧率
frame_rate = 2  # 每秒两帧# 循环读取摄像头数据
while True:# 检查是否需要读取下一帧elapsed_time = time.time() - start_timeif elapsed_time < 1 / frame_rate:continue# 读取一帧视频数据ret, frame = cap.read()if not ret:break# 进行火焰检测img = frame  # 直接将收集到的帧率当作图片使用redThre = 115  # 指的是115~135红色分量阈值sThre = 65  # 指的是55~65饱和度阈值B = img[:, :, 0]G = img[:, :, 1]R = img[:, :, 2]B1 = img[:, :, 0] / 255G1 = img[:, :, 1] / 255R1 = img[:, :, 2] / 255minValue = np.array(np.where(R1 <= G1, np.where(G1 <= B1, R1, np.where(R1 <= B1, R1, B1)), np.where(G1 <= B1, G1, B1)))sumValue = R1 + G1 + B1# HSI中S分量计算公式S = np.array(np.where(sumValue != 0, (1 - 3.0 * minValue / sumValue), 0))Sdet = (255 - R) / 20SThre = ((255 - R) * sThre / redThre)# 判断条件fireImg = np.array(np.where(R > redThre, np.where(R >= G, np.where(G >= B, np.where(S > 0, np.where(S > Sdet, np.where(S >= SThre, 255, 0), 0), 0), 0), 0), 0))gray_fireImg = np.zeros([fireImg.shape[0], fireImg.shape[1], 1], np.uint8)gray_fireImg[:, :, 0] = fireImgmeBImg = cv2.medianBlur(gray_fireImg, 5)kernel = np.ones((5, 5), np.uint8)ProcImg = cv2.dilate(meBImg, kernel)# 绘制矩形框contours, _ = cv2.findContours(ProcImg, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)ResImg = img.copy()for c in range(0, len(contours)):# 获取矩形的左上角坐标(x,y),以及矩形的宽和高w、hx, y, w, h = cv2.boundingRect(contours[c])l_top = (x, y)r_bottom = (x + w, y + h)cv2.rectangle(ResImg, l_top, r_bottom, (255, 0, 0), 2)cv2.imshow("RESULT", ResImg)c = cv2.waitKey(1)# 更新开始时间start_time = time.time()# 释放资源
cap.release()
cv2.destroyAllWindows()

 应该是直接使用颜色阈值去检测的原因还是什么,代码实际火焰检测效果有些差强人意,准备后面直接使用yolo尝试训练一下,看能不能有其它更好的效果;

虽然在代码编写的时候是在pycharm中,但是由于后续如果要使用的话就必须要在树莓派主控板中运行,为了照顾树莓派的性能,特意使用跳帧的方法,降低了单位时间内需要判断火焰位置的图片数量。

实际应用过程中,可以发现代码受到光照的影响是比较严重的。

这篇关于树莓派外接摄像头火焰检测模块的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/750354

相关文章

Python sys模块的使用及说明

《Pythonsys模块的使用及说明》Pythonsys模块是核心工具,用于解释器交互与运行时控制,涵盖命令行参数处理、路径修改、强制退出、I/O重定向、系统信息获取等功能,适用于脚本开发与调试,需... 目录python sys 模块详解常用功能与代码示例获取命令行参数修改模块搜索路径强制退出程序标准输入

Python pickle模块的使用指南

《Pythonpickle模块的使用指南》Pythonpickle模块用于对象序列化与反序列化,支持dump/load方法及自定义类,需注意安全风险,建议在受控环境中使用,适用于模型持久化、缓存及跨... 目录python pickle 模块详解基本序列化与反序列化直接序列化为字节流自定义对象的序列化安全注

C#自动化实现检测并删除PDF文件中的空白页面

《C#自动化实现检测并删除PDF文件中的空白页面》PDF文档在日常工作和生活中扮演着重要的角色,本文将深入探讨如何使用C#编程语言,结合强大的PDF处理库,自动化地检测并删除PDF文件中的空白页面,感... 目录理解PDF空白页的定义与挑战引入Spire.PDF for .NET库核心实现:检测并删除空白页

python pymodbus模块的具体使用

《pythonpymodbus模块的具体使用》pymodbus是一个Python实现的Modbus协议库,支持TCP和RTU通信模式,支持读写线圈、离散输入、保持寄存器等数据类型,具有一定的参考价值... 目录一、详解1、 基础概念2、核心功能3、安装与设置4、使用示例5、 高级特性6、注意事项二、代码示例

Python中logging模块用法示例总结

《Python中logging模块用法示例总结》在Python中logging模块是一个强大的日志记录工具,它允许用户将程序运行期间产生的日志信息输出到控制台或者写入到文件中,:本文主要介绍Pyt... 目录前言一. 基本使用1. 五种日志等级2.  设置报告等级3. 自定义格式4. C语言风格的格式化方法

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

Python脚本轻松实现检测麦克风功能

《Python脚本轻松实现检测麦克风功能》在进行音频处理或开发需要使用麦克风的应用程序时,确保麦克风功能正常是非常重要的,本文将介绍一个简单的Python脚本,能够帮助我们检测本地麦克风的功能,需要的... 目录轻松检测麦克风功能脚本介绍一、python环境准备二、代码解析三、使用方法四、知识扩展轻松检测麦

Nginx添加内置模块过程

《Nginx添加内置模块过程》文章指导如何检查并添加Nginx的with-http_gzip_static模块:确认该模块未默认安装后,需下载同版本源码重新编译,备份替换原有二进制文件,最后重启服务验... 目录1、查看Nginx已编辑的模块2、Nginx官网查看内置模块3、停止Nginx服务4、Nginx

python urllib模块使用操作方法

《pythonurllib模块使用操作方法》Python提供了多个库用于处理URL,常用的有urllib、requests和urlparse(Python3中为urllib.parse),下面是这些... 目录URL 处理库urllib 模块requests 库urlparse 和 urljoin编码和解码

创建springBoot模块没有目录结构的解决方案

《创建springBoot模块没有目录结构的解决方案》2023版IntelliJIDEA创建模块时可能出现目录结构识别错误,导致文件显示异常,解决方法为选择模块后点击确认,重新校准项目结构设置,确保源... 目录创建spChina编程ringBoot模块没有目录结构解决方案总结创建springBoot模块没有目录