2024-09-30 04:36:35 发布
网友
首先,虽然我想学习python,但我对编程还是比较陌生的。我的动画和计算机辅助制作背景。在
我在windows上安装了python2.7和opencvx64。我测试了他们的光流示例(可选_流动.py)(绿色箭头)我喜欢这样,但我正在努力理解如何将数据作为值输出。我不想看到相机输出或绿色箭头我只想让数据输出使用它晚点吧有办法吗? 例如:x,y的值和绿色箭头的长度。在
谢谢大家
您可以在opt的draw_flow函数中得到光流矢量(绿色箭头)_流动.py。我可以这样做:
draw_flow
#!/usr/bin/env python ''' example to show optical flow USAGE: opt_flow.py [<video_source>] Keys: 1 - toggle HSV flow visualization 2 - toggle glitch Keys: ESC - exit ''' # Python 2/3 compatibility from __future__ import print_function import numpy as np import math import cv2 import video def draw_flow(img, flow, step=16): global arrows 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: arrows.append([x1,y1, math.sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1))]) cv2.circle(vis, (x1, y1), 1, (0, 255, 0), -1) return vis def draw_hsv(flow): h, w = flow.shape[:2] fx, fy = flow[:,:,0], flow[:,:,1] ang = np.arctan2(fy, fx) + np.pi v = np.sqrt(fx*fx+fy*fy) hsv = np.zeros((h, w, 3), np.uint8) hsv[...,0] = ang*(180/np.pi/2) hsv[...,1] = 255 hsv[...,2] = np.minimum(v*4, 255) bgr = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR) return bgr def warp_flow(img, flow): h, w = flow.shape[:2] flow = -flow flow[:,:,0] += np.arange(w) flow[:,:,1] += np.arange(h)[:,np.newaxis] res = cv2.remap(img, flow, None, cv2.INTER_LINEAR) return res if __name__ == '__main__': import sys print(__doc__) try: fn = sys.argv[1] except IndexError: fn = 0 arrows = [] cam = video.create_capture(fn) ret, prev = cam.read() prevgray = cv2.cvtColor(prev, cv2.COLOR_BGR2GRAY) show_hsv = False show_glitch = False cur_glitch = prev.copy() while True: ret, img = cam.read() gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) flow = cv2.calcOpticalFlowFarneback(prevgray, gray, None, 0.5, 3, 15, 3, 5, 1.2, 0) prevgray = gray arrows.clear() finalImg = draw_flow(gray,flow) print(arrows) cv2.imshow('flow', finalImg) if show_hsv: cv2.imshow('flow HSV', draw_hsv(flow)) if show_glitch: cur_glitch = warp_flow(cur_glitch, flow) cv2.imshow('glitch', cur_glitch) ch = cv2.waitKey(5) if ch == 27: break if ch == ord('1'): show_hsv = not show_hsv print('HSV flow visualization is', ['off', 'on'][show_hsv]) if ch == ord('2'): show_glitch = not show_glitch if show_glitch: cur_glitch = img.copy() print('glitch is', ['off', 'on'][show_glitch]) cv2.destroyAllWindows()
在上面的代码中,我将光流矢量(起点坐标和矢量长度)保存在全局变量arrows中,如下所示:
arrows
其中(x1, y1)是箭头的起点,(x2, y2)是箭头的终点。在
(x1, y1)
(x2, y2)
希望有帮助。在
您可以在opt的
draw_flow
函数中得到光流矢量(绿色箭头)_流动.py。我可以这样做:在上面的代码中,我将光流矢量(起点坐标和矢量长度)保存在全局变量
^{pr2}$arrows
中,如下所示:其中
(x1, y1)
是箭头的起点,(x2, y2)
是箭头的终点。在希望有帮助。在
相关问题 更多 >
编程相关推荐