记录我用TSDK处理热成像图片的过程
TSDK的环境配置
由于不会调用SDK,所以我将下载的TSDK中sample文件夹用VS打开,找到dji_irp.cpp文件,复制代码。创建新的项目,创建tsdk.cpp文件,将代码粘贴进去。
tsdk.cpp需要链接argagg.hpp,dirp_api.h和dirp_wrapper.h头文件以及libdirp.lib库文件。在tsdk.cpp所在文件夹中创建Libs文件夹,在Libs文件夹中创建icn文件夹和lib文件夹。将下载的TSDK中tsdk-core目录下api文件夹内的文件复制到icn文件夹中,将sample\argparse目录下的文件也放入icn文件夹内;将tsdk-core/lib/windows/release_x64目录下所有.lib文件复制到lib文件夹中,将所有.dll文件和.ini文件复制到tsdk.cpp所在文件夹中x64\Debug文件夹下,与tsdk.exe放在一起。
在tsdk项目中选择调试>tsdk调试属性>C/C++>常规中,将附加包含目录设置为icn文件夹;在tsdk项目中选择调试>tsdk调试属性>连接器>常规中,将附加库目录设置为lib文件夹;在tsdk项目中选择调试>tsdk调试属性>连接器>输入中,将附加依赖项设置为libdirp.lib。至此配置成功。
在调试>tsdk调试属性>调试中输入命令参数-h再运行可以查看帮助
TSDK的调用
通过python代码调用tsdk.exe,批量处理热成像图片,生成存储温度信息的.raw文件。
import os
tsdk = r'C:\Users\poppip\source\repos\tsdk\x64\Debug\tsdk.exe'
##tsdk.exe的储存位置
path='F:/thermalsensingimage/DCIM/DJI_202207221723_011_/'
##拍摄的rJPG的储存位置
savepath = "C:/Users/poppip/Desktop/test/tempture/DJI_202207221723_011_/"
##处理结果的储存位置
os.makedirs(savepath,exist_ok=True)
distance=25.0
emissivity=0.95
humidity=45
reflection=51.8
##参数根据实际情况设置
def use_tsdk(tsdk, path, savepath):
print('start')
imgnamelist=os.listdir(path)
for imgname in imgnamelist:
if "T" in imgname:
##带T的图像是温度图像
portion = os.path.splitext(imgname)
coreimgname = portion[0]
param = '-s '+ path + imgname + ' -a measure -o ' + savepath + coreimgname + '.raw' + ' --distance ' + str(distance) + ' --emissivity '+ str(emissivity) +' --humidity '+ str(humidity) + '--reflection ' + str(reflection)
##选择的模式是measure输出的结果是温度信息,不是原始信息
r_v = os.system(tsdk+' '+param)
print (r_v)##输出的为tsdk.exe运行的返回值
use_tsdk(tsdk, path, savepath)
.raw转.tif
将.raw文件中的值除以10之后为温度值,转为.tif文件以备后续使用。python代码
import os
import opencv
import numpy as np
savepath = "C:/Users/poppip/Desktop/test/tempture/DJI_202207221723_011_/"
def raw_to_tif(path, rows, cols, channels):
print('to .tif start')
files = os.listdir(path)
for file in files:
portion = os.path.splitext(file)
if portion[