python基于图像颜色的火焰识别_基于火焰颜色的识别-程序员宅基地

技术标签: python  

本文基于图像颜色,主要结合RGB和HSI两种判断依据进行火焰识别。
判断依据参考了以下文章,实在是非常感谢!:
OpenCV学习记录之视频中的火焰检测识别
python版基于颜色的火焰识别

判断条件如下:

  1. R>redThre
  2. R>=G>=B
  3. S>0
  4. S>(255-R)/20
  5. S>=((255-R)*sThre/redThre)

具体代码实现:

img = cv2.imread('fire/fire4.jpeg')
redThre = 115  # 115~135红色分量阈值
sThre = 60  # 55~65饱和度阈值

B = img[:, :, 0]
G = img[:, :, 1]
R = img[:, :, 2]

B1 = img[:, :, 0] / 255
G1 = img[:, :, 1] / 255
R1 = img[:, :, 2] / 255
minValue = 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
# HSIS分量计算公式
S = np.array(np.where(sumValue != 0, (1 - 3.0 * minValue / sumValue), 0))
Sdet = (255 - R) / 20
SThre = ((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] = fireImg
meBImg = 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、h
    x, 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(0)

输出结果如下:
在这里插入图片描述
基于颜色的火焰识别,如果图片中除了火焰还有一些橘色、红色等颜色相近的地方,识别效果就会差很多,例如下面,手指也识别出来了。

在这里插入图片描述

针对这个问题,目前我没有找到合适的解决方法,所以接下来准备通过机器学习的方式进行火焰识别(ง •̀_•́)ง

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Zhangrx_/article/details/108796306

智能推荐

Lua中and和or的用法和记忆方法_lua and or 顺序-程序员宅基地

文章浏览阅读7.4k次,点赞7次,收藏7次。Lua中and和or的用法和记忆方法_lua and or 顺序

字符集修改引起的expdp impdp需要重新运行proc加载-程序员宅基地

文章浏览阅读100次。用impdp导入dmp文件出现如下错误 [oracle@localhost~]$ impdp zebra/zebra directory=back dumpfile=zebra20120420.dmp ..._expdp修改字符集

oracle优化书籍推荐_oracle sql优化书籍推荐-程序员宅基地

文章浏览阅读6.2k次。经常听到有做应用的朋友抱怨数据库的性能问题,比如非常低的并发,令人崩溃的响应时间,长时间的锁等待,锁升级,甚至是死锁,等等。本文针对应用开发人员经常接触的性能问题,推荐几本书,请大家关注。 一、《 oracle 9i/10g 编程艺术》内容简介 本书是一本关于Oracle 9j az& 10g数据库体系结构的权威图书,涵盖了所有最重要的Oracle体系结构特性,_oracle sql优化书籍推荐

php 数组分割,php 数组分割的方法-程序员宅基地

文章浏览阅读9.1k次。在 php 编程中,如果遇到数组的元素过多,不方便处理的情况下。我们可以通过分割数组的方法,将其变成一个个的小数组块,这样再处理就方便很多了。php 中预设了一个 array_chunk() 函数,可以将一个数组的元素,按照一定的数量分割成多个数组块。php array_chunk() 函数array_chunk():函数把一个数组分割为新的数组块。语法:array_chunk(array,siz..._php 数组分割

react-native-vision-camera RN相机 初使用小记-程序员宅基地

文章浏览阅读3.7k次,点赞3次,收藏9次。react-native-camera react-native-vision-camera RN拍照 react-native 拍照 相机 扫码 _react-native-vision-camera

2022最新最全Java 进阶资料合集_2022java最新学习资料-程序员宅基地

文章浏览阅读225次。由简到繁,由易到难,一步步的学习,最后成为JAVA攻城狮基础语法,可帮助你建立基本的编程逻辑思维;面向对象,以对象方式去编写优美的Java程序;集合,后期开发中存储数据必备技术;IO,对磁盘文件进行读取和写入基础操作;多线程与并发,提高程序效率;异常,编写代码逻辑更加健全;网络编程,应用服务器学习基础,完成数据的远程传输。 书籍PDF我已经整理好,文末有免费获取方式 下面是资料的列表 按照技术详细的分成了不同的阶段。包括Java基础、WEB前端、JavaEE、高级框_2022java最新学习资料

随便推点

关于arduino程序编译成功但上传失败的情况_arduino编译完成但上传错误-程序员宅基地

文章浏览阅读2w次,点赞6次,收藏7次。注意,此文的前提是驱动已经安装好,端口和开发板都已正确选择;1.正如百度所得的答案。请将0,1接口上的线拔掉再进行上传;2.这是一个比较cd的情况,虽然我们的编辑语言是C语言,而且注释也确实可以通过//来注释,编译可以通过,但是上传不能成功,若在1的情况下无法成功,那么就尝试删掉所有的注释,或将//...注释改为/*...*/!..._arduino编译完成但上传错误

机器学习中的数据预处理_机器学习数据预处理顺序-程序员宅基地

文章浏览阅读1.4k次,点赞2次,收藏5次。以下文章摘录自:《机器学习观止——核心原理与实践》京东:https://item.jd.com/13166960.html当当:http://product.dangdang.com/29218274.html(由于博客系统问题,部分公式、图片和格式有可能存在显示问题,请参阅原书了解详情)————————————————版权声明:本文为CSDN博主「林学森」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.cs._机器学习数据预处理顺序

谈一次java web系统的重构思路_java web 如何做系统重构-程序员宅基地

文章浏览阅读1.7k次。——略谈Java web软件如何提供二次开发接口 作者:朱金灿来源:http://blog.csdn.net/clever101 接手公司的一个Java web软件产品,该软件采用传统的dwr框架。dwr框架相当于一个中间层,使得javascript能够识别Java类对象,进而能够调用Java类对象的方法。该软件要为项目部同事提供二次开发包。 _java web 如何做系统重构

如何一文认识 AngularJS_angularjs理解-程序员宅基地

文章浏览阅读470次。文章目录1、AngularJS 入门1.1、AngularJS 是什么?1.2、HelloWorld2、四个重要概念2 .1、双向数据绑定2.2、依赖注入2.3、MVC模式2.4、MVVM模式3、四个重要对象3.1、作用域3.2、控制器3.3、模块4、三个页面语法4.1、表达式4.2、指令4.3、过滤器1、AngularJS 入门1.1、AngularJS 是什么?Google..._angularjs理解

编写C语言程序,输入每个学生的学号和身高,保存在二进制文件中,并统计每个身高的人数打印出来...-程序员宅基地

文章浏览阅读548次。好的,下面是编写 C 语言程序的示例代码:```#include <stdio.h>#include <stdlib.h>#define MAX_HEIGHT 180 // 定义最大身高// 定义学生结构体typedef struct { int id; // 学号 int height; // 身高} Student;int main(int ar..._请修改以下c语言程序,使得程序正确运行并在屏幕上打印 姓名= sanaka 身高= 180 体

R语言 最优子集选择与K折交叉验证_最优子集法做交叉验证-程序员宅基地

文章浏览阅读8.5k次,点赞2次,收藏26次。## 最优子集选择best_subset_selection &amp;lt;- function(X, Y, Nfolds){# 生成所有可能的组合 m &amp;lt;- ncol(X) idx &amp;lt;- 1:(2^m-1) t &amp;lt;- vector() mat &amp;lt;- sapply(idx, function(id){ t &amp;lt;- rbind(t, as.inte..._最优子集法做交叉验证