对温度矩阵转图片进行补充,之前被问到了,回答时想的简单了。。。
# -- coding: utf-8 --
import cv2
import color_table
import numpy as np
# 热图转换成温度矩阵
# 思路:将图片读取出来,根据color_table中的映射关系将找到原始的温度值
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)
min_tmp = np.min(data)
max_tmp = np.max(data)
return min_tmp, max_tmp
def png_to_matrix(path, min_tmp, max_tmp, save_path):
img = cv2.imread(path)
temp = color_table.get_color_table(11)
tmp_matrix = []
for i in range(len(img)):
for j in range(len(img[i])):
for x in range(len(temp)):
# temp2 = (img[i][j] == temp[x][:3])
y, q = img[i][j], np.flipud(temp[x][:3])
if list(img[i][j]) == list(np.flipud(temp[x][:3])):
temp1 = x / 255 * (max_tmp - min_tmp) + min_tmp
tmp_matrix.append(temp1)
continue
np.reshape(tmp_matrix, (288, 384))
tmp_matrix = np.around(tmp_matrix, 2)
np.savetxt(save_path, tmp_matrix)
if __name__ == '__main__':
path = '2.png'
min_tmp, max_tmp = read_txt('220107105114_1_value.txt')
save_path = 'tmp_matrix.txt'
png_to_matrix(path, min_tmp, max_tmp, save_path)
a = np.loadtxt('tmp_matrix.txt', delimiter=' ')
print(a)
纯暴力计算,时间复杂度O(N^2)
由于将温度矩阵转为热图需要将浮点数转换为整数,故再将热图转换为温度矩阵时会存在偏差。
对比一下转换前后的温度值