我正在使用来自 github 的现有脚本来计算 flir 相机的像素温度。可以在此处找到原始项目https://github.com/Nervengift/read_thermal.py/blob/master/flir_image_extractor.py我正在尝试自动化脚本以针对给定文件夹中的所有图像运行。该脚本适用于大多数文件,但我不时遇到问题,导致脚本中断。我得到的官方错误是这样的:
Traceback (most recent call last):
File ".\flir_image_extractor.py", line 288, in <module>
fie.process_image(args.input)
File ".\flir_image_extractor.py", line 63, in process_image
self.thermal_image_np = self.extract_thermal_image()
File ".\flir_image_extractor.py", line 150, in extract_thermal_image
thermal_np = raw2tempfunc(thermal_np)
File "C:\Users\sai.peri\AppData\Local\Programs\Python\Python37-32\lib\site-packages\numpy\lib\function_base.py", line 2091, in __call__
return self._vectorize_call(func=func, args=vargs)
File "C:\Users\sai.peri\AppData\Local\Programs\Python\Python37-32\lib\site-packages\numpy\lib\function_base.py", line 2167, in _vectorize_call
outputs = ufunc(*inputs)
File ".\flir_image_extractor.py", line 149, in <lambda>
PO=meta['PlanckO'], PR2=meta['PlanckR2']))
File ".\flir_image_extractor.py", line 196, in raw2temp
print("PB: {} LOG: {}".format(PB, log(PR1 / (PR2 * (raw_obj + PO)) + PF) - 273.15))
ValueError: math domain error
在跟踪之后,我添加了变量以打印出 PB 和 log 函数,因为这些是用于计算温度的(计算温度的线是这样的,temp_celcius = PB / log(PR1 / (PR2 * (raw_obj + PO)) + PF) - 273.15
我正在使用平均值,所以我可以选择忽略一些像素(尽管这会对我的结果有影响,虽然可能很小)。我已经打印出 PB 和 LOG 的值,直到出现异常:
PB: 1428 LOG: -263.82261856683573
PB: 1428 LOG: -260.9464780172497
PB: 1428 LOG: -262.7915360578767
PB: 1428 LOG: -262.7915360578767
PB: 1428 LOG: -263.09963560725936
PB: 1428 LOG: -262.7915360578767
PB: 1428 LOG: -262.90511447579644
PB: 1428 LOG: -261.8717079609195
我假设最后一个条目是最后一个成功的计算,而在下一个它失败了。到底发生了什么,我该如何解决这个问题以保留实际的合法价值?我曾尝试联系该项目的所有者,但没有成功。我要提前感谢您的帮助。
编辑:我已经打印出进入日志函数的变量的值。有了这些值,我去了 wolfram alpha 并得出了 -273.39416898307 的值,因此计算结果变为 1428/-273.39416898307 = -5.223227 作为实际温度值。我不确定为什么会出现此错误,因为所有先前的 LOG 函数在 -273 减法时都是负数。用于导致错误的值以及我用 wolfram 检查的值是这样的:PB: 1428 PR1: 17096.453 PR2: 0.062614508 raw_obj + PO: -1260325.936342655 PF: 1
使用等式:temp_celcius = PB / log(PR1 / (PR2 * (raw_obj + PO)) + PF) - 273.15