Example: 50-OpenMV-Boards/51-Pure-Thermal/00-HelloWorld/pure_thermal.py

# 本作品采用MIT许可证授权。
# 版权所有 (c) 2013-2024 OpenMV LLC。保留所有权利。
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# 纯热成像示例脚本
#
# 感谢您购买Pure Thermal OpenMV!此示例脚本展示了热成像视频
# 叠加到彩色摄像头图像上,并驱动连接的LCD屏幕和HDMI输出。

import sensor
import image
import time
import display
import fir
import math
import tfp410


# 颜色跟踪阈值(灰度最小值,灰度最大值)
threshold_list = [(200, 255)]

sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.WVGA)
time.sleep_ms(50)

fir.init(fir.FIR_LEPTON)
fir_img = image.Image(fir.width(), fir.height(), sensor.GRAYSCALE)
time.sleep_ms(50)

lcd = display.RGBDisplay(framesize=display.FWVGA, refresh=60)
lcd.backlight(True)
hdmi = tfp410.TFP410()
time.sleep_ms(50)

alpha_pal = image.Image(256, 1, sensor.GRAYSCALE)
for i in range(256):
    alpha_pal[i] = int(math.pow((i / 255), 2) * 255)

to_min = None
to_max = None


def map_g_to_temp(g):
    return ((g * (to_max - to_min)) / 255.0) + to_min


while True:
    img = sensor.snapshot()
    # ta: 环境温度
    # ir: 物体温度(红外阵列)
    # to_min: 最低物体温度
    # to_max: 最高物体温度
    ta, ir, to_min, to_max = fir.read_ir()

    fir.draw_ir(fir_img, ir, color_palette=None)
    fir_img_size = fir_img.width() * fir_img.height()

    # 查找红外斑点
    blobs = fir_img.find_blobs(threshold_list,
                               pixels_threshold=(fir_img_size // 100),
                               area_threshold=(fir_img_size // 100),
                               merge=True)

    # 将统计信息收集到元组列表中
    blob_stats = []
    for b in blobs:
        blob_stats.append((b.rect(), map_g_to_temp(img.get_statistics(thresholds=threshold_list,
                                                                      roi=b.rect()).mean())))
    x_scale = img.width() / fir_img.width()
    y_scale = img.height() / fir_img.height()
    img.draw_image(fir_img, 0, 0, x_scale=x_scale, y_scale=y_scale,
                   color_palette=image.PALETTE_IRONBOW,
                   alpha_palette=alpha_pal,
                   hint=image.BICUBIC)

    # 在彩色图像上绘制内容
    for b in blobs:
        img.draw_rectangle(int(b.rect()[0] * x_scale), int(b.rect()[1] * y_scale),
                           int(b.rect()[2] * x_scale), int(b.rect()[3] * y_scale))
        img.draw_cross(int(b.cx() * x_scale), int(b.cy() * y_scale))
    for blob_stat in blob_stats:
        img.draw_string(int((blob_stat[0][0] * x_scale) + 4), int((blob_stat[0][1] * y_scale) + 1),
                        '%.2f C' % blob_stat[1], mono_space=False, scale=2)

    # 绘制环境、最低和最高温度。
    img.draw_string(4, 0, 'Lepton Temp: %0.2f C' % ta,
                    color=(255, 255, 255), mono_space=False, scale=2)
    img.draw_string(4, 18, 'Min Temp: %0.2f C' % to_min,
                    color=(255, 255, 255), mono_space=False, scale=2)
    img.draw_string(4, 36, 'Max Temp: %0.2f C' % to_max,
                    color=(255, 255, 255), mono_space=False, scale=2)

    lcd.write(img, hint=(image.BILINEAR | image.CENTER | image.SCALE_ASPECT_KEEP))

results matching ""

    No results matching ""