如何将数字文本文件读入数组

时间:2019-04-09 20:15:58

标签: python arrays opencv3.0 polyline

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

 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(...))方法以及其他一些我发现过的示例。我可以成功读取文件,但格式不是polylines方法想要的格式。 (就python而言,我是一个新手,如果它是C ++或Java,那不是问题。)

4 个答案:

答案 0 :(得分:0)

我会尝试使用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

答案 1 :(得分:0)

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

fclose(fp);

答案 2 :(得分:0)

我知道它不是很漂亮,并且可能有一种更好的方法来做到这一点,但它确实有效。话虽如此,如果有人可以向我展示一种更好的方法,将不胜感激。

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)

答案 3 :(得分:0)

您可能需要分别绘制每条折线(以扩展@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))