栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在Python中使用OpenCV跟踪运动?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在Python中使用OpenCV跟踪运动?

我已经从博客文章 使用OpenCV进行运动检测中
找到的C版本的代码转换了一些工作代码:


#!/usr/bin/env pythonimport cvclass Target:    def __init__(self):        self.capture = cv.CaptureFromCAM(0)        cv.NamedWindow("Target", 1)    def run(self):        # Capture first frame to get size        frame = cv.Queryframe(self.capture)        frame_size = cv.GetSize(frame)        color_image = cv.CreateImage(cv.GetSize(frame), 8, 3)        grey_image = cv.CreateImage(cv.GetSize(frame), cv.IPL_DEPTH_8U, 1)        moving_average = cv.CreateImage(cv.GetSize(frame), cv.IPL_DEPTH_32F, 3)        first = True        while True: closest_to_left = cv.GetSize(frame)[0] closest_to_right = cv.GetSize(frame)[1] color_image = cv.Queryframe(self.capture) # Smooth to get rid of false positives cv.Smooth(color_image, color_image, cv.CV_GAUSSIAN, 3, 0) if first:     difference = cv.CloneImage(color_image)     temp = cv.CloneImage(color_image)     cv.ConvertScale(color_image, moving_average, 1.0, 0.0)     first = False else:     cv.RunningAvg(color_image, moving_average, 0.020, None) # Convert the scale of the moving average. cv.ConvertScale(moving_average, temp, 1.0, 0.0) # Minus the current frame from the moving average. cv.AbsDiff(color_image, temp, difference) # Convert the image to grayscale. cv.CvtColor(difference, grey_image, cv.CV_RGB2GRAY) # Convert the image to black and white. cv.Threshold(grey_image, grey_image, 70, 255, cv.CV_THRESH_BINARY) # Dilate and erode to get people blobs cv.Dilate(grey_image, grey_image, None, 18) cv.Erode(grey_image, grey_image, None, 10) storage = cv.CreateMemStorage(0) contour = cv.FindContours(grey_image, storage, cv.CV_RETR_CCOMP, cv.CV_CHAIN_APPROX_SIMPLE) points = [] while contour:     bound_rect = cv.BoundingRect(list(contour))     contour = contour.h_next()     pt1 = (bound_rect[0], bound_rect[1])     pt2 = (bound_rect[0] + bound_rect[2], bound_rect[1] + bound_rect[3])     points.append(pt1)     points.append(pt2)     cv.Rectangle(color_image, pt1, pt2, cv.CV_RGB(255,0,0), 1) if len(points):     center_point = reduce(lambda a, b: ((a[0] + b[0]) / 2, (a[1] + b[1]) / 2), points)     cv.Circle(color_image, center_point, 40, cv.CV_RGB(255, 255, 255), 1)     cv.Circle(color_image, center_point, 30, cv.CV_RGB(255, 100, 0), 1)     cv.Circle(color_image, center_point, 20, cv.CV_RGB(255, 255, 255), 1)     cv.Circle(color_image, center_point, 10, cv.CV_RGB(255, 100, 0), 1) cv.ShowImage("Target", color_image) # Listen for ESC key c = cv.WaitKey(7) % 0x100 if c == 27:     breakif __name__=="__main__":    t = Target()    t.run()


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/382151.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号