如何从热成像图像中检测温度热点并标记高于阈值的区域
热成像超温区域标记实现方案

实现逻辑
热成像图像的像素值(无论灰度还是伪彩格式)都和实际温度呈固定映射关系,我们只要先确定温度-像素的对应规则,筛选出高于阈值的像素点,再提取连通区域做可视化标记即可。
基于Python+OpenCV的实现代码
import cv2 import numpy as np # 1. 加载热成像图像 img = cv2.imread("thermal_input.png") gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 2. 配置温度映射参数(需根据你的热成像设备实际参数修改) min_temp = 20 # 图像最低灰度值对应的实际温度(单位:℃) max_temp = 120 # 图像最高灰度值对应的实际温度(单位:℃) temp_thresh = 70 # 设定的超温阈值(单位:℃) # 计算阈值对应的灰度值 gray_thresh = int((temp_thresh - min_temp) / (max_temp - min_temp) * 255) # 3. 生成超温区域掩码 ret, mask = cv2.threshold(gray_img, gray_thresh, 255, cv2.THRESH_BINARY) # 4. 提取超温区域的连通轮廓 contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # 5. 在原图上标记超温区域 overlay = img.copy() for cnt in contours: # 获取超温区域外接矩形 x, y, w, h = cv2.boundingRect(cnt) # 半透明红色填充超温区域 cv2.rectangle(overlay, (x, y), (x+w, y+h), (0, 0, 255), -1) # 添加超温文字标注 cv2.putText(img, f">{temp_thresh}℃", (x, y-5), cv2.FONT_HERSHEY_SIMPLEX, 0.4, (0,0,255), 1) # 叠加半透明标记层 alpha = 0.3 result_img = cv2.addWeighted(overlay, alpha, img, 1-alpha, 0) # 输出标记完成的结果图 cv2.imwrite("thermal_marked_result.png", result_img)
适配说明
- 若你的热成像设备直接输出16位原始温度数据,可直接读取每个像素的温度值做阈值判断,不需要做灰度-温度换算
- 若输入是RGB伪彩热成像图,需要提前获取设备的色阶-温度映射表,先把RGB值转回对应温度再做阈值判断
- 标记样式可自行调整,比如换成矩形边框、轮廓描边、其他颜色填充等
内容的提问来源于stack exchange,提问作者Imran_Say
相关产品推荐
相关产品推荐

