备赛笔记:Opencv学习:颜色识别

2023-05-16

OpenCV颜色识别一般要以下步骤:
1 颜色空间转换,将BGR转换为HSV,用色调区分颜色
2 按照阈值滤出所识别的颜色
3 消除噪点,平滑边界
3 提取连续域,提取要识别的颜色

1 HSV
H:色调,用角度度量,范围0°到360°,从红色开始逆时针方向计算。红色为0°,红绿蓝间隔120°,互补色差180°。
S:饱和度,范围0到1,代表光谱色占颜色比例。0时颜色只有灰度,1时颜色为纯光谱色
V:明度,范围0到1,代表颜色明亮程度。0为黑色,1为白色
在这里插入图片描述
在这里插入图片描述

腐蚀(erosion)和膨胀(dilation)
腐蚀和膨胀作用:
1 消除噪声
2 分割独立图像元素
3 寻找极大值或极小值区域
膨胀:
将图像和任意寻找内涵进行卷积,提取覆盖区域的最大像素值。这一操作会使亮区扩展
腐蚀:
和膨胀正好相反,提取覆盖区域最下像素值1,这一操作让亮区变细,暗区变大

提取连通域:
两种像素邻接关系会构成连通域:4邻接(上下左右),和8邻接(包括对角线)
在这里插入图片描述
opencv里寻找连通域函数findContours()

·语法格式:
image,contours,hierarchy = cv2.findContours(image,mode,method)
式中返回值为:
·image: 与函数参数中的原始图像image一致。
·contours: 返回的轮廓。
·hierarchy: 图像的拓扑信息(轮廓层次)。
式中参数为:
·mode: 轮廓检索模式。
·method: 轮廓的近似方法。
参数mode:

cv2.RETR_EXTERNAL 只检测外轮廓

cv2.RETR_LIST检测的轮廓不建立等级关系

cv2.RETR_CCOMP建立两个等级的轮廓

cv2.RETR_TREE建立一个等级树结构的轮廓

参数method:

cv2.CHAIN_APPROX_NONE存储所有的轮廓点

cv2.CHAIN_APPROX_SIMPLE压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的终点坐标,例如一个矩形轮廓只需4个点来保存轮廓信息

(具体算法实现可以去了解union-find算法)

颜色识别程序实现

import cv2
import numpy as np

cap = cv2.VideoCapture(0)
red_min = np.array([0, 128, 46])
red_max = np.array([5, 255, 255])
red2_min = np.array([156, 128, 46])
red2_max = np.array([180, 255, 255])
yellow_min = np.array([15, 128, 46])
yellow_max = np.array([50, 255, 255])

while True:
    ret,frame = cap.read()
    x,y = frame.shape[0:2]
    small_frame = cv2.resize(frame, (int(y / 2), int(x / 2)))
    cv2.imshow('small', small_frame)
    
    src = small_frame.copy()
    res = src.copy()
    hsv = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)
    mask_red1 = cv2.inRange(hsv, red_min, red_max)
    mask_red2 = cv2.inRange(hsv, red2_min, red2_max)
    mask_yellow = cv2.inRange(hsv, yellow_min, yellow_max)
    mask = cv2.bitwise_or(mask_red1, mask_red2)
    mask = cv2.bitwise_or(mask, mask_yellow)
    res = cv2.bitwise_and(src, src, mask=mask)
    h, w = res.shape[:2]
    blured = cv2.blur(res, (5, 5))
    ret, bright = cv2.threshold(blured, 10, 255, cv2.THRESH_BINARY)
    gray = cv2.cvtColor(bright, cv2.COLOR_BGR2GRAY)
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
    opened = cv2.morphologyEx(gray, cv2.MORPH_CLOSE, kernel)
    closed = cv2.morphologyEx(opened, cv2.MORPH_CLOSE, kernel)
    contours, hierarchy = cv2.findContours(closed, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
    cv2.drawContours(src, contours, -1, (255, 0, 0), 2)
    cv2.imsow("result", src)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cap.release()
cv2.destroyAllWindows()

1 red_min = np.array([0, 128, 46])
red_max = np.array([5, 255, 255])
red2_min = np.array([156, 128, 46])
red2_max = np.array([180, 255, 255])
yellow_min = np.array([15, 128, 46])
yellow_max = np.array([50, 255, 255])
我们要识别两种红色和一种黄色。这里列出它们的阈值上下限作为图像二值化的取值范围

2 hsv = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)
把图像转化为hsv类型

3 mask_red1 = cv2.inRange(hsv, red_min, red_max)
mask_red2 = cv2.inRange(hsv, red2_min, red2_max)
mask_yellow = cv2.inRange(hsv, yellow_min, yellow_max)
mask = cv2.bitwise_or(mask_red1, mask_red2)
mask = cv2.bitwise_or(mask, mask_yellow)
res = cv2.bitwise_and(src, src, mask=mask)
图像二值化,提取满足阈值范围的像素
cv2.inRange(图像,阈值下限,阈值上限):将阈值范围内像素设为255,阈值之外像素设为0
cv2.bitwise_or(图像1,图像2):图像或运算实现叠加
cv2.bitwise_and(图像1,图像2):图像与运算实现叠加

4 kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
opened = cv2.morphologyEx(gray, cv2.MORPH_CLOSE, kernel)
closed = cv2.morphologyEx(opened, cv2.MORPH_CLOSE, kernel)
提取连续开闭区间用于降噪:

kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
设置卷积核,第一个参数代表卷积核形状,有MORPH_RECT(矩形),MORPH_ELLIPSE(椭圆),MORPH_CROSS(十字形),第二个参数代表卷积核行和列

cv2.morphologyEx(要处理图像,处理方式,卷积核)
opened = cv2.morphologyEx(gray, cv2.MORPH_CLOSE, kernel)
开运算,先腐蚀后膨胀,可以消除小黑点,平滑边界。

closed = cv2.morphologyEx(opened, cv2.MORPH_CLOSE, kernel)
闭运算,先膨胀后腐蚀,可以消除小黑洞

5 contours, hierarchy = cv2.findContours(closed, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(src, contours, -1, (255, 0, 0), 2)
提取连续域,得到区间

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

备赛笔记:Opencv学习:颜色识别 的相关文章

  • ROS源代码阅读(8)——定位

    2021SC 64 SDUSC ROS源代码阅读 xff08 8 xff09 SLAM定位 xff1a 机器人定位的方法可以分为非自主定位与自主定位两大类 非自主定位是在定位的过程中机器人需要借助机器人本身以外的装置如 xff1a 全球定位
  • 博途V15

    西门子 博途V15仿真报错 WIN10虚拟机安装博途V15 xff0c 仿真时出现如下报错 无法找到STEP 7 V15许可证 开始以为是许可证问题 xff0c 找了18和19的Sim EKB Install进行激活 xff0c 但是并没有
  • Jetson TX2入门之开箱刷机跑demo

    Jetson TX2 开箱配置 43 刷机 43 跑demo xff08 常见坑总结 xff09 简介 JetSon系列是Nvidia公司推出的面向无人智能化领域的嵌入式平台 xff0c 这块嵌入式板子的出现使得我们可以在边缘设备上处理复杂
  • 集成显卡安装pytorch

    Inter集成显卡安装pytorch 安装pytorch 计算机右键 管理 gt 设备显示器 gt 显示适配器 xff0c 查看显卡 我的电脑只有Inter的集成显卡 xff0c 没有独显 刚开始接触 xff0c 对GPU不懂 xff0c
  • ROS可视化动态查看所有topic的频率/带宽/消息类型/数值

    在程序运行或者回放数据包时 xff0c 希望实时查看到所有的正在向外发送的topic名字 类型 带宽 频率 数值等 除了rostopic list以外还可使用rqt辅助包 打开rqt rqt 选择Plugins插件 Topics信息 top
  • PID与MPC控制方法

    记录udacity 无人驾驶工程师课程中控制部分 MPC代码和实践链接https github com udacity CarND MPC Quizzes 本文按照对udacity课程的理解和翻译而来 1 PID P xff1a Propo
  • C++STL容器及其优缺点介绍

    STL容器介绍及选择方式 容器类型容器优缺点一 序列容器vectordequelistforward list xff08 C 43 43 11 xff09 queuepriority queue stackarray 二 关联容器setm
  • word中插入noteExpress和页码出现乱码解决方法

    在word中出现页码变成PAGE MERGEFORMAT xff0c noteExpress插入的代码也变成了乱码 打开出问题的word文档 xff0c 按照如下设置 xff1a 文件 选项 高级 显示文档内容 不勾选显示域代码而非阈值 修
  • FreeRTOS内核实现04:空闲任务与阻塞延时

    目录 1 引入原因 2 实现空闲任务 2 1 定义空闲任务组件 2 2 创建空闲任务 3 实现阻塞延时 3 1 vTaskDelay函数实现 3 2 修改vTaskSwitchContext函数 3 3 SysTick初始化函数实现 3 4
  • NoteExpress对参考文献格式修改

    文章目录 NoteExpress格式修改1 将带DOI的模板另存为 Revised GBT 7714 20152 编辑自定义的nes文件3 保存选择使用 NoteExpress参考文献格式修改规则GTB 7714 2015下载 NoteEx
  • ubuntu Nvidia显卡驱动安装后 屏幕不能外接显示(扩展显示)的问题

    文章目录 结论安装历程问题详细描述解决方法 结论 配置文件 etc X11 xorg conf未正确配置 xff0c 安装历程 安装显卡驱动后 xff0c 依旧无法正常扩展屏幕显示 xff0c 仔细一看发现在nvidia smi时出现No
  • ubuntu 16.04无法locate boot-repair的解决方法

    ubuntu16 04 07加windows10后无法启动ubunu的问题解决boot repair的安装方法同样适用于ubuntu18 04 ubuntu20 01等系统不能启动的问题 对boot repair修复的原理进行分析 文章目录
  • 论文降低word大小——图像免费压缩方法

    在期刊和毕业论文提交盲审过程中 xff0c 时常对word和pdf的大小进行限制 xff0c 但是在多图的论文中 xff0c 将大小限制在20MB以内较为困难 梳理以下两种方法 xff1a 1 visio图片大小压缩 visio图片插入到w
  • C/C++获取路径下所有文件及其子目录的文件名

    一 功能描述 需要提取某个文件夹下所有文件名字 xff0c 当包含子目录时 xff0c 将子目录及其路径获取到 二 实现方式 使用C语言的opendir函数 DIR span class token operator span dp spa
  • C/C++删除目录文件夹下所有文件(递归)

    一 问题 想要删除目录文件夹 xff0c 类似于rm r的操作 方式1 xff1a 可以使用system直接执行rm r的指令 xff0c system 34 rm r 34 方式2 xff1a 通过C语言内置的函数remove和rmdir
  • Git GUI 的使用

    权限校验 首先 xff0c 服务器需要身份识别 一段RSA加密字符串 启动GUI xff0c 菜单 帮助 Step1 创建密钥 Generate SSH KEY Step2 添加密钥 去你的代码托管服务器 xff0c 你的账号设置中 xff
  • 推荐系统遇上深度学习(九)--评价指标AUC原理及实践

    欢迎关注天善智能 xff0c 我们是专注于商业智能BI xff0c 人工智能AI xff0c 大数据分析与挖掘领域的垂直社区 xff0c 学习 xff0c 问答 求职一站式搞定 xff01 对商业智能BI 大数据分析挖掘 机器学习 xff0
  • VR版“半条命”大火,VR游戏迎来消费级市场的春天?

    彼之砒霜 xff0c 汝之蜜糖 2020年的艰难开局 xff0c 在让众多行业陷入困顿之际 xff0c 却让游戏业迎来了一场流量的盛宴 除了日进斗金的王者 吃鸡 xff0c 还有火爆朋友圈的动森 xff0c 一款3A级VR游戏 Half L
  • 读懂海尔智家大脑:深度体验的本质是深度生活

    了解科技行业的读者 xff0c 应该都对 大脑 这个名词不陌生 黑灯工厂 里指挥生产的 工业大脑 xff0c 繁忙机场里运筹帷幄的 航空大脑 xff0c 还有智慧城市建设的灵魂 城市大脑 如果家也有一颗总揽全局的大脑 xff0c 生活会发生
  • FreeRTOS内核实现05:支持多优先级

    目录 1 支持多优先级的方法 1 1 任务优先级 1 2 基于优先级的就绪列表 1 3 实现基于优先级的调度 2 查找最高优先级就绪任务的方法 2 1 通用方法 2 2 体系结构优化方法 3 修改代码支持多优先级 3 1 创建任务相关 3

随机推荐

  • 无人机和激光雷达,会是一对好cp吗?

    占据一辆无人驾驶汽车成本40 的激光雷达 xff0c 以精准和无死角的空间探测能力 xff0c 成为是无人驾驶领域不可或缺的存在 但和汽车相比 xff0c 似乎激光雷达在无人机上更有用武之地 xff1a 成像精度要求不高 行动自由范围大 成
  • Html文件读取与爬取(个人笔记篇)

    Html文件读取与爬取 xff08 个人笔记篇 xff09 文章目录 Html文件读取与爬取 xff08 个人笔记篇 xff09 html文件读取解析html数据存储爬取到的数据完整代码展示 html文件读取 1 通过open xff1a
  • ubuntu 安装包报:下列软件包有未满足的依赖关系:

    root 64 ubuntu usr src linux 5 0 1 apt install zlib1g dev 正在读取软件包列表 完成 正在分析软件包的依赖关系树 正在读取状态信息 完成 有一些软件包无法被安装 如果您用的是 unst
  • SLAM学习笔记(三) 后端优化与回环检测

    后端优化是对相机位姿和点位置的再度优化 xff08 相较于前端优化规模更大 xff09 xff0c 回环检测是对地图进行的一种修正 xff08 当机器人回到原来位置时 xff0c 地图也实现一个闭环 xff09 后端优化与回环检测 后端优化
  • 基于STM32 HAL库的自定义USB HID设备通信

    最近有个项目需要用到STM32的高速通信 xff0c 准备调试一下STM32的USB功能 xff0c 但是发现F103C8T6只有全速USB xff0c 因此作为HID设备一帧只能发送64字节 xff0c 最小间隔是1ms xff0c 显然
  • PX4-Autopilot安装

    Ubuntu 18 04 43 ROS Melodic 1 PX4源码下载 1 先mkdir一个文件夹 xff0c 在该文件夹下进行源码下载 xff08 因为在github下载很慢 xff0c 所以后续到PX4 Autopilot目录下再单
  • MAVROS(1)offboard模式(手动和roslaunch启动)

    官方教程 xff1a https docs px4 io master en ros mavros offboard html 1 编写功能包 参考 xff1a https blog csdn net weixin 44917390 art
  • VINS-Fusion安装

    1 安装Ceres Solver 官方教程 xff1a http ceres solver org installation html 参考教程 xff1a https blog csdn net qq 27251141 article d
  • APM-MAVROS连接

    1 运行mavros roslaunch mavros apm launch fcu url 61 34 dev ttyUSB0 921600 34 2 读取topic之前先运行以下命令 xff0c 修改飞控广播频率 rosservice
  • PX4 Avoidance(3DVFH*)

    Github地址 xff1a https github com PX4 PX4 Avoidance readme PX4用户指南 xff1a computer vision obstacle avoidance PX4 Avoidance下
  • FreeRTOS源码分析与应用开发04:消息队列

    目录 1 队列结构 2 创建队列 2 1 动态创建队列 2 1 1 xQueueCreate函数 2 1 2 xQueueGenericCreate函数 2 1 3 xQueueGenericReset函数 2 2 静态创建队列 2 2 1
  • APM-SITL Gazebo MAVROS 仿真

    1 配置APM SITL环境 1 下载安装Ardupilot 参考链接 xff1a 官方教程 注意 xff1a 文件install prereqs ubuntu sh路径在 ardupilot Tools environment insta
  • Ego-planner-swarm安装及报错解决

    项目地址 xff1a https github com ZJU FAST Lab ego planner swarmhttps github com ZJU FAST Lab ego planner swarm https github c
  • 单片机和嵌入式系统的区别

    单片机和嵌入式系统的区别 嵌入式和单片机并不是一对相对的概念 xff0c 嵌入式系统包括硬件和软件部分 xff0c 而单片机是单片微型计算机 Single Chip Microcomputer 的简称 xff0c 即微控制单元 Microc
  • 程序员的5个级别,你属于哪一个等级?

    码农和程序员虽说是调侃 xff0c 但是实质上还真的是不一样 还别说 xff0c 程序员还是有分等级的 比如有技术专家 xff0c 初级专员等 程序员的级别不同 xff0c 薪水也是有着天壤之别 免费领取Python学习资料可以加小编的微信
  • FutureTask的使用示例

    今天看书 xff0c 有关于 FutureTask 的介绍 xff0c 感觉还蛮有意思的 xff0c 可以用它来做一些比较花时间的事情 下面打个通俗的比方来说明一下它的用处 xff1a 比如 xff0c 早上一大早的去公交站台等公交 xff
  • 用脚本创建快捷方式

    64 echo off set shortCutPath 61 C Documents and Settings administrator 桌面 set shortCutName 61 报表 set StartPath 61 起始位置 s
  • activemq配置wss协议

    wss是加密协议 xff0c 必须配置https证书 span class token operator lt span sslContext span class token operator gt span span class tok
  • MATLAB 初学者 课堂笔记

    1 预定义变量 xff1a pi i j inf xff1a 无穷大 eps a xff1a a 与大于 a 的最小的浮点数之间的距离 xff0c 距离越小表示精度越高 默认a 61 1 2 矩阵运算 xff1a 左除 C 61 A B 6
  • 备赛笔记:Opencv学习:颜色识别

    OpenCV颜色识别一般要以下步骤 xff1a 1 颜色空间转换 xff0c 将BGR转换为HSV xff0c 用色调区分颜色 2 按照阈值滤出所识别的颜色 3 消除噪点 xff0c 平滑边界 3 提取连续域 xff0c 提取要识别的颜色