【问题标题】:How do I read a text file of numbers into an array of arrays如何将数字文本文件读入数组数组
【发布时间】:2019-08-31 05:01:53
【问题描述】:

在 python 中,使用 OpenCV 库,我需要创建一些折线。 polylines 方法的示例代码显示:

 cv2.polylines(img,[pts],True,(0,255,255))

我已将所有“pts”按以下格式排列在一个文本文件中:

x1,y1,x2,y2,x3,y3,x4,y4
x1,y1,x2,y2,x3,y3,x4,y4
x1,y1,x2,y2,x3,y3,x4,y4

如何读取该文件并将数据提供给方法调用中的 [pts] 变量?

我已经尝试了 np.array(csv.reader(...)) 方法以及我找到的其他一些示例。我可以成功读取文件,但它不是折线方法想要的格式。 (我是python的新手,如果是C++或Java,那都不是问题。

【问题讨论】:

  • 如果pts = np.array(csv.read(...)),那么你只是在做cv2.polylines(img, pts, ...),对吧?
  • 嗯,是的。但它不起作用。运行时出现“TypeError: pts”。

标签: python arrays opencv3.0 polyline


【解决方案1】:

我会尝试使用 numpy 将 csv 作为数组读取。

from numpy import genfromtxt
p = genfromtxt('myfile.csv', delimiter=',')

cv2.polylines(img,p,True,(0,255,255))

如果您需要将数据强制转换为特定格式,您可能必须将 dtype 参数传递给 genfromtext。

https://docs.scipy.org/doc/numpy/reference/generated/numpy.genfromtxt.html

【讨论】:

  • 这将读取数字,但“p”的格式不正确。格式必须为 [[x,y],[x,y],[x,y],[x,y]]
【解决方案2】:

如果您知道每行中有固定数量的项目:

import csv

with open('myfile.csv') as csvfile:
    rows = csv.reader(csvfile)
    res = list(zip(*rows))
    print(res)

【讨论】:

  • 是固定数量的项目(4组x,y坐标)。
【解决方案3】:

我知道这并不漂亮,并且可能有更好的方法来做到这一点,但它确实有效。话虽如此,如果有人能告诉我一个更好的方法,将不胜感激。

pointlist = []
f = open(args["slots"])
data = f.read().split()
for row in data:
    tmp = []
    col = row.split(";")
    for points in col:
        xy = points.split(",")
        tmp += [[int(pt) for pt in xy]]
    pointlist += [tmp]

slots = np.asarray(pointlist)

【讨论】:

    【解决方案4】:

    您可能需要单独绘制每条折线(以扩展 @Chris 的答案):

    from numpy import genfromtxt
    lines = genfromtxt('myfile.csv', delimiter=',')
    
    for line in lines:
        cv2.polylines(img, line.reshape((-1, 2)), True, (0,255,255))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-16
      • 1970-01-01
      • 2017-09-12
      • 2016-01-17
      • 2020-05-18
      • 2021-12-19
      相关资源
      最近更新 更多