【好玩的计算机视觉】物体跟踪及屏幕涂鸦

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/littlethunder/article/details/51614936

好久没来CSDN了,还是写博客的岁月更加充实。这次开个新的专栏【好玩的计算机视觉】,打算做一些从入门到进阶过程中好玩的程序分享给大家,抛砖引玉。因为计算机视觉和摄像头分不开,所以以后这个专题标配一个demo视频。因为我喜欢B站的弹幕和没有广告,所以视频都发在bilibili上,非常欢迎大家用弹幕和我交流分享点子哈:-)


这次做一个跟踪涂鸦,就是先确定一个物体,用最小的圆跟踪它从而获得圆心,用这个圆心在屏幕上画图。使用OpenCV 3和Python 3。


1. 选取物体

我们可以用OpenCV的cv2.setMouseCallback方法使用鼠标,点击图像中你感兴趣的物体,就会在终端输出HSV颜色值。比如我在视频中用的乒乓球,我会尽量在乒乓球上多选取一些点,从而得知一个乒乓球HSV颜色空间的大概范围,从而把乒乓球从背景中剥离。HSV颜色空间非别是:Hue色度, Saturation饱和度, Value明度。如下图:


我在程序中是选取金黄色物体:

lowerYellow = np.array([14,110,150])
upperYellow = np.array([35,255,255])

在HSV颜色空间中,色度是0-360,但在OpenCV程序中,色度是0-180,所以上图压缩成180°的半圆柱就是对应程序中的取值范围。然后用:

mask = cv2.inRange(hsv, lowerYellow, upperYellow)

来获得前景物体,和背景区分开。接下来获取边界:

im, contours, hierarchy = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

然后用最小圆包裹住物体:

for c in contours:
      (x, y), radius = cv2.minEnclosingCircle(c)
最后就用cv2.line和cv2.circle来实时绘画。按下“x”键开始追踪选取物体最小圆的圆心并画图,再按一下“x”停止;按“c”键清除屏幕图画,可以接着画了。


Demo视频:http://www.bilibili.com/video/av4851948/

完整代码:https://github.com/littlethunder/ballTrackAndDraw


转载请注明: 转自 http://blog.csdn.net/littlethunder/article/details/51614936


猜你喜欢

转载自blog.csdn.net/littlethunder/article/details/51614936