OpenCV3.0+Python3.6实现特定颜色的物体追踪


Posted in Python onJuly 23, 2019

一、环境

win10、Python3.6、OpenCV3.x;编译器:pycharm5.0.3

二、实现目标

根据需要追踪的物体颜色,设定阈值,在视频中框选出需要追踪的物体。

三、实现步骤

1)根据需要追踪的物体颜色,设定颜色阈值,获取追踪物体的掩膜

代码:generate_threshold.py

# -*- coding : utf-8 -*-
# Author: Tom Yu
import cv2
import numpy as np
 
cap = cv2.VideoCapture(0)#获取摄像头图像
# img = cv2.imread("timg1.jpg")
# hsv_img = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
 
def nothing(x):
  pass
def createbars():
  """
  实现创建六个滑块的作用,分别控制H、S、V的最高值与最低值
  """
  cv2.createTrackbar("H_l","image",0,180,nothing)
  cv2.createTrackbar("H_h","image",0,180,nothing)
  cv2.createTrackbar("S_l","image",0,255,nothing)
  cv2.createTrackbar("S_h","image",0,255,nothing)
  cv2.createTrackbar("V_l","image",0,255,nothing)
  cv2.createTrackbar("V_h","image",0,255,nothing)
cv2.namedWindow("image")
createbars()#创建六个滑块
 
lower = np.array([0,0,0])#设置初始值
upper = np.array([0,0,0])
while True:
  ret,frame = cap.read()
  hsv_frame = cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)#将图片由BGR颜色空间转化成HSV空间,HSV可以更好地分割颜色图形
  lower[0]=cv2.getTrackbarPos("H_l","image")#获取"H_l"滑块的实时值
  upper[0]=cv2.getTrackbarPos("H_h","image")#获取"H_h"滑块的实时值
  lower[1]=cv2.getTrackbarPos("S_l","image")
  upper[1]=cv2.getTrackbarPos("S_h","image")
  lower[2]=cv2.getTrackbarPos("V_l","image")
  upper[2]=cv2.getTrackbarPos("V_h","image")
 
  mask = cv2.inRange(hsv_frame,lower,upper)#cv2.inrange()函数通过设定的最低、最高阈值获得图像的掩膜
  cv2.imshow("img",frame)
  cv2.imshow("mask",mask)
  if cv2.waitKey(1)&0xff == 27:
    break
 
cv2.destroyAllWindows()

实现效果:获取需要追踪的物体颜色阈值

OpenCV3.0+Python3.6实现特定颜色的物体追踪

2)根据获取到的阈值,设定阈值范围,在视频中追踪特定颜色的物体并用框选框出所需追踪的物体

代码:tracking_object.py

# -*- coding : utf-8 -*-
# Author: Tom Yu
import cv2
import numpy as np
 
cap = cv2.VideoCapture(0)#获取摄像头视频
 
while True:
  ret,frame = cap.read()#读取每一帧图片
  hsv_frame = cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)#将每一帧图片转化HSV空间颜色
  """
  依据之前的脚本获取的阈值设置最高值与最低值
  """
  lower = np.array([0,104,205])
  upper = np.array([15,208,255])
 
  mask = cv2.inRange(hsv_frame,lower,upper)
  img,conts,hier = cv2.findContours(mask,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)#找出边界
  cv2.drawContours(frame,conts,-1,(0,255,0),3)#画出边框
  dst = cv2.bitwise_and(frame,frame,mask=mask)#对每一帧进行位与操作,获取追踪图像的颜色
  #cv2.imshow("mask",mask)
  #cv2.imshow("dst",dst)
  cv2.imshow("frame",frame)
  if cv2.waitKey(1)&0xff == 27:
    break
 
cv2.destroyAllWindows()

实现效果:

OpenCV3.0+Python3.6实现特定颜色的物体追踪

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
关于你不想知道的所有Python3 unicode特性
Nov 28 Python
通过C++学习Python
Jan 20 Python
Python进程间通信用法实例
Jun 04 Python
讲解Python的Scrapy爬虫框架使用代理进行采集的方法
Feb 18 Python
获取python的list中含有重复值的index方法
Jun 27 Python
python开启debug模式的方法
Jun 27 Python
python查看数据类型的方法
Oct 12 Python
tensorflow求导和梯度计算实例
Jan 23 Python
python库skimage给灰度图像染色的方法示例
Apr 27 Python
手把手教你配置JupyterLab 环境的实现
Feb 02 Python
pandas中对文本类型数据的处理小结
Nov 01 Python
详细介绍python操作RabbitMq
Apr 12 Python
提升Python效率之使用循环机制代替递归函数
Jul 23 #Python
深入了解Django View(视图系统)
Jul 23 #Python
Python Opencv任意形状目标检测并绘制框图
Jul 23 #Python
flask框架单元测试原理与用法实例分析
Jul 23 #Python
Python3的高阶函数map,reduce,filter的示例详解
Jul 23 #Python
python实现socket+threading处理多连接的方法
Jul 23 #Python
简单了解Django ContentType内置组件
Jul 23 #Python
You might like
探讨方法的重写(覆载)详解
2013/06/08 PHP
thinkPHP框架通过Redis实现增删改查操作的方法详解
2019/05/13 PHP
15个款优秀的 jQuery 图片特效插件推荐
2011/11/21 Javascript
JQUERY对单选框(radio)操作的小例子
2013/04/25 Javascript
关于js中for in的缺陷浅析
2013/12/02 Javascript
js拆分字符串并将分割的数据放到数组中的方法
2015/05/06 Javascript
jQuery实现两款有动画功能的导航菜单代码
2015/09/16 Javascript
JavaScript的removeChild()函数用法详解
2015/12/27 Javascript
jQuery简单获取键盘事件的方法
2016/01/22 Javascript
Angularjs中UI Router全攻略
2016/01/29 Javascript
jQuery EasyUI常用数据验证汇总
2016/09/18 Javascript
纯JavaScript手写图片轮播代码
2016/10/20 Javascript
jquery表单验证插件validation使用方法详解
2017/01/20 Javascript
localStorage的黑科技-js和css缓存机制
2017/02/06 Javascript
Js中async/await的执行顺序详解
2017/09/22 Javascript
webpack之devtool详解
2018/02/10 Javascript
Vue常用指令详解分析
2018/08/19 Javascript
JavaScript使用prototype原型实现的封装继承多态示例
2018/08/31 Javascript
详解VScode编辑器vue环境搭建所遇问题解决方案
2019/04/26 Javascript
微信小程序进入广告实现代码实例
2019/09/19 Javascript
Vue Elenent实现表格相同数据列合并
2020/11/30 Vue.js
原生JS运动实现轮播图
2021/01/02 Javascript
[42:39]老党炸弹人试玩视频
2014/09/03 DOTA
使用SAE部署Python运行环境的教程
2015/05/05 Python
python中dict字典的查询键值对 遍历 排序 创建 访问 更新 删除基础操作方法
2018/09/13 Python
简单了解django orm中介模型
2019/07/30 Python
在python中logger setlevel没有生效的解决
2020/02/21 Python
pycharm 快速解决python代码冲突的问题
2021/01/15 Python
CSS3 box-shadow属性实例详解
2020/06/19 HTML / CSS
如何写毕业求职自荐信
2013/11/06 职场文书
广告语设计及教案
2014/03/21 职场文书
社区灵活就业证明
2014/11/03 职场文书
2015年度护士个人工作总结
2015/04/09 职场文书
雨雪天气温馨提示
2015/07/15 职场文书
详解在SQLPlus中实现上下键翻查历史命令的功能
2022/03/18 SQL Server
Python函数对象与闭包函数
2022/04/13 Python