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

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

相关文章

iptables(7)扩展模块state

简介         前面文章我们已经介绍了一些扩展模块,如iprange、string、time、connlimit、limit,还有扩展匹配条件如--tcp-flags、icmp。这篇文章我们介绍state扩展模块  state          在 iptables 的上下文中,--state 选项并不是直接关联于一个扩展模块,而是与 iptables 的 state 匹配机制相关,特

基于CTPN(tensorflow)+CRNN(pytorch)+CTC的不定长文本检测和识别

转发来源:https://swift.ctolib.com/ooooverflow-chinese-ocr.html chinese-ocr 基于CTPN(tensorflow)+CRNN(pytorch)+CTC的不定长文本检测和识别 环境部署 sh setup.sh 使用环境: python 3.6 + tensorflow 1.10 +pytorch 0.4.1 注:CPU环境

python 在pycharm下能导入外面的模块,到terminal下就不能导入

项目结构如下,在ic2ctw.py 中导入util,在pycharm下不报错,但是到terminal下运行报错  File "deal_data/ic2ctw.py", line 3, in <module>     import util 解决方案: 暂时方案:在终端下:export PYTHONPATH=/Users/fujingling/PycharmProjects/PSENe

[FPGA][基础模块]跨时钟域传播脉冲信号

clk_a 周期为10ns clk_b 周期为34ns 代码: module pulse(input clk_a,input clk_b,input signal_a,output reg signal_b);reg [4:0] signal_a_widen_maker = 0;reg signal_a_widen;always @(posedge clk_a)if(signal_a)

基于深度学习的轮廓检测

基于深度学习的轮廓检测 轮廓检测是计算机视觉中的一项关键任务,旨在识别图像中物体的边界或轮廓。传统的轮廓检测方法如Canny边缘检测和Sobel算子依赖于梯度计算和阈值分割。而基于深度学习的方法通过训练神经网络来自动学习图像中的轮廓特征,能够在复杂背景和噪声条件下实现更精确和鲁棒的检测效果。 深度学习在轮廓检测中的优势 自动特征提取:深度学习模型能够自动从数据中学习多层次的特征表示,而不需要

自动驾驶---Perception之Lidar点云3D检测

1 背景         Lidar点云技术的出现是基于摄影测量技术的发展、计算机及高新技术的推动以及全球定位系统和惯性导航系统的发展,使得通过激光束获取高精度的三维数据成为可能。随着技术的不断进步和应用领域的拓展,Lidar点云技术将在测绘、遥感、环境监测、机器人等领域发挥越来越重要的作用。         目前全球范围内纯视觉方案的车企主要包括特斯拉和集越,在达到同等性能的前提下,纯视觉方

spring-boot-maven-plugin多模块install问题

一、问题描述:   项目分多个模块,open-eureka注册中心、open-provider服务提供者、open-common公共部分,provider依赖common。父pom使用spring-boot-maver-plugin插件,项目直接运行Main主类没问题,但是install报common中的类找不到符号. 二、查找问题:   spring-boot-maven-plugin 打

YOLOv9摄像头或视频实时检测

1、下载yolov9的项目 地址:YOLOv9 2、使用下面代码进行检测 import torchimport cv2from models.experimental import attempt_loadfrom utils.general import non_max_suppression, scale_boxesfrom utils.plots import plot_o

上位机图像处理和嵌入式模块部署(mcu和swd接口)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】         最近学习mcu的时候,接触了不少调试器,这里面有daplink、st-link v2、j-link v9。虽然模块的形状可能不太一样,但是硬件的连线都差不多,都是mcu上的3.3v、clk、dio和gnd四根连线。出于好奇,今天花了点时间了解了一下debug port、sw

使用import和exec运行模块文件的异同

使用import和exec运行模块文件的异同 实例代码 #script1.pyimport sysprint(sys.platform)x = 'span'print(x*8) 在cmd中 >>> import script1win32spanspanspanspanspanspanspanspan >>> exec(open('script1.py').read())win