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 相关文章推荐
跟老齐学Python之画圈还不简单吗?
Sep 20 Python
Python面向对象特殊成员
Apr 24 Python
Ubuntu安装Jupyter Notebook教程
Oct 18 Python
Python3生成手写体数字方法
Jan 30 Python
python opencv 图像尺寸变换方法
Apr 02 Python
python 定时修改数据库的示例代码
Apr 08 Python
Python实现查看系统启动项功能示例
May 10 Python
Flask框架web开发之零基础入门
Dec 10 Python
Python 数据库操作 SQLAlchemy的示例代码
Feb 18 Python
python sort、sort_index方法代码实例
Mar 28 Python
详解python opencv、scikit-image和PIL图像处理库比较
Dec 26 Python
python中return如何写
Jun 18 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
探讨:web上存漏洞及原理分析、防范方法
2013/06/29 PHP
PHP SOCKET编程详解
2015/05/22 PHP
PHP 7.1中AES加解密方法mcrypt_module_open()的替换方案
2017/10/17 PHP
PHP扩展Swoole实现实时异步任务队列示例
2019/04/13 PHP
javascript(jquery)利用函数修改全局变量的代码
2009/11/02 Javascript
javascript 四则运算精度修正函数代码
2010/05/31 Javascript
Jquery实现仿新浪微博获取文本框能输入的字数代码
2013/02/22 Javascript
深入理解JavaScript系列(43):设计模式之状态模式详解
2015/03/04 Javascript
JavaScript中用于生成随机数的Math.random()方法
2015/06/15 Javascript
Vue2单一事件管理组件通信
2017/05/09 Javascript
Bootstrap响应式表格详解
2017/05/23 Javascript
jQuery实现简单的计时器功能实例分析
2017/08/29 jQuery
Vue官方推荐AJAX组件axios.js使用方法详解与API
2018/10/09 Javascript
JQuery Ajax跨域调用和非跨域调用问题实例分析
2019/04/16 jQuery
vue自定义表单生成器form-create使用详解
2019/07/19 Javascript
node.js文件操作系统实例详解
2019/11/05 Javascript
Vue和React有哪些区别
2020/09/12 Javascript
5个很好的Python面试题问题答案及分析
2018/01/19 Python
python3常用的数据清洗方法(小结)
2019/10/31 Python
python3.6环境下安装freetype库和基本使用方法(推荐)
2020/05/10 Python
如何用python处理excel表格
2020/06/09 Python
记录模型训练时loss值的变化情况
2020/06/16 Python
Python collections.defaultdict模块用法详解
2020/06/18 Python
浅析Python 多行匹配模式
2020/07/24 Python
获取CSDN文章内容并转换为markdown文本的python
2020/09/06 Python
构造方法和其他方法的区别?怎么调用父类的构造方法
2013/09/22 面试题
如果重写了对象的equals()方法,需要考虑什么
2014/11/02 面试题
培训楼经理岗位责任制
2014/02/10 职场文书
白莲教口号
2014/06/18 职场文书
先进单位申报材料
2014/12/25 职场文书
努力学习保证书
2015/02/26 职场文书
2015年维修电工工作总结
2015/04/25 职场文书
matlab xlabel位置的设置方式
2021/05/21 Python
python常见的占位符总结及用法
2021/07/02 Python
mysql 排序失效
2022/05/20 MySQL
nginx sticky实现基于cookie负载均衡示例详解
2022/12/24 Servers