使用Python,OpenCV转换颜色空间,追踪对象的轨迹

  • 1. 效果图
  • 2. 源码
  • 参考

这篇博客可以看作是之前俩篇博客的融合,将介绍如何使用Python,OpenCV转换颜色空间,并利用HSV追踪对象,并绘制其轨迹;

  • OpenCV最经典的3种颜色空间(cv2.cvtColor)及互相转换
  • 使用Python,OpenCV捕获关键事件,并进行视频剪辑
  1. 计算HSV空间的上限与下限值;
  2. BGR转HSV空间;
  3. 追踪对像,并绘制轨迹;

1. 效果图

绿色的薄荷膏药瓶成功被检测到~
药瓶底部纯绿色也被检测到了,如图~
追踪绿色瓶并绘制最近的轨迹线效果图如下:

2. 源码

# 将图像从一种颜色空间转换为另一种颜色空间,例如 BGR、RGB、Gray、HSV 等。
# 创建一个应用程序来提取视频中的彩色对象
# OpenCV 中有超过 150 种颜色空间转换方法可用,本文只介绍最经典的2中:BGR、HSV及互转# USAGE
# python change_colorspace_Object_Tracking.py
from collections import dequeimport cv2# 遍历查看所有颜色空间
import imutilsflags = [i for i in dir(cv2) if i.startswith('COLOR_')]
print(flags)
print(len(flags))# 对于 HSV,色调范围为 [0,179],饱和度范围为 [0,255],值范围为 [0,255]。不同的软件使用不同的尺度。因此,如果您将 OpenCV 值与它们进行比较,则需要对这些范围进行归一化。
# 对象跟踪,可以使用HSV来提取彩色对象。这是最简单的对象追踪,找到物体的质心,就可以绘制轨迹来追踪物体;
import cv2
import numpy as npcap = cv2.VideoCapture(0)
pts = deque(maxlen=64)
while (1):# 获取每一帧_, frame = cap.read()frame = imutils.resize(frame,width=400)if frame is None:break# 转换BGR为HSVhsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)# 定义绿色的HSV空间值lower_blue = np.array([29, 86, 6])upper_blue = np.array([64, 255, 255])# 阈值化图像,只获取绿色mask = cv2.inRange(hsv, lower_blue, upper_blue)mask = cv2.erode(mask, None, iterations=2)mask = cv2.dilate(mask, None, iterations=2)# 寻找mask中的轮廓,并初始化球当前的中心(x,y)cnts = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)cnts = imutils.grab_contours(cnts)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"]))# 当圆半径大于5时继续处理if radius > 5:# 在帧上绘制绿色球的外接圆及中心cv2.circle(frame, (int(x), int(y)), int(radius),(0, 255, 255), 2)cv2.circle(frame, center, 5, (0, 0, 255), -1)# 更新中心点队列pts.appendleft(center)# 遍历追踪到的中心点坐标for i in range(1, len(pts)):# 如果为None,忽略if pts[i - 1] is None or pts[i] is None:continue# 否则绘制线连接thickness = int(np.sqrt(64 / float(i + 1)) * 2.5)cv2.line(frame, pts[i - 1], pts[i], (0, 0, 255), thickness)# 展示帧到屏幕cv2.imshow("Frame", frame)# 对图像执行按位与操作# res = cv2.bitwise_and(frame, frame, mask=mask)## cv2.imshow('frame', frame)# cv2.imshow('mask', mask)# cv2.imshow('res', res)k = cv2.waitKey(5) & 0xFFif k == 27:breakcv2.destroyAllWindows()# 如何找到HSV空间值呢?
# 比如要寻找绿色,可以找到BGR(0,255,0) ,转换为HSV,然后取[ H-10,S,V]为下限 -- [ H+10,S,V]为上限;
green = np.uint8([[[0, 255, 0]]])
hsv_green = cv2.cvtColor(green, cv2.COLOR_BGR2HSV)
print(hsv_green)
# [[[60 255 255]]]

参考

  • https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_colorspaces/py_colorspaces.html#converting-colorspaces

使用Python,OpenCV转换颜色空间,追踪对象的轨迹相关推荐

  1. 2021-01-07 Python Opencv转换颜色空间 RGB转为HSV

    Python Opencv转换颜色空间 RGB转为HSV 举个例子,通过摄像头把视频中的蓝色区域凸显出来,剩余的颜色均为黑色 import numpy as npcap = cv2.VideoCapt ...

  2. python opencv调用摄像头并追踪移动物体,浅析Python+OpenCV使用摄像头追踪人脸面部血液变化实现脉搏评估...

    使用摄像头追踪人脸由于血液流动引起的面部色素的微小变化实现实时脉搏评估. 效果如下(演示视频): 由于这是通过比较面部色素的变化评估脉搏所以光线.人体移动.不同角度.不同电脑摄像头等因素均会影响评估效 ...

  3. python+opencv实现运动检测追踪拍照

    所需模块:opencv .time.datetime.os.easygui(产生ui界面可不要) 目的:python+opencv实现运动检测追踪并且拍照储存起来 import cv2 import ...

  4. opencv转换颜色空间更改图片背景

    思路: 1.将BGR转换为HSV颜色空间 2.设置掩模 3.位运算 这里以更改摩托罗拉logo背景为例,图片在必应图片搜索得知,具体代码如下: import numpy as np import cv ...

  5. python—opencv 实时视频目标追踪

    功能: 1.获取摄像头,实时显示 2.鼠标获取第一帧中的目标roi区域 3.在视频中实时对目标进行追踪. 4.两种目标追踪的方式:'meanshift','camshift' 5.保存视频 impor ...

  6. python opencv转换bytesio

    opencv bytesio 转不转bytesio,opencv都能读取文字成图片: str_encode opencv也能解析 def a():path='d:/1.jpg'for i in ran ...

  7. python opencv cv2.cvtColor()方法(将图像从一种颜色空间转换为另一种颜色空间)(转换成灰度图)

    def cvtColor(src, code, dst=None, dstCn=None): # real signature unknown; restored from __doc__" ...

  8. python 颜色空间转换_python opencv入门 颜色空间转换(9)

    内容来自OpenCV-Python Tutorials 自己翻译整理 目标 学习如何将RGB转换为灰度图,或者RGB转换为HSV 写个程序从一副图像获取某个固定颜色的物体 学习函数cv2.cvtCol ...

  9. Python+Opencv图像处理新手入门教程(二):颜色空间转换,图像大小调整,灰度直方图

    一步一步来吧 上一节:Python+Opencv图像处理新手入门教程(一):介绍,安装与起步 1.什么是图像 对于计算机而言,图像的本质是一个由像素点构成的矩阵. 例如我们用肉眼很容易分辨一辆汽车的后 ...

最新文章

  1. docker pull时候太慢卡死
  2. Scrapy练习——爬取京东商城商品信息
  3. C++ :学习(类、指针)
  4. 编写一个Zipkin Server
  5. YOLOv5训练coco128数据集流程
  6. 为什么已有Elasticsearch,我们还要重造实时分析引擎AresDB?
  7. React Native顶|底部导航使用小技巧
  8. 中小企业如何搭建数据分析平台?
  9. 松露菌行业调研报告 - 市场现状分析与发展前景预测
  10. SAXBuilder的介绍和使用细节
  11. 南宁研祥智谷远程预付费电能管理系统的应用
  12. 美国免费为全世界提供GPS服务,为什么中国还要搞“北斗”?
  13. java读取excrl模板填充数据_java中自定义excel模板并且填充内容
  14. fuzzy extractor 模糊提取器的代码解读和实现
  15. SkeyeVSS综合安防监控Onvif、RTSP、GB28181视频云解决方案之服务器系统硬件资源管理
  16. vue 实现点击插入输入框_vue把输入框的内容添加到页面的实例讲解
  17. 《MultiPoseNet: Fast Multi-Person Pose Estimation using Pose Residual Network》论文阅读
  18. python 将List中元素两两组合
  19. Nvidia Agx Xavier平台10Gb PCIE网卡速度限制为1Gb问题调试记录
  20. TS-修饰符 与 static

热门文章

  1. 2021年大数据ELK(十六):Elasticsearch SQL(职位查询案例)
  2. 2021年大数据Kafka(二):❤️Kafka特点总结和架构❤️
  3. getCacheDir() 和 getFilesDir() 的区别
  4. 微信小程序自定义组件Component的简单使用
  5. 浅谈UWB(超宽带)室内定位技术(转载)
  6. AngularJS $eval $parse
  7. linux下出现ping:unknown host www.baidu.com问题时的解决办法——ubuntu下局域网络的配置...
  8. mysql在linux下的安装
  9. 了解CSS/CSS3原生变量var (转)
  10. 【POJ1113】Wall(凸包)