1.1 visual studio 2017
其他年份的版本也可以
1.2 Pycharm 2022
其他年份的版本也可以
1.3 DJI Thermal Analysis Tool 3
需要去大疆官网下载,下载链接:
大疆红外热分析工具3.0 - 下载中心 - DJI 大疆创新
1.2 TSDK
需要去大疆官网下载,下载链接:
DJI Thermal SDK - 下载中心 - DJI 大疆创新
2. 关于TSDK的相关官方文档预览
链接:TSDK(Thermal SDK)常见问题汇总(持续更新)-开发者-大疆社区
3. 大疆二次开发人员解答网址
如果有关于大疆产品的技术问题还可以在这个网址提问,一般24小时以内会有大疆的开发人员解答
1. 新建项目
打开visual studio 2017,新建一个项目和一个cpp文件,都命名为tsdk
1. 打开TSDK文件
2. 打开sample文件,复制dji_irp.cpp中的代码到tsdk.cpp中
注:tsdk.cpp需要链接argagg.hpp,dirp_api.h和dirp_wrapper.h头文件以及libdirp.lib库文件,后面开始链接
3. 在tsdk.cpp所在文件夹中创建Libs文件,在Libs文件夹中创建icn文件夹和lib文件夹
4. 将下载的TSDK中tsdk-core目录下api文件夹内的文件复制到icn文件夹中
5. 将sample\argparse目录下的文件也放入icn文件夹内;将tsdk-core/lib/windows/release_x64目录下所有.lib文件复制到lib文件夹中
6. visual studio 2017 界面上方选择Debug和x64然后右键tsdk项目生成
注:这里x64一定要选对,不然后面会报错
生成后点击和tsdk.sln文件同个目录的x64文件
6. 打开x64\Debug,将所有.dll文件和.ini文件复制到x64\Debug文件夹下,与tsdk.exe放在一起。
然后开始配置
7. 在tsdk项目中选择调试>tsdk调试属性>C/C++>常规中,将附加包含目录设置为icn文件夹
注:确保界面上方的平台是活动(x64)
8. 在tsdk项目中选择调试>tsdk调试属性>连接器>常规中,将附加库目录设置为lib文件夹
9. 在tsdk项目中选择调试>tsdk调试属性>连接器>输入中,将附加依赖项设置为libdirp.lib
这个名字手打即可
接下来开始在Pycharm中编程,最终生成存储有温度信息的矩阵
10. 通过python代码调用tsdk.exe,批量处理热成像图片,生成存储温度信息的.raw文件。
# 通过python代码调用tsdk.exe,批量处理热成像图片,生成存储温度信息的.raw文件。
import os
tsdk = r'O:\desk\TSDK\tsdk\x64\Debug\tsdk.exe'
##tsdk.exe的储存位置
path ='O:\desk\DJI-red1/'
##拍摄的rJPG的储存位置
savepath = "O:\desk\DJI-red1/"
##处理结果的储存位置
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)
11. .raw转.tif
# 将.raw文件中的值除以10之后为温度值,转为.tif文件以备后续使用。python代码
import os
#调用opencv要用import cv2,用import opencv会报错
import cv2
import numpy as np
savepath = "O:\desk\DJI-red1/"
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[1] == '.raw':
realPath = path + file
img = np.fromfile(realPath, dtype='uint16')
img = img / 10 ##除10之后为温度值
img = img.reshape(rows, cols, channels)
fileName = portion[0] + '.tif'
tif_fileName = os.path.join(path, fileName)
cv2.imwrite(tif_fileName, img, (int(cv2.IMWRITE_TIFF_COMPRESSION), 1))
os.remove(realPath) ##delete .raw file,如有需要,可以不删除
else:
print(file + ' it is not .raw file')
print('to .tif finsh')
raw_to_tif(savepath, 512, 640, 1)
12. 产生img温度矩阵
将最下面的这一行代码注释了
raw_to_tif(savepath, 512, 640, 1)
然后输入以下代码
files = os.listdir(path)
for file in files:
portion = os.path.splitext(file)
if portion[1] == '.raw':
realPath = path + file
img = np.fromfile(realPath, dtype='uint16')
img = img / 10 ##除10之后为温度值
img = img.reshape(512, 640, 1)
fileName = portion[0] + '.tif'
tif_fileName = os.path.join(path, fileName)
cv2.imwrite(tif_fileName, img, (int(cv2.IMWRITE_TIFF_COMPRESSION), 1))
os.remove(realPath) ##delete .raw file,如有需要,可以不删除
13. 运行代码,然后查看img对应的矩阵
14. 使用DJI Thermal Analysis Tool 3查看像素点的温度,和生成的温度矩阵对比,是否有差别