通过OpenCV实现对指定颜色的物体追踪

实现对指定颜色的物体追踪主要分为以下几步:

  1. 使用OpenCV读取视频,并对读取的帧进行预处理,转换为HSV色彩空间。
import cv2

# 读取视频
cap = cv2.VideoCapture('test.mp4')

while cap.isOpened():
    ret, frame = cap.read()

    if not ret:
        break

    # 转换为HSV色彩空间
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

    # TODO: 对hsv图像进行处理
  1. 定义颜色范围,用于后续追踪指定颜色的物体。
# 颜色范围
lower_color = (20, 100, 100)
upper_color = (30, 255, 255)
  1. 对预处理后的帧进行二值化,获取指定颜色的物体的掩码。
import numpy as np

# 二值化
mask = cv2.inRange(hsv, lower_color, upper_color)

# 腐蚀和膨胀操作,去掉噪声
kernel = np.ones((5, 5), np.uint8)
mask = cv2.erode(mask, kernel, iterations=2)
mask = cv2.dilate(mask, kernel, iterations=2)
  1. 使用轮廓检测对掩码进行处理,获取指定颜色的物体的外边界矩形框。
# 轮廓检测
contours, hierarchy = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# 筛选出最大轮廓
if len(contours) > 0:
    max_contour = max(contours, key=cv2.contourArea)

    # 获取轮廓的外接矩形框
    x, y, w, h = cv2.boundingRect(max_contour)

    # 画出矩形框
    cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
  1. 对每帧的处理结果进行展示。
# 展示结果
cv2.imshow('frame', frame)

# 按q键退出循环
if cv2.waitKey(1) & 0xFF == ord('q'):
    break

# 释放资源
cap.release()
cv2.destroyAllWindows()

以下是两个示例:

示例一:追踪黄色球体

  1. 获取黄色颜色范围。
# 颜色范围
lower_yellow = (25, 80, 80)
upper_yellow = (35, 255, 255)
  1. 对预处理后的帧进行二值化。
# 二值化
mask = cv2.inRange(hsv, lower_yellow, upper_yellow)
  1. 使用轮廓检测对掩码进行处理,获取黄色球体的外边界矩形框。
if len(contours) > 0:
    max_contour = max(contours, key=cv2.contourArea)
    x, y, w, h = cv2.boundingRect(max_contour)
    cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)

示例二:追踪红色人手

  1. 获取红色颜色范围。
# 颜色范围
lower_red = np.array([0, 50, 50])
upper_red = np.array([10, 255, 255])
mask1 = cv2.inRange(hsv, lower_red, upper_red)
lower_red = np.array([170, 50, 50])
upper_red = np.array([180, 255, 255])
mask2 = cv2.inRange(hsv, lower_red, upper_red)
mask = mask1 + mask2
  1. 对预处理后的帧进行二值化。
# 二值化
mask = mask1 + mask2
  1. 使用轮廓检测对掩码进行处理,获取红色人手的外边界矩形框。
if len(contours) > 0:
    max_contour = max(contours, key=cv2.contourArea)
    x, y, w, h = cv2.boundingRect(max_contour)
    cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:通过OpenCV实现对指定颜色的物体追踪 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • 对python list 遍历删除的正确方法详解

    以下是详细讲解“对Python列表遍历删除的正确方法详解”的完整攻略。 在Python中,列表是一种常用的数据类型,可以用来存储一组有序的数据。在对列表进行遍时,有时需要删除其中的元素。本文将介绍对Python列表进行遍历删除的正确方法,并提供两个示例说明。 遍历删除的错误方法 在遍历列表时,有些人会尝试直接删除列表中的元素,例如: lst = [1, 2,…

    python 2023年5月13日
    00
  • python使用cPickle模块序列化实例

    使用python内置的cPickle模块可以很方便地将python对象序列化为二进制流并存储到文件或数据库中。在需要使用这个对象时,我们可以反序列化获取原对象。本文将为大家详细讲解如何使用cPickle模块序列化实例。 1. cPickle模块序列化实例 1.1 序列化实例 在Python中,我们可以使用cPickle模块对一个类的实例进行序列化,其底层其实…

    python 2023年6月2日
    00
  • Python爬虫和反爬技术过程详解

    Python爬虫和反爬技术过程详解 1. 爬虫过程 1.1 网页请求 在Python中,我们可以使用第三方库如requests、urllib等发起网页请求,获取目标网页的HTML源代码。通过requests库发起文本形式的GET请求方法可以获得目标网站的的HTML页面,如下例所示: import requests response = requests.ge…

    python 2023年5月14日
    00
  • Python+tkinter实现网站下载工具

    Python是一种强大的编程语言,它非常适合开发各种实用工具。随着互联网的普及,网站下载工具也成为了许多用户的必备工具之一。在本文中,我们将引导您通过Python+tkinter实现一个简单的网站下载工具。整个过程中,我们将会使用到以下几个步骤: 构建GUI界面 输入要下载的网站URL 解析HTML文档获取下载链接 下载文件并显示进度条 下面将详细讲解这几个…

    python 2023年6月13日
    00
  • Python迭代器Iterable判断方法解析

    当我们遇到一个新的对象想判断它是否为可迭代(Iterable)对象时,需要用到isinstance()方法判断。 判断代码为: from collections.abc import Iterable a = [1, 2, 3] b = ‘abc’ c = {‘name’: ‘Tom’, ‘age’: 18} print(isinstance(a, Iter…

    python 2023年6月3日
    00
  • python中的% 是什么意思,起到什么作用呢

    在 Python 中,% 是一种字符串格式化方式。它允许我们将变量插入到字符串中,而不必使用字符串拼接的方式,使代码更简洁易读。下面是关于 % 的详细讲解: 1. 字符串格式化 使用 % 进行字符串格式化是将变量插入到字符串中的一种简洁方法。我们可以使用 % 表示符,将变量的值插入到字符串中的位置。下面是一个简单示例: name = "小明&quo…

    python 2023年5月19日
    00
  • python读取中文路径时出错(2种解决方案)

    在Python编程中,有时候我们会遇到读取中文路径时出错的问题。这通常是由于编码问题引起的。本攻略将提供解决问题的两种方法,并提供两个示例。 解决方法 以下是解决读取中文路径时出错的两种方法: os.path.abspath方法 使用os.path.join方法 使用os.path.abspath方法 我们可以使用os.path.abspath方法来解决读取…

    python 2023年5月13日
    00
  • Python进阶篇之正则表达式常用语法总结

    下面是详细的攻略: Python进阶篇之正则表达式常用语法总结 正则表达式是一种用于匹配字符串的模式。在Python中,我们可以使用re模块来编写正则表达式。本文将介绍Python正则表达式的常用语法,包括匹配单个字符、匹配多个字符、匹配特殊字符等。 匹配单个字符 下面是一些常用的正则表达式,用于匹配单个字符: .:匹配任意字符。 \d:匹配任意数字。 \D…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部