在使用热像仪的时候可能会出现图片展示效果并不是自己希望得到的情况,这时候我们就可以将获取的温度矩阵重新渲染。
问题:
比如说我们在热像仪上看到的画面是黑白的(疫情防控很重要):
这时候我们希望能获取铁红或者别的图像如:
不废话了,开整。
import cv2 import numpy as np from color_table import get_color_table2.将txt格式温度矩阵读出来
def read_txt(txt_path, height=288, width=384): with open(txt_path, 'r') as f_r: temp = f_r.read().split() data = np.array(temp).reshape((height, width)).astype(np.float) return data
这个场家提供的热像仪采集的温度矩阵是一维的,但是图片是2维的,所以先要把温度矩阵转化好。一般是一个像素点对应一个温度值,不过有有些场家对图片进行超分辨率处理,所以温度矩阵转化后的图片可能会比原始图片模糊一些。这里就不展开了(因为我还不会),这里就对一般情况进行处理。
3.按照比例对温度数值缩减def data2img(data): min_data = np.min(data) max_data = np.max(data) img = (data - min_data) / (max_data - min_data) * 255 return img.astype(dtype=np.uint8)
热像仪采集的图片是三维的,这里的三维和之前的二维不同,画面是二维的,但是图片的渲染方式采用的是rgb的渲染方式, [0, 0, 0] – [255, 255, 255]。所以我将祺称之为三维应该是没有问题。
4.在color_table中找到自己想用的渲染方式进行数值转化def get_pseudo_color_from_gray(gray): gray_shape = gray.shape height, width = gray_shape[0], gray_shape[1] color_table_idx = 11 color_table = get_color_table(color_table_idx) pseudo_color = np.zeros((height, width, 3), np.uint8) for h in range(height): for w in range(width): pseudo_color[h, w, 0] = color_table[gray[h, w]][2] pseudo_color[h, w, 1] = color_table[gray[h, w]][1] pseudo_color[h, w, 2] = color_table[gray[h, w]][0] return pseudo_color
这时候返回的就是384X288X3的一个矩阵。color_table也是之前在网上找的(忘记从哪找的了)可以在我上传的资料中找。
5.将图片保存cv2.imwrite('C:\Users\CH\Desktop0107105342_1_value.png', pseudo_color)
大功告成!!!
哎,今儿大学四年一起上课、一起逃课、一起通宵、一起实习、一起上班、一起合租的伙计去公司的别的地方上班了,心里有点空落落的,挺烦的,天各一方。。。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)