我有一个代码,我通知一个文件夹,其中有n
个图像,代码应该返回相对频率直方图。
从那里我有一个函数调用:
for image in total_images:
histogram(image)
image
是代码正在处理的当前图像,total_images
是以前通知的文件夹中的图像总数(n
)。
从那里我调用histogram()
函数,作为参数发送代码正在工作的当前图像。
我的histogram()
函数的目的是返回每个图像的相对频率的直方图(rel_freq
)。
虽然返回的值是正确的,但rel_freq
应该是1x256的数组,范围从0到255.
如何将rel_freq
变量转换为1x256数组?并且每个值都存储在相应的位置?
当我len *rel_freq)
时,它会返回256,当我意识到它不是我需要的格式时......
同样,虽然返回的数据是正确的......
之后,我需要创建一个数组store_all = len(total_images)x256
来保存所有rel_freq
...
我需要将所有rel_freq
保存在一个数组中,以便稍后将其保存到外部文件,例如.txt。
我正在考虑创建另一个功能来执行此操作...
有类似的东西,但我不知道如何正确地做到这一点,但我相信你会明白逻辑......
def store_all_histograms(total_images):
n = len(total_images)
store_all = [n][256]
for i in range(0,n):
store_all[i] = rel_freq
我知道函数store_all_histograms()
是错误的,我只是在这里写下来,或多或少地表明我想做的事......但是,我不知道如何正确地做到这一点......此时,我得到的错误是:
store_all = [n][256]
IndexError: list index out of range
毕竟,我需要store_all
变量来保存所有相对频率直方图,例如:
position: 0 ... 256
store_all = [
[..., ..., ...],
[..., ..., ...],
.
.
.
n
]
现在请遵循以下代码块:
def histogram(path):
global rel_freq
#Part of the code that is not relevant to the question...
rel_freq = [(float(item) / total_size) * 100 if item else 0 for item in abs_freq]
def store_all_histograms(total_images):
n = len(total_images)
store_all = [n][256]
for i in range(0,n):
store_all[i] = rel_freq
#Part of the code that is not relevant to the question...
# Call the functions
for fn in total_images:
histogram(fn)
store_all_histograms(total_images)
我希望我能够清楚地了解这个问题。
提前致谢,如果您需要任何其他信息,可以问我......
答案 0 :(得分:2)
返回结果,不要使用全局变量:
def histogram(path):
return [(float(item) / total_size) * 100 if item else 0 for item in abs_freq]
创建一个空列表:
store_all = []
并附加结果:
for fn in total_images:
store_all.append(histogram(fn))
或者,使用列表理解:
store_all = [histogram(fn) for fn in total_images]
答案 1 :(得分:1)
for i in range(0,n):
store_all[i+1] = rel_freq
也许尝试一下?如果我是诚实的,我对这个问题有点困惑。您是否试图将所有项目调用数组的方式改为1,以便不是通过列表[0]调用位置1而是通过列表[1]调用它?
所以你希望它这样做?
>>list = [0,1,2,3,4]
>>list[1]
0