Files
HPI/library/functions.py
tangchao0503 98cf134cca 第一次提交
1、hpi的可用代码;
2、修复了多次点击曝光后,福亮度数据错误的问题;
3、定标方式为大的蓝菲积分球的标准能量曲线,而不是基于asd的能量曲线;
2022-09-06 22:54:14 +08:00

145 lines
5.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# -*- coding:utf-8 -*-
'''
本模块是各种工具函数
'''
import sys, os
import numpy as np
def get_path():
'''
本函数说明https://pythonhosted.org/PyInstaller/runtime-information.html#using-sys-executable-and-sys-argv-0
:return: 返回运行程序的绝对路径
'''
frozen = 'not'
if getattr(sys, 'frozen', False):
# we are running in a bundle
bundle_dir = sys._MEIPASS
# print('we are running in a bundle(pyinstaller打包程序)!')
else:
# we are running in a normal Python environment
# bundle_dir = os.path.dirname(os.path.abspath(__file__)) # 此行代码返回的是本文件的路径,而不是本文件所导入的文件的路径
bundle_dir = os.getcwd()
# print('we are running in a normal Python environment(非pyinstaller打包程序)!')
return bundle_dir
def get_resource_path(relative_path):
'''
本函数说明https://www.zacoding.com/en/post/python-selenium-to-exe/
:param relative_path:
:return:
'''
try:
base_path = sys._MEIPASS
except Exception:
base_path = os.getcwd()
return os.path.join(base_path, relative_path)
def percentile_stretching(img, lowPercentile=0, highPercentile=100, minout=0, maxout=255):
'''
本程序用于拉伸影像
:param img:
:param lowPercentile:
:param highPercentile:
:param minout:
:param maxout:
:return:
'''
if len(img.shape) == 2:
low = np.percentile(img, lowPercentile)
up = np.percentile(img, highPercentile)
img_new = ((img - low) / (up - low)) * (maxout - minout) + minout
img_new[img_new < minout] = minout
img_new[img_new > maxout] = maxout
img_out = np.uint8(img_new)
return img_out
else: # 对于彩色照片,需要先单独对每个波段拉伸
img_new = np.empty(img.shape)
for i in range(img.shape[2]):
low = np.percentile(img[:, :, i], lowPercentile)
up = np.percentile(img[:, :, i], highPercentile)
img_new[:, :, i] = minout + ((img[:, :, i] - low) / (up - low)) * (maxout - minout)
img_new[:, :, i][img_new[:, :, i] < minout] = minout
img_new[:, :, i][img_new[:, :, i] > maxout] = maxout
img_out = np.uint8(img_new)
return img_out
def return_file_path(out, filepath, filename, model='image'):
'''
本程序功能在filepath中寻找所有包含filename所有文件filename1、filename2然后返回一个filename3
:param out: 永远传入一个空list[];用于存储所有递归调用
:param filepath:
:param filename:
:param model: 有两个模式image 和 spectral
:return:
'''
# 出现此处代码的原因是当次函数定义执行后函数定义就包含了out参数的引用
# 而out参数是可变参数每一次调用次函数都会改变out的值所有不能保证每次调用此函数时out==[]。
# 当第二次调用此方程时
# if out != []:
# if filename not in os.path.splitext(out[-1]):
# out = []
if model == 'image':
files = os.listdir(filepath)
for s in files:
abspath = os.path.join(filepath, s)
if os.path.isfile(abspath):
tmp = os.path.splitext(os.path.split(abspath)[1])[0]
if tmp not in out: # 防止重复记录
if filename in tmp:
out.append(tmp)
else:
pass
# print('没有进来')
elif os.path.isdir(abspath):
return_file_path(out, abspath, filename)
out.sort(key=lambda x: int(x.replace(filename, '')))
if out == []:
x = filename + str(0)
return os.path.join(filepath, x), 0
if out != []:
number = int(out[-1].replace(filename, '')) + 1
x = filename + str(number)
return os.path.join(filepath, x), number
elif model == 'spectral':
files = os.listdir(filepath)
for s in files:
abspath = os.path.join(filepath, s)
if os.path.isfile(abspath) and os.path.splitext(s)[1] == '.txt':
tmp = os.path.splitext(os.path.split(abspath)[1])[0]
if tmp not in out: # 防止重复记录
if filename in tmp:
out.append(tmp)
elif os.path.isdir(abspath):
return_file_path(out, abspath, filename)
out.sort(key=lambda x: int(x.replace(filename, '')))
if out == []:
x = filename + str(0) + '.txt'
return os.path.join(filepath, x), 0
if out != []:
number = int(out[-1].replace(filename, '')) + 1 # 现存最大文件号 + 1
x = filename + str(number) + '.txt'
return os.path.join(filepath, x), number
if __name__ == '__main__':
# print(get_path())
x = return_file_path([], r'D:\delete', 'sss', model='spectral')
print(x)
# y = return_file_path([], r'D:\delete', 'rr')
# print(y)