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

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的secrets模块

《一文深入详解Python的secrets模块》在构建涉及用户身份认证、权限管理、加密通信等系统时,开发者最不能忽视的一个问题就是“安全性”,Python在3.6版本中引入了专门面向安全用途的secr... 目录引言一、背景与动机:为什么需要 secrets 模块?二、secrets 模块的核心功能1. 基

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

java对接海康摄像头的完整步骤记录

《java对接海康摄像头的完整步骤记录》在Java中调用海康威视摄像头通常需要使用海康威视提供的SDK,下面这篇文章主要给大家介绍了关于java对接海康摄像头的完整步骤,文中通过代码介绍的非常详细,需... 目录一、开发环境准备二、实现Java调用设备接口(一)加载动态链接库(二)结构体、接口重定义1.类型

C/C++和OpenCV实现调用摄像头

《C/C++和OpenCV实现调用摄像头》本文主要介绍了C/C++和OpenCV实现调用摄像头,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录准备工作1. 打开摄像头2. 读取视频帧3. 显示视频帧4. 释放资源5. 获取和设置摄像头属性

Python logging模块使用示例详解

《Pythonlogging模块使用示例详解》Python的logging模块是一个灵活且强大的日志记录工具,广泛应用于应用程序的调试、运行监控和问题排查,下面给大家介绍Pythonlogging模... 目录一、为什么使用 logging 模块?二、核心组件三、日志级别四、基本使用步骤五、快速配置(bas

双系统电脑中把Ubuntu装进外接移动固态硬盘的全过程

《双系统电脑中把Ubuntu装进外接移动固态硬盘的全过程》:本文主要介绍如何在Windows11系统中使用VMware17创建虚拟机,并在虚拟机中安装Ubuntu22.04桌面版或Ubunt... 目录一、首先win11中安装vmware17二、磁盘分区三、保存四、使用虚拟机进行系统安装五、遇见的错误和解决

Python datetime 模块概述及应用场景

《Pythondatetime模块概述及应用场景》Python的datetime模块是标准库中用于处理日期和时间的核心模块,本文给大家介绍Pythondatetime模块概述及应用场景,感兴趣的朋... 目录一、python datetime 模块概述二、datetime 模块核心类解析三、日期时间格式化与

Python如何调用指定路径的模块

《Python如何调用指定路径的模块》要在Python中调用指定路径的模块,可以使用sys.path.append,importlib.util.spec_from_file_location和exe... 目录一、sys.path.append() 方法1. 方法简介2. 使用示例3. 注意事项二、imp

Python中模块graphviz使用入门

《Python中模块graphviz使用入门》graphviz是一个用于创建和操作图形的Python库,本文主要介绍了Python中模块graphviz使用入门,具有一定的参考价值,感兴趣的可以了解一... 目录1.安装2. 基本用法2.1 输出图像格式2.2 图像style设置2.3 属性2.4 子图和聚

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展