不循环的OpenCV中calcOpticalFlowFarneback的绘制结果
Drawing results of calcOpticalFlowFarneback in OpenCV without loop
我在 python 中使用 cv2.calcOpticalFlowFarneback()
来获取光流的结果,但是在尝试使用它的结果时出现问题。我想绘制该函数返回的变化,但 python 中的循环太慢了。我确信有一种方法可以使 numpy 更快。这是我的尝试
flow = cv2.calcOpticalFlowFarneback(prev_gray, gray, pyr_scale=0.5, levels=5, winsize=13, iterations=10, poly_n=5, poly_sigma=1.1, flags=0,flow=None)
for y in range(0, flow.shape[0], 5):
for x in range(0, flow.shape[1], 5):
fx, fy = flow[y, x]
cv2.line(frame2, (x,y), (int(x+fx),int(y+fy)), (255,0,0))
cv2.circle(frame2, (x,y), 1, (255,0,0), -1)
您可以使用 openCV 方法 cv2.polylines() 绘制多边形曲线数组,而无需使用 for 循环进行迭代。
这是一个代码示例
def draw_flow(self, img, flow, step=16):
h, w = img.shape[:2]
y, x = np.mgrid[step / 2:h:step, step / 2:w:step].reshape(2, -1).astype(int)
fx, fy = flow[y, x].T
lines = np.vstack([x, y, x + fx, y + fy]).T.reshape(-1, 2, 2)
lines = np.int32(lines + 0.5)
vis = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
cv2.polylines(vis, lines, 0, (0, 255, 0))
for (x1, y1), (x2, y2) in lines:
cv2.circle(vis, (x1, y1), 1, (0, 255, 0), -1)
return vis
查看要下载的 openCV 示例和 运行 完整代码 https://github.com/opencv/opencv/blob/master/samples/python/opt_flow.py
或 openCV 文档以获取有关折线的更多信息http://docs.opencv.org/3.0-beta/modules/imgproc/doc/drawing_functions.html#polylines
我在 python 中使用 cv2.calcOpticalFlowFarneback()
来获取光流的结果,但是在尝试使用它的结果时出现问题。我想绘制该函数返回的变化,但 python 中的循环太慢了。我确信有一种方法可以使 numpy 更快。这是我的尝试
flow = cv2.calcOpticalFlowFarneback(prev_gray, gray, pyr_scale=0.5, levels=5, winsize=13, iterations=10, poly_n=5, poly_sigma=1.1, flags=0,flow=None)
for y in range(0, flow.shape[0], 5):
for x in range(0, flow.shape[1], 5):
fx, fy = flow[y, x]
cv2.line(frame2, (x,y), (int(x+fx),int(y+fy)), (255,0,0))
cv2.circle(frame2, (x,y), 1, (255,0,0), -1)
您可以使用 openCV 方法 cv2.polylines() 绘制多边形曲线数组,而无需使用 for 循环进行迭代。
这是一个代码示例
def draw_flow(self, img, flow, step=16):
h, w = img.shape[:2]
y, x = np.mgrid[step / 2:h:step, step / 2:w:step].reshape(2, -1).astype(int)
fx, fy = flow[y, x].T
lines = np.vstack([x, y, x + fx, y + fy]).T.reshape(-1, 2, 2)
lines = np.int32(lines + 0.5)
vis = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
cv2.polylines(vis, lines, 0, (0, 255, 0))
for (x1, y1), (x2, y2) in lines:
cv2.circle(vis, (x1, y1), 1, (0, 255, 0), -1)
return vis
查看要下载的 openCV 示例和 运行 完整代码 https://github.com/opencv/opencv/blob/master/samples/python/opt_flow.py
或 openCV 文档以获取有关折线的更多信息http://docs.opencv.org/3.0-beta/modules/imgproc/doc/drawing_functions.html#polylines