从 numpy 数组制作顺序行(cv2)
Making sequential line(cv2) from numpy array
我有一个 numpy 数组,它包含来自图像 (newimg) 的 n(x 和 y)坐标(我将此 nparray 声明为 'line')。以5个坐标为例
[[ 33 101]
[170 95]
[151 190]
[125 223]
[115 207]]
然后我想在该坐标之间制作一条连续线(点 1 到点 2,点 2 到点 3,....,点 n-1 到点 n 和点 n 到点 1)
我正在尝试用 cv2.line 制作这样的算法
for a in range(5) :
cv2.line(newimg, line[a:], line[a+1:], (255,255,255), 1)
cv2.line(newimg, line, line[1], (255,255,255), 1)
它会产生 SystemError: new style getargs format but argument is not a tuple
有什么想法吗?
解决,我将代码编辑为
for a in range(4) :
cv2.line(newimg, tuple(line[a]), tuple(line[a+1]), (255,255,255), 1)
cv2.line(newimg, tuple(line[4], tuple(line[0]), (255,255,255), 1)
和图像:
问题:
有一些变化需要解决:
- 要访问数组中的单个值,请使用
line[i]
。 line[i:]
returns 从索引 i
开始到结尾的点数组。
cv2.line()
接受元组作为起点和终点。
代码:
# proposed line as an array
line = np.array([[ 33, 101], [170, 95], [151, 190], [125, 223], [115, 207]])
# blank image
newimg = np.zeros((300, 300, 3), np.uint8)
# iterate every point and connect a line between it and the next point
for a in range(len(line) - 1):
newimg = cv2.line(newimg, tuple(line[a]), tuple(line[a+1]), (255,255,255), 2)
newimg = cv2.line(newimg, tuple(line[0]), tuple(line[-1]), (255,255,255), 2)
输出:
编辑
更新了代码以连接 line
中第一个点和最后一个点之间的线
我有一个 numpy 数组,它包含来自图像 (newimg) 的 n(x 和 y)坐标(我将此 nparray 声明为 'line')。以5个坐标为例
[[ 33 101]
[170 95]
[151 190]
[125 223]
[115 207]]
然后我想在该坐标之间制作一条连续线(点 1 到点 2,点 2 到点 3,....,点 n-1 到点 n 和点 n 到点 1)
我正在尝试用 cv2.line 制作这样的算法
for a in range(5) :
cv2.line(newimg, line[a:], line[a+1:], (255,255,255), 1)
cv2.line(newimg, line, line[1], (255,255,255), 1)
它会产生 SystemError: new style getargs format but argument is not a tuple
有什么想法吗?
解决,我将代码编辑为
for a in range(4) :
cv2.line(newimg, tuple(line[a]), tuple(line[a+1]), (255,255,255), 1)
cv2.line(newimg, tuple(line[4], tuple(line[0]), (255,255,255), 1)
和图像:
问题:
有一些变化需要解决:
- 要访问数组中的单个值,请使用
line[i]
。line[i:]
returns 从索引i
开始到结尾的点数组。 cv2.line()
接受元组作为起点和终点。
代码:
# proposed line as an array
line = np.array([[ 33, 101], [170, 95], [151, 190], [125, 223], [115, 207]])
# blank image
newimg = np.zeros((300, 300, 3), np.uint8)
# iterate every point and connect a line between it and the next point
for a in range(len(line) - 1):
newimg = cv2.line(newimg, tuple(line[a]), tuple(line[a+1]), (255,255,255), 2)
newimg = cv2.line(newimg, tuple(line[0]), tuple(line[-1]), (255,255,255), 2)
输出:
编辑
更新了代码以连接 line