mirror of https://github.com/opencv/opencv.git
Open Source Computer Vision Library
https://opencv.org/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
1.8 KiB
55 lines
1.8 KiB
#!/usr/bin/env python |
|
|
|
from cv import * |
|
|
|
class FBackDemo: |
|
def __init__(self): |
|
self.capture = CaptureFromCAM(0) |
|
self.mv_step = 16 |
|
self.mv_scale = 1.5 |
|
self.mv_color = (0, 255, 0) |
|
self.cflow = None |
|
self.flow = None |
|
|
|
NamedWindow( "Optical Flow", 1 ) |
|
|
|
print( "Press ESC - quit the program\n" ) |
|
|
|
def draw_flow(self, flow, prevgray): |
|
""" Returns a nice representation of a hue histogram """ |
|
|
|
CvtColor(prevgray, self.cflow, CV_GRAY2BGR) |
|
for y in range(0, flow.height, self.mv_step): |
|
for x in range(0, flow.width, self.mv_step): |
|
fx, fy = flow[y, x] |
|
Line(self.cflow, (x,y), (x+fx,y+fy), self.mv_color) |
|
Circle(self.cflow, (x,y), 2, self.mv_color, -1) |
|
ShowImage("Optical Flow", self.cflow) |
|
|
|
def run(self): |
|
first_frame = True |
|
|
|
while True: |
|
frame = QueryFrame( self.capture ) |
|
|
|
if first_frame: |
|
gray = CreateImage(GetSize(frame), 8, 1) |
|
prev_gray = CreateImage(GetSize(frame), 8, 1) |
|
flow = CreateImage(GetSize(frame), 32, 2) |
|
self.cflow = CreateImage(GetSize(frame), 8, 3) |
|
|
|
CvtColor(frame, gray, CV_BGR2GRAY) |
|
if not first_frame: |
|
CalcOpticalFlowFarneback(prev_gray, gray, flow, |
|
pyr_scale=0.5, levels=3, winsize=15, |
|
iterations=3, poly_n=5, poly_sigma=1.2, flags=0) |
|
self.draw_flow(flow, prev_gray) |
|
c = WaitKey(7) |
|
if c in [27, ord('q'), ord('Q')]: |
|
break |
|
prev_gray, gray = gray, prev_gray |
|
first_frame = False |
|
|
|
if __name__=="__main__": |
|
demo = FBackDemo() |
|
demo.run()
|
|
|