在用树莓派+MLX90640红外传感器做的简易热成像,树莓派直接通过Python从IIC读取768个字节,应该是一维数组,然后再img.resiza(24,32)形成二维数组,直接在Python中显示如图1,基本上是马赛克效果,
想插值一下,看了算法,如图2,但实例都是有X,Y的,本人太小白了,不知道如何把现有的数组插值,请指点。
图1
from ctypes import *
import numpy as np
from scipy import interpolate
import matplotlib.pylab as pl
import matplotlib as mpl
mlx90640 = cdll.LoadLibrary('./libmlx90640.so')
import matplotlib.pyplot as plt
import time
import smbus
bus=smbus.SMBus(1)
data = bus.read_word_data(0x33,0x800D)
bus.write_word_data(0x33,0x800D,data|0x0380) #设置高帧率模式
#mlx90640 will output 32*24 temperature array with chess mode
temp=(c_float*768)()
ptemp=pointer(temp)
mlx90640.get_mlx90640_temp(ptemp)
time.sleep(1)
mlx90640.get_mlx90640_temp(ptemp)
plt.figure(1)
while True:
mlx90640.get_mlx90640_temp(ptemp)
img = (temp-np.min(temp))/(np.max(temp)-np.min(temp))*255 #归一化
img.resize(32,24) #将一维数组转化为二维数组,便于转化为图片
/#img = img.astype(np.uint8) #opencv处理的话就要
plt.clf()
plt.imshow(img,cmap='jet') # jet/hsv/ranbow/gunplot等颜色模式可以选择
plt.text(16,12,str(round(temp[383],2))+'°C') #显示图像中心的物体温度
plt.pause(0.001)
#代码粘上-----------------
#-------------------以下是参考插值算法-----------------------
"""
绘制热成像图
"""
import numpy as np
import matplotlib.pyplot as mp
#准备数据
num = 1000
x, y = np.meshgrid(np.linspace(-3, 3, 10000),
np.linspace(-3, 3, 10000))
z = (1 - x / 2 + x ** 5 + y ** 3) * np.exp(-x ** 2 - y ** 2)
#绘制图片
mp.figure("imshow", figsize=(8, 6), facecolor="lightgray")
mp.title("imshow", fontsize=18)
mp.imshow(z, cmap="jet", origin="lower")
mp.colorbar()
#p.show()