我需要从CSV文件中绘制轮廓,我只得到每个x,y列表,但我需要创建元组来将它们用于多段线函数,但我得到了'int' object is not iterable
!
代码:
import numpy as np
import cv2
import matplotlib.pyplot as plt
image5= cv2.imread("C:/Users/Pc/Desktop/code prjt/5_Vesicule.jpg")
cv2.imshow("im",image5)
cv2.waitKey()
centrev5 = pd.read_csv("C:/Users/Pc/Desktop/code prjt/centrev5.csv",sep=";")
print(centrev5)
cx=int(centrev5.get(['centreX'][0]) )
cy =int(centrev5.get(['centreY'][0]))
image = cv2.circle(image5, (cx,cy), radius=0, color=(255, 0, 0), thickness=10)
cv2.imshow("centre",image)
cv2.waitKey()
point5 = pd.read_csv("C:/Users/Pc/Desktop/code prjt/point5.csv",sep=";")
print(point5)
for i in range(len(point5)):
x=int(point5.values[i][1])
y=int(point5.values[i][2])
# transform x,y vectors to tuples
c = [tuple(x), tuple(y)]
img = cv2.polylines(image5, c, 1, (0,0,255),4)
cv2.imshow("contour",image5)
cv2.waitKey()
#print(c)
#c = [i for i in zip(x, y)]
#c = list(zip(x,y))
#[(x[i],y[i]) for i in range(min(len(x),len(y)))]
错误为"int"对象不可迭代
x,y 结果
您的问题是试图将int转换为元组,即tuple(x)
。x被定义为CCD_ 3。int
是不可迭代的。因此无法直接将其转换为tuple
。如果您想要一个只包含x
的元组,则使用(x,)
(注意后面的,
(。
cv2.polylines()
希望它的第二个自变量采用形式
[(x1,y1),(x2,y2),...)]
然后将绘制一个多边形连接列表中的所有点。
这意味着您不需要for循环。它已经集成在cv2.polylines()
中。参见此处
为了将您的数据转换为正确的格式,我建议如下:
points = [(value[1],value[2]) for value in point5.values]
然后画这样的线:
cv2.polylines(image5, points, 1, (0,0,255),4)