目录

  • 新的改变
  • 代码

新的改变

做了功能上的强化,强化如下:

(1)加了pts清空,即当没有检测到目标时,清空pts,显示的图像上不再有轨迹;

(2)加了运动方向判别,能够判别目标的运动方向及当前坐标。

代码

#  coding: utf-8
#!/usr/bin/env python
from collections import  deque
import numpy as np
import time
#import imutils
import cv2
#设定红色阈值,HSV空间
redLower = np.array([170, 100, 100])
redUpper = np.array([179, 255, 255])
#初始化追踪点的列表
mybuffer = 16
pts = deque(maxlen=mybuffer)
counter = 0
#打开摄像头
camera = cv2.VideoCapture(0)
#等待两秒
time.sleep(3)
#遍历每一帧,检测红色瓶盖
while True:#读取帧(ret, frame) = camera.read()#判断是否成功打开摄像头if not ret:print 'No Camera'break#frame = imutils.resize(frame, width=600)#转到HSV空间hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)#根据阈值构建掩膜mask = cv2.inRange(hsv, redLower, redUpper)#腐蚀操作mask = cv2.erode(mask, None, iterations=2)#膨胀操作,其实先腐蚀再膨胀的效果是开运算,去除噪点mask = cv2.dilate(mask, None, iterations=2)cnts = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[-2]#初始化瓶盖圆形轮廓质心center = None#如果存在轮廓if len(cnts) > 0:#找到面积最大的轮廓c = max(cnts, key = cv2.contourArea)#确定面积最大的轮廓的外接圆((x, y), radius) = cv2.minEnclosingCircle(c)#计算轮廓的矩M = cv2.moments(c)#计算质心center = (int(M["m10"]/M["m00"]), int(M["m01"]/M["m00"]))#只有当半径大于10时,才执行画图if radius > 10:cv2.circle(frame, (int(x), int(y)), int(radius), (0, 255, 255), 2)cv2.circle(frame, center, 5, (0, 0, 255), -1)#把质心添加到pts中,并且是添加到列表左侧pts.appendleft(center)else:#如果图像中没有检测到瓶盖,则清空pts,图像上不显示轨迹。pts.clear()for i in xrange(1, len(pts)):if pts[i - 1] is None or pts[i] is None:continue#计算所画小线段的粗细thickness = int(np.sqrt(mybuffer / float(i + 1)) * 2.5)#画出小线段cv2.line(frame, pts[i - 1], pts[i], (0, 0, 255), thickness)#判断移动方向if counter >= 10 and i == 1 and len(pts) >= 10:dX = pts[-10][0] - pts[i][0]dY = pts[-10][1] - pts[i][1](dirX, dirY) = ("", "")if np.abs(dX) > 20:dirX = "East" if np.sign(dX) == 1 else "West"if np.abs(dY) > 20:dirY = "North" if np.sign(dY) == 1 else "South"if dirX != "" and dirY != "":direction = "{}-{}".format(dirY, dirX)else:direction = dirX if dirX != "" else dirYcv2.putText(frame, direction, (20, 50), cv2.FONT_HERSHEY_SIMPLEX, 2, (0, 255, 0), 3)cv2.putText(frame, "dx: {}, dy: {}".format(dX, dY), (10, frame.shape[0] - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.35, (0, 0, 255), 1)cv2.imshow('Frame', frame)#键盘检测,检测到esc键退出k = cv2.waitKey(1)&0xFFcounter += 1if k == 27:break
#摄像头释放
camera.release()
#销毁所有窗口
cv2.destroyAllWindows()

[转]《python+opencv实践》一、基于颜色的物体追踪(下)相关推荐

  1. 物体追踪实战:使用 OpenCV实现对指定颜色的物体追踪

    本文实现对特定颜色的物体追踪,我实验用的是绿萝的树叶. 新建脚本ball_tracking.py,加入代码: import argparse from collections import deque ...

  2. 2021-01-07 python opencv实现车牌识别 颜色定位

    python opencv实现车牌识别 颜色定位 主要代码参考https://blog.csdn.net/wzh191920/article/details/79589506 GitHub:https ...

  3. Python OpenCV实践,相机标定

    Python OpenCV实践,相机标定 前言 准备棋盘格 标定相机 图像去畸变 前言 本篇主要是使用python opencv标定相机内参和畸变参数的记录,主要参考opencv官方文档中的示例. 本 ...

  4. 【opencv学习】光流算法以及物体追踪算法(Lucas-Kanade算法)

    正所谓的光流估计,就是在视频的前后帧的分析中,能分析出图中的一些object的移动方向和速度,可以做目标追踪使用. Lucas-Kanade算法改进 经典的光流估计是Lucas-Kanade 算法,这 ...

  5. python爬虫实践记录-基于requests访问翻译网页爬取结果

    前言 目前主流的翻译网站反爬虫都挺严格的,某度有sign算法,谷歌自带技能冷却.... 查了一下发现一个反爬虫没用那么苛刻的翻译网站:译典通.         第一次听说这个网站,界面挺老,爬来的源代 ...

  6. python opencv实践 图像去畸变

    目录 前言 镜头成像畸变原因 去畸变方法 python去畸变 输入 代码 结果 前言 由于相机的镜头并不完全理想,成像时会产生线条扭曲.失真等.对双目图像.鸟瞰图等进行处理时,首先要矫正去畸变. 镜头 ...

  7. python opencv 连通域_基于OpenCV及连通域分析进行文本块分割

    上一次通过投影的方式进行了文本块分割,但这种方法有很大的局限性,要求分行清晰.不能有字符跨多行.不能倾斜,而且对噪声比较敏感.还是拿上一回的图片,但是我在上面加了一个比较大的字,得出的结果就有问题了: ...

  8. python opencv 利用分水岭算法实现对物体的分割 图文详细注释版 以分割官网提供的硬币为例

    分水岭算法可以实现自动分割多个物体,opencv中 cv.watershed() 函数实现了分水岭算法 话不多说,上代码 # 利用分水岭算法分离多个相同硬币 import numpy as np im ...

  9. python更改图片中物体的颜色_Python Opencv提取图片中某种颜色组成的图形的方法...

    Python Opencv提取图片中某种颜色组成的图形的方法 主要目标识别图中红色的裂缝,尝试了几种不同的方法,最后发现比较每一点的RGB差值可以很好的解决这个问题,也就是提取图片中的红色相关信息.处 ...

最新文章

  1. 2018年人工智能将赋能所有行业,未来市场将超过400亿美元
  2. Java高级技术笔记
  3. redis06----消息订阅
  4. JadePool应用范例:创建China软件项目
  5. 快手用旺旺瓶子做机器人_100品牌入榜,在快手的品牌运营怎么做?|11月快手品牌新势力榜揭晓...
  6. 2009-08-02 XEIM 2.8 beta 迅速发布
  7. 继爱奇艺后,腾讯视频会员也要涨价了
  8. error: ora-01034:oracle not available ora-27101:shared memory realm does not exist
  9. 计算机算法设计与分析 单峰序列
  10. 简述Python类中的 __init__、__new__、__call__ 方法
  11. Win10命令提示符在哪里 怎么打开命令提示符窗口
  12. 在VMware虚拟机中安装Ubuntu教程
  13. 【渗透测试基础-4】资产收集之nmap扫描
  14. PhalApi2.x笔记
  15. C语言渔夫打鱼晒网问题
  16. c# wifi串口通信_C#串口通信 SerialPort类
  17. 实战 target 选择器,解放生产力
  18. Unhandled exception in al.exe(KERNELBASE.DLL):0xE06D7363:Microsoft C++Exception
  19. 基于3D关节点的人体动作识别综述(转)
  20. python 零代码快速开发平台_企业如何选择开源的零代码开发平台

热门文章

  1. 用JS基础写一个简单的滚动条事件
  2. 文心一言 vs GPT-4实测!百度背水一战交卷
  3. 创意机油桶机器人_10岁男孩变身环保达人,用机油桶造出机器人!
  4. 可盈可乐区块链行业周报(10.16-10.31)
  5. android群发短信到通讯录所有联系人上并动态替换其中联系人信息
  6. 关于生死的思考 —— AI人死也能复生了
  7. 世界上最短的DVD解码程序(附源码)
  8. Makedown中输入希腊字母代码
  9. Vue2 手势解锁密码 / 支付宝手势解锁
  10. linux系统 安装ibus中文输入法后 重启ubuntu 显示不出来主页面解决办法