【问题标题】:Saving a cv2.calcHist into a single cell in a CSV file using python使用 python 将 cv2.calcHist 保存到 CSV 文件中的单个单元格中
【发布时间】:2021-05-28 01:25:52
【问题描述】:

我正在使用 python 进行一个项目,在该项目中我需要保存被检测到的人的属性,例如衣服、衣服颜色和检测的直方图。我希望将每个属性保存到 single 单元格中,以便每一行代表一个检测。

现在我希望有人能告诉我如何最好地将直方图数组保存到单个单元格中。 这可能吗?

【问题讨论】:

  • edit 显示您的直方图数据示例。也是您的 CSV 文件的一个示例,我假设它会有其他列
  • 更新了问题。
  • 你想把整个二维数组放在一个单元格中吗?还是每个项目只有一行?
  • 我希望将直方图的数据放入一个单元格中,以便我可以从 python 脚本中检索它。我想我需要整个二维数组才能工作。

标签: python arrays csv histogram cv2


【解决方案1】:

您需要确定一种可以轻松读回的格式。以下方法首先为 3 行数据创建一些随机直方图数据。它首先写入一个标题。接下来,它使用np.array2string() 函数将每个直方图转换为文本。它使用; 分隔符,以免将其与其他值的标准, 混淆。然后它会删除所有不需要的空格和换行符,因此生成的二维数组在一行上。然后它使用标准的csv.writer() 来写入行。

然后我将展示如何再次读回数据并将其转换回 numpy 数组:

import numpy as np
import csv
import ast
import sys

# Create some data and histograms to save
row = [(0, "Tops", "maroon"), (1, "Socks", "blue"), (2, "Shirts", "white")]
hists = [np.random.randint(0, 20, size=(3, 10), dtype=np.int32) for _ in range(3)]

with open('output.csv', 'w', newline='') as f_output:
    csv_output = csv.writer(f_output)
    csv_output.writerow(['index', 'type', 'colour', 'hist'])
    
    for item, hist in zip(row, hists):
        hist_text = np.array2string(hist, separator=';', threshold=sys.maxsize).replace(' ','').replace('\n', '')
        csv_output.writerow([*item, hist_text])

# To read it back from the CSV into a numpy array
with open('output.csv') as f_input:
    csv_input = csv.reader(f_input)
    header = next(csv_input)
    
    for index, type, colour, hist_text in csv_input:
        print(index, type, colour)
        hist = np.array(ast.literal_eval(hist_text.replace(';', ',')), dtype=np.int32)
        print(hist)

所以这会给你output.csv 包含类似的内容:

index,type,colour,hist
0,Tops,maroon,[[12;6;9;10;2;7;10;8;0;4];[16;10;5;16;15;17;7;14;2;4];[18;17;11;10;19;15;1;1;2;8]]
1,Socks,blue,[[15;5;4;7;18;12;9;5;6;14];[11;6;12;1;2;11;11;15;0;12];[9;11;7;2;14;18;8;13;15;17]]
2,Shirts,white,[[11;17;12;9;2;13;19;5;10;14];[16;16;3;8;5;8;6;0;18;15];[5;7;2;4;16;5;11;17;9;19]]

在读回它时,它会显示:

0 Tops maroon
[[12  6  9 10  2  7 10  8  0  4]
 [16 10  5 16 15 17  7 14  2  4]
 [18 17 11 10 19 15  1  1  2  8]]
1 Socks blue
[[15  5  4  7 18 12  9  5  6 14]
 [11  6 12  1  2 11 11 15  0 12]
 [ 9 11  7  2 14 18  8 13 15 17]]
2 Shirts white
[[11 17 12  9  2 13 19  5 10 14]
 [16 16  3  8  5  8  6  0 18 15]
 [ 5  7  2  4 16  5 11 17  9 19]]

【讨论】:

  • 我会看看这个,然后会给你反馈:D。谢谢。
  • 将字符串 hist 转换为 np.array malformed node or string: <_ast.Ellipsis object at 0x00000149CBDE4388> 时出现以下错误 :(。我使用的是 Python 3.7
  • 对于更大的维度,需要threshold=sys.maxsize 来禁用汇总(省略号)。我已经更新了脚本。
猜你喜欢
  • 2012-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-08
  • 1970-01-01
  • 2015-11-05
  • 2022-01-14
  • 1970-01-01
相关资源
最近更新 更多