Python+OpenCV颜色识别 物体追踪

2023-05-16

Python+OpenCV颜色识别 物体追踪

对于颜色识别和imutils包的用法请浏览我得另一篇博客:OpenCV学习笔记

文章目录

  • Python+OpenCV颜色识别 物体追踪
    • 代码原理
    • 代码
    • 最终效果图

个人博客原址:OpenCV颜色识别 物体追踪

代码原理

这是个比较简单的代码。代码实现的就是简单的物体追踪,将物体用方框框出。

简单来讲就是先进行颜色识别,正确识别到物体后获取物体的外接矩形再画出外接矩形即可。

详细的解释可以看代码注释,应该是容易理解的。

代码

import cv2
import numpy as np
import imutils
from imutils import contours

# 颜色阈值
lower = np.array([130, 62, 72])
upper = np.array([170, 255, 148])
# 内核
kernel = np.ones((5, 5), np.uint8)
# 打开摄像头
vc = cv2.VideoCapture(0)
if vc.isOpened():
    flag, frame = vc.read()
    # 翻转图像
    # 这一步可以忽略,博主的摄像头是反着的
    # 所以加上这句话可以让摄像头的图像正过来
    frame = imutils.rotate(frame, 180)
    cv2.imshow("frame", frame)
else:
    flag = False
while flag:
    flag, frame = vc.read()
    # 翻转图像
    frame = imutils.rotate(frame, 180)
    draw_frame = frame.copy()
    if frame is None:
        break
    if flag is True:
        '''下面对摄像头读取到的图像进行处理,这个步骤是比较重要的'''
        # 转换颜色空间HSV
        frame_hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
        # 颜色识别
        img = cv2.inRange(frame_hsv, lower, upper)
        # 膨胀操作
        dilation = cv2.dilate(img, kernel, iterations=1)
        # 闭操作
        closing = cv2.morphologyEx(dilation, cv2.MORPH_CLOSE, kernel)
        # 高斯滤波
        closing = cv2.GaussianBlur(closing, (5, 5), 0)
        # 边缘检测
        edges = cv2.Canny(closing, 10, 20)
        '''上面进行那么多操作就是为了得到更好的目标图形,具体效果因环境而异'''
        # 寻找轮廓
        cnts, _ = cv2.findContours(
            edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
        # 判断轮廓数量也就是判断是否寻找到轮廓,如果没有找到轮廓就不继续进行操作
        if len(cnts) > 0:
            # 存放轮廓面积的列表
            s = []
            # 存放最大轮廓的索引
            max_index = 0
            # 获得排序后的轮廓列表以及每个轮廓对应的外接矩形
            (cnts, boundingRects) = contours.sort_contours(cnts)
            # 寻找面积最大的轮廓的索引
            for cnt in cnts:
                s.append(cv2.contourArea(cnt))
            max_index = s.index(max(s))
            # 根据面积最大轮廓的索引找到它的外接矩形的信息
            (x, y, w, h) = boundingRects[max_index]
            # 画矩形
            frame_out = cv2.rectangle(
                         draw_frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
        cv2.imshow("frame", draw_frame)
        if cv2.waitKey(10) == 27:
            break
vc.release()
cv2.destroyAllWindows()

具体解释都在代码注释里面了,下面我要提一些注意的地方。

  1. 获得过图像之后可能需要进行一系列的形态学操作,这样可以让获得的图像更加接近目的图像。这些操作虽然不是必需的但如果正常取得的图像效果不好的时候可以加上。
  2. 函数contours.sort_contoursimutils.rotateimutils包里面的,使用起来比较方便,具体用法可以看博主的另一篇博客:OpenCV学习笔记。外接矩形也可以通过cv2.boundingRect函数获得。
  3. 代码中博主是以轮廓的最大面积为条件画的图,但这个条件应该根据自己想要的效果而定。这里除了寻找最大面积以外还可以寻找最大周长、最长的边之类的。

最终效果图

最终效果图

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python+OpenCV颜色识别 物体追踪 的相关文章

  • keil5 烧录程序到单片机的方法

    Keil是一种常用的单片机开发工具 xff0c 支持多种单片机芯片 下面详细说明Keil5如何烧录程序到单片机的方法 编译程序 首先 xff0c 在Keil5中打开编写好的程序工程 xff0c 进行编译 编译生成的可执行文件是 hex或 b
  • 基于STM32 + SYN6288语音播报

    完整代码下载 https download csdn net download zhouml msn 85592868 一 接线示例 xff1a 二 模块重点 xff1a 1 xff1a 5V供电 xff0c 功耗约120mA 带图中小喇叭
  • STM32开发---ADC单通道电压采集

    代码zip下载 xff1a https download csdn net download zhouml msn 86666457 spm 61 1001 2014 3001 5501 STM32 ADC单通道电压数据采集 xff0c 直
  • Keil仿真调试Debug不能放断点_图解

    前提 xff1a 正常连接了调试器 43 开发板 xff0c 才能进入Debug模式 xff01 xff01 xff01 一 正常情况 当Keil进入Debug模式 xff0c 正常可以放置断点时的界面 xff0c 是下面这样的 xff1a
  • 无人机(2)_电机

    型号值 如2212 前两位 电机外径 后两位 转子高度KV值 电机空转 时 电压每提高1V 电机转速提高 800转 分钟无刷电机 电机分有刷和无刷 无人机都是无刷 电机 贵 力气大 耐用 电池节数 很重要 一节是4 2V电调大小 A越大越好
  • Linux下运用opencv的简单图像编程

    文章目录 Linux下运用opencv的简单图像编程一 编写一个打开图片进行特效显示的代码 一 用普通方式编译程序1 准备工作 xff1a 2 准备一张图片 xff0c 移到相同目录下3 编译程序4 运行程序 二 用make 43 make
  • 简单stm32程序编写以及调试

    简单stm32程序编写以及调试 一 环境配置 1 MDK的安装 MDK xff08 Microcontroller Development Kit xff09 是针对ARM处理器 xff0c 特别是Cortex M内核处理器的最佳开发工具
  • STM32以中断的方式点亮LED小灯(标准库)

    STM32以中断的方式点亮LED小灯 xff08 标准库 xff09 文章目录 STM32以中断的方式点亮LED小灯 xff08 标准库 xff09 一 认识中断1 中断优先级 xff1a 2 中断嵌套 xff1a 3 中断执行流程4 中断
  • STM32 I2C_OLED显示汉字及屏幕滚动

    STM32 I2C OLED显示汉字及屏幕滚动 文章目录 STM32 I2C OLED显示汉字及屏幕滚动一 I2C以及AHT20温湿度传感器介绍二 用0 96寸OLED屏幕显示数据1 OLED介绍2 样例测试 三 汉字编码原理编码排序A0A
  • # FPGA编程入门

    FPGA编程入门 文章目录 FPGA编程入门一 1位全加器1 原理图1 1原理图1 2 全加器 2 verilog实现1位全加器2 1 代码2 2 编译 xff0c 查看RTL2 3 仿真实现 二 烧录三 4位全加器1 原理图实现4位全加器
  • 基于NIOS-II软核与verilog语言的流水灯实现

    基于NIOS II软核与verilog语言的流水灯实现 文章目录 基于NIOS II软核与verilog语言的流水灯实现1 实验目的2 实验设备3 实验内容4 软核设计4 1 新建一个工程4 2 Qsys 系统设计4 3 进行逻辑连接4 3
  • 处理器的大小端及位序

    大端Big Endian xff1a 数据的高字节存储到低位地址中 小端little Endian xff1a 数据的低字节存储到低位地址中 举例说明 xff1a 32位16进制数据为 61 0x12345678 xff0c 大端存储 地址
  • # VGA协议实践

    VGA协议实践 文章目录 VGA协议实践1 VGA介绍2 ALTPLL3 字模与图像生成4 ROM5 代码5 1 vga驱动模块5 2 显示数据生成模块5 3 按键消抖模块5 4 顶层模块5 5 TCL绑定引脚代码 6 效果7 总结8 参考
  • 串口扩展芯片

    串口扩展芯片 WK2124 实现SPI桥接 扩展4个增强功能串口 xff08 UART xff09 功能 扩展的子通道具备以下功能特点 xff1a 每个子通道UART的波特率 字长 校验格式可以独立设置 xff0c 最高可以提供2Mbps的
  • 手把手教你学51单片机_第 一、二章

    MCU CPU Flash 8kByte EMMC 64G 程序存储空间 xff0c 容量大 xff0c 掉电数据不丢失 RAM 512Byte DDR 4G 代码运行时中间变量的存取区 xff0c 无限次读写 xff0c 且读写速度快 x
  • 九天揽月带你玩转Ardupilot 的EKF2纸老虎

    目录 目录 摘要 1 kalman基础知识储备 2 ardupilot代码EKF流程学习 3 下面重点 逐一分析各个函数 摘要 本文主要记录自己学习ardupilot的ekf2代码的过程 xff0c 相信很多人想移植或者学习ekf2 看到眼
  • 在C++中定义全局变量时避免重复定义

    问题 xff1a 如何在C 43 43 中定义全局变量时避免重复定义呢 今天遇到问题 xff0c 全局变量重定义错误 xff0c 印象中记得要加extern xff0c 但是怎么都不对 xff0c 找资料后得到了解决方案 xff0c 记之
  • Ubuntu16.04下的FireFox浏览器无法查看网页视频的原因及解决方法

    Ubuntu16 04自带的firefox浏览器 在搭建好其他环境后 xff0c 我通过firefox去廖雪峰老师的官网查看python的教程 xff0c 发现无法打开网页中的视频 此时 xff0c 我又通过firefox浏览器中进入了腾讯
  • 【嵌入式模块】MPU6050

    文章目录 0 前言1 MPU6050概述1 1 基本概述1 2 引脚和常用原理图 2 代码3 姿态解算3 1 欧拉角 amp 旋转矩阵3 2 DMP 3 校正 0 前言 作为惯性传感器中入门级别的器件 xff0c MPU6050凭借它出色的
  • 7-13 出栈序列的合法性(25 分)(解决此类题的重要规律)

    给定一个最大容量为 M 的堆栈 xff0c 将 N 个数字按 1 2 3 N 的顺序入栈 xff0c 允许按任何顺序出栈 xff0c 则哪些数字序列是不可能得到的 xff1f 例如给定 M 61 5 N 61 7 xff0c 则我们有可能得

随机推荐

  • STL-map的简单用法(以及如何使用sort将map进行排序)

    map是不可排序的 xff0c 可是凡事都不是绝对的 xff0c 现在我就告诉大家如何将map进行简单的排序以及其的简单用法 一 map的常用方式 xff1a mapname clear xff09 xff1a 清空map mapname
  • 初识c语言的条件判断和循环。

    刚开始接触c语言的循环 xff0c 也许你会烦躁 xff0c 但是你只需要静下心来再看一遍 xff0c 你就会有更多的收获 xff0c 加油 xff01 xff08 凡事开头难 xff0c 迈过第一关 xff0c 你就是最棒的 xff01
  • digest鉴权

    摘要 式认证 xff08 Digest authentication xff09 是一个简单的认证机制 xff0c 最初是为HTTP协议开发的 xff0c 因而也常叫做HTTP摘要 xff0c 在RFC2671中描述 其身份验证机制很简单
  • 超长整型除法运算

    1017 A除以B 20分 本题要求计算 A B xff0c 其中 A 是不超过 1000 位的正整数 xff0c B 是 1 位正整数 你需要输出商数 Q 和余数 R xff0c 使得 A 61 B Q 43 R 成立 输入格式 xff1
  • 练习2-11 计算分段函数[2] (10分)

    本题目要求计算下列分段函数f x 的值 xff1a f2 11 注 xff1a 可在头文件中包含math h xff0c 并调用sqrt函数求平方根 xff0c 调用pow函数求幂 输入格式 输入在一行中给出实数x 输出格式 在一行中按 f
  • 习题4-2 求幂级数展开的部分和 (20分)

    已知函数e x可以展开为幂级数1 43 x 43 x 2 2 43 x 3 3 43 43 x k k 43 现给定一个实数x xff0c 要求利用此幂级数部分和求e x 的近似值 xff0c 求和一直继续到最后一项的绝对值小于0 0000
  • 练习7-10 查找指定字符 (15分)

    本题要求编写程序 xff0c 从给定字符串中查找某指定的字符 输入格式 xff1a 输入的第一行是一个待查找的字符 第二行是一个以回车结束的非空字符串 xff08 不超过80个字符 xff09 输出格式 xff1a 如果找到 xff0c 在
  • 习题9-5 通讯录排序 (20分)

    输入n个朋友的信息 xff0c 包括姓名 生日 电话号码 xff0c 本题要求编写程序 xff0c 按照年龄从大到小的顺序依次输出通讯录 题目保证所有人的生日均不相同 输入格式 输入第一行给出正整数n xff08 lt 10 xff09 随
  • C++提高运行速度

    ios base span class token punctuation span span class token punctuation span span class token function sync with stdio s
  • Java小项目(功能齐全)-停车场管理系统(中英文版)

    一 项目目的 xff1a 停车场管理系统 对停车场进行更系统的管理 xff0c 使整个过程更加高效有序 二 主要功能 xff1a 1 进入停车场 2 离开停车场 3 搜索信息 4 停车场当前车位明细查询 5 历史查询 三 附加功能 xff1
  • 应用YOLOV4 - DeepSort 实现目标跟踪

    转载自 https cloud tencent com developer article 1706259 本文分享利用yolov4 43 deepsort实现目标跟踪 xff0c 主要是讲解如何使用 xff0c 具体原理可以根据文中的参考
  • C++ char* 字符串处理、数组指针及传参

    编写函数 xff0c 将一个字符串 str 中指定的字符 ch 删去 xff08 包括重复出现的字符 xff09 xff0c 并编写主函 数进行调用测试 函数原型 void delchar char str char ch 输入 xff1a
  • STM32芯片写保护/解除写保护的方法

    一 写保护 1 目的 将Flash设置为写保护的目的 xff0c 是为了防止其他人通过J Link xff0c ULINK2等仿真器 xff0c 将Flash中的程序读取出来 设想一下 xff0c 你辛辛苦苦研发的产品 xff0c 别人通过
  • RG401 4G数传配置

    LP RG401为乐朴智能研发的一款4G无线数传模块 xff0c 支持接入移动 电信 联通运营商网络 xff0c 并且可以实现 3G 网络与 4G 网络之间的无缝切换 模块在运营商网络覆盖范围内可以实现点对点 一对多 多对多组网的不限距离数
  • 直流无刷电机与空心杯电机的区别

    浏览数 xff1a 132 日期 xff1a 2011 8 15 8 43 03 小 中 大 关闭注释 显示注释 直流无刷电机与空心杯电机的区别 空心杯电机CORELESS MOTOR xff0c 也叫无铁芯电机 xff0c 顾名思义 xf
  • 摘要认证

    1 摘要认证的改进 1 1 用摘要保护密码 摘要认证遵循 绝不通过网络发送密码 客户端发送一个 指纹 或者密码的 摘要 xff0c 是密码的不可逆扰码 1 2 单向摘要 z还要是对信息主体的浓缩 摘要是一个单向函数 xff0c 主要是将无线
  • 4路红外循迹模块使用教程

    4路红外循迹模块使用教程 文章目录 4路红外循迹模块使用教程模块详细信息 xff1a 模块接线模块使用相关代码 个人原创博客 xff1a 点击浏览 模块详细信息 xff1a 工作电压 xff1a DC 3 3V 5V 工作电流 xff1a
  • 循迹智能小车 循黑线 智能小车 红外循迹传感器 单片机

    循迹智能小车 循黑线 文章目录 循迹智能小车 循黑线硬件菜单硬件使用硬件组装程序设计前的理解程序代码 个人原创博客 xff1a 点我浏览 硬件菜单 单片机型号 xff1a STC16F40K128 4路红外循迹模块 小车底盘套件 xff08
  • 树莓派使用USB串口通信 CH340

    树莓派使用USB串口通信 CH340 个人博客原址 xff1a 树莓派使用USB串口通信 CH340 因为需要使用树莓派做自控方向的东西 xff0c 所以需要使用树莓派串口与各种外设进行通信 使用串口的话个人比较喜欢直接使用USB串口 xf
  • Python+OpenCV颜色识别 物体追踪

    Python 43 OpenCV颜色识别 物体追踪 对于颜色识别和imutils包的用法请浏览我得另一篇博客 xff1a OpenCV学习笔记 文章目录 Python 43 OpenCV颜色识别 物体追踪代码原理代码最终效果图 个人博客原址