[转]《python+opencv实践》一、基于颜色的物体追踪(下)
目录
- 新的改变
- 代码
新的改变
做了功能上的强化,强化如下:
(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实践》一、基于颜色的物体追踪(下)相关推荐
- 物体追踪实战:使用 OpenCV实现对指定颜色的物体追踪
本文实现对特定颜色的物体追踪,我实验用的是绿萝的树叶. 新建脚本ball_tracking.py,加入代码: import argparse from collections import deque ...
- 2021-01-07 python opencv实现车牌识别 颜色定位
python opencv实现车牌识别 颜色定位 主要代码参考https://blog.csdn.net/wzh191920/article/details/79589506 GitHub:https ...
- Python OpenCV实践,相机标定
Python OpenCV实践,相机标定 前言 准备棋盘格 标定相机 图像去畸变 前言 本篇主要是使用python opencv标定相机内参和畸变参数的记录,主要参考opencv官方文档中的示例. 本 ...
- 【opencv学习】光流算法以及物体追踪算法(Lucas-Kanade算法)
正所谓的光流估计,就是在视频的前后帧的分析中,能分析出图中的一些object的移动方向和速度,可以做目标追踪使用. Lucas-Kanade算法改进 经典的光流估计是Lucas-Kanade 算法,这 ...
- python爬虫实践记录-基于requests访问翻译网页爬取结果
前言 目前主流的翻译网站反爬虫都挺严格的,某度有sign算法,谷歌自带技能冷却.... 查了一下发现一个反爬虫没用那么苛刻的翻译网站:译典通. 第一次听说这个网站,界面挺老,爬来的源代 ...
- python opencv实践 图像去畸变
目录 前言 镜头成像畸变原因 去畸变方法 python去畸变 输入 代码 结果 前言 由于相机的镜头并不完全理想,成像时会产生线条扭曲.失真等.对双目图像.鸟瞰图等进行处理时,首先要矫正去畸变. 镜头 ...
- python opencv 连通域_基于OpenCV及连通域分析进行文本块分割
上一次通过投影的方式进行了文本块分割,但这种方法有很大的局限性,要求分行清晰.不能有字符跨多行.不能倾斜,而且对噪声比较敏感.还是拿上一回的图片,但是我在上面加了一个比较大的字,得出的结果就有问题了: ...
- python opencv 利用分水岭算法实现对物体的分割 图文详细注释版 以分割官网提供的硬币为例
分水岭算法可以实现自动分割多个物体,opencv中 cv.watershed() 函数实现了分水岭算法 话不多说,上代码 # 利用分水岭算法分离多个相同硬币 import numpy as np im ...
- python更改图片中物体的颜色_Python Opencv提取图片中某种颜色组成的图形的方法...
Python Opencv提取图片中某种颜色组成的图形的方法 主要目标识别图中红色的裂缝,尝试了几种不同的方法,最后发现比较每一点的RGB差值可以很好的解决这个问题,也就是提取图片中的红色相关信息.处 ...
最新文章
- 2018年人工智能将赋能所有行业,未来市场将超过400亿美元
- Java高级技术笔记
- redis06----消息订阅
- JadePool应用范例:创建China软件项目
- 快手用旺旺瓶子做机器人_100品牌入榜,在快手的品牌运营怎么做?|11月快手品牌新势力榜揭晓...
- 2009-08-02 XEIM 2.8 beta 迅速发布
- 继爱奇艺后,腾讯视频会员也要涨价了
- error: ora-01034:oracle not available ora-27101:shared memory realm does not exist
- 计算机算法设计与分析 单峰序列
- 简述Python类中的 __init__、__new__、__call__ 方法
- Win10命令提示符在哪里 怎么打开命令提示符窗口
- 在VMware虚拟机中安装Ubuntu教程
- 【渗透测试基础-4】资产收集之nmap扫描
- PhalApi2.x笔记
- C语言渔夫打鱼晒网问题
- c# wifi串口通信_C#串口通信 SerialPort类
- 实战 target 选择器,解放生产力
- Unhandled exception in al.exe(KERNELBASE.DLL):0xE06D7363:Microsoft C++Exception
- 基于3D关节点的人体动作识别综述(转)
- python 零代码快速开发平台_企业如何选择开源的零代码开发平台