OpenCV实验篇:识别图片颜色并绘制轮廓

第三篇:识别图片颜色并绘制轮廓

1. 实验原理

颜色识别的原理:

  • 颜色在图像处理中通常使用 HSV 空间来表示。

    • HSV 空间是基于人类视觉系统的一种颜色模型,其中:

      • H(Hue):色调,表示颜色的种类,例如红色、绿色。

      • S(Saturation):饱和度,表示颜色的纯度。

      • V(Value):明度,表示颜色的亮度。

    • 使用 HSV 空间分割颜色比直接使用 RGB 空间更加直观且效果更好。

轮廓绘制的原理:

  • 轮廓是指图像中具有相同颜色或灰度值的边界。

  • 在 OpenCV 中,通过以下步骤实现轮廓绘制:

    1. 转换图像到 HSV 空间,设定颜色阈值,分割出感兴趣区域。

    2. 使用 cv2.findContours 查找轮廓。

    3. 使用 cv2.drawContours 将轮廓绘制在原图或复制图像上。

2. 实验代码

以下是基于 OpenCV 的完整代码:

import cv2
import numpy as np# --------------------1. 读取图像--------------------
# 加载目标图片
image = cv2.imread("./color_1.png")
# 调整图片大小,方便显示和处理
image = cv2.resize(image, (0, 0), fx=0.5, fy=0.5)# --------------------2. 转换到 HSV 空间--------------------
# 将图像从 BGR 空间转换到 HSV 空间
image_hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)# --------------------3. 定义颜色阈值范围--------------------
# 定义要识别的颜色范围(以蓝色为例)
# 这里的值需要根据实际颜色进行调整
lower_blue = np.array([100, 150, 50])  # HSV 下界
upper_blue = np.array([140, 255, 255])  # HSV 上界# 使用 inRange 函数分割颜色区域
mask = cv2.inRange(image_hsv, lower_blue, upper_blue)# --------------------4. 图像处理--------------------
# 使用形态学操作去除噪点(可选)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
mask_cleaned = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)# --------------------5. 查找轮廓--------------------
# 在掩码图像中查找轮廓
contours, hierarchy = cv2.findContours(mask_cleaned, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)# --------------------6. 绘制轮廓--------------------
# 创建一个原始图像的副本,用于绘制轮廓
image_contours = image.copy()
# 在副本上绘制轮廓
cv2.drawContours(image_contours, contours, -1, (0, 255, 0), 3)# --------------------7. 显示结果--------------------
# 显示原始图像
cv2.imshow("Original Image", image)
# 显示掩码图像
cv2.imshow("Mask", mask_cleaned)
# 显示绘制了轮廓的图像
cv2.imshow("Contours", image_contours)# 等待按键退出
cv2.waitKey(0)
cv2.destroyAllWindows()
3. 实验现象

实验效果:

  1. 原始图像窗口:显示原始图像。

  2. 掩码窗口:显示分割后的蓝色区域(白色部分为识别的颜色)。

  3. 轮廓绘制窗口:显示绘制了颜色轮廓的图像。

实验总结:

  1. 使用 HSV 空间可以高效地分割颜色区域。

  2. cv2.findContourscv2.drawContours 可以精确提取和标记物体的边界。

  3. 这种方法可以应用在以下场景:

    • 交通标志识别。

    • 物体检测与跟踪。

    • 色彩分类任务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/491064.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySql5.7安装、配置最新版

网上有很多的安装教程,但是有很多同学找不到历史安装包,而且官网变动比较大,我就直接给安装包了,下载 这个是安装包msi下载,可以参考下面的 MySQL详细安装教程,关于msi版和zip版详解,Windows …

ISP算法之坏点校正DPC(二):Verilog硬件实现与仿真

DPC的算法讲解和MATLAB仿真参考上一节: ISP算法之坏点校正DPC(一):MATLAB仿真验证-CSDN博客 本节讲解Verilog的硬件实现与仿真 行缓存设计 DPC算法是基于窗口邻域的像素级别算法,因此需要对实时到来的视频流进行行缓存,行缓存…

UE5制作倒计时功能

设置画布和文本 文本绑定 格式化时间 转到事件图表,计算时间,时间结束后面的事件可以按自己需求写 进入关卡蓝图,添加倒计时UI

在Spring Boot中的实现国际化(i18n)

1.什么是国际化(i18n)? 国际化(Internationalization,简称i18n)是指在软件应用中支持多种语言和文化的能力。通过国际化,应用可以根据用户的语言和地区设置,动态地显示不同的文本内…

大模型的构建与部署(3)——数据标注

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl1. 数据标注的重要性 1.1 增强数据可解释性 数据标注通过为原始数据添加标签或注释,显著增强了数据的可解释性。在机器学习和深度学习领域,模型的训练依赖于大量带标签的数据。这些标签不仅帮助…

【考前预习】4.计算机网络—网络层

往期推荐 【考前预习】3.计算机网络—数据链路层-CSDN博客 【考前预习】2.计算机网络—物理层-CSDN博客 【考前预习】1.计算机网络概述-CSDN博客 目录 1.网络层概述 2.网络层提供的两种服务 3.分类编址的IPV4 4.无分类编址的IPV4—CIDR 5.IPV4地址应用规划 5.1使用定长子…

需求管理(尊享版)

需求管理 由于需求是正在构建的系统必须符合的事务,而且符合某些需求决定了项目的成功或失败,因此找出需求是什么,将它们记下来,进行组织,并在发生变化时对它们进行追踪,这些活动都是有意义的。 需求管理…

前后端跨域问题(CROS)

前端 在src中创建util文件,写request.js文件: request.js代码如下: import axios from axios import { ElMessage } from element-plus;const request axios.create({// baseURL: /api, // 注意!! 这里是全局统一加…

【python从入门到精通】-- 第六战:列表和元组

🌈 个人主页:白子寰 🔥 分类专栏:重生之我在学Linux,C打怪之路,python从入门到精通,数据结构,C语言,C语言题集👈 希望得到您的订阅和支持~ 💡 坚持…

操作系统课后习题2.2节

操作系统课后习题2.2节 第1题 CPU的效率指的是CPU的执行速度,这个是由CPU的设计和它的硬件来决定的,具体的调度算法是不能提高CPU的效率的; 第3题 互斥性: 指的是进程之间的同步互斥关系,进程是一个动态的过程&#…

openlane

openlane数据集,lane3d_1000里训练集157807张图片,测试集39981张图,md太多了

在pycharm2024.3.1中配置anaconda3-2024-06环境

version: anaconda3-2024.06-1 pycharm-community-2024.3.1 1、安装anaconda和pycharm 最新版最详细Anaconda新手安装配置环境创建教程_anaconda配置-CSDN博客 【2024最新版】超详细Pycharm安装保姆级教程,Pycharm环境配置和使用指南,看完这一篇就够了…

深度解读:Top14金融顶刊

作者Toby:来源:Python风控模型,Top14金融顶刊 各位同学好,我是Toby老师,今天为大家介绍金融风控领域的顶级学术期刊,用于小论文发布平台参考。 金融风控领域内有许多顶级学术期刊,它们发表高质…

系列2:基于Centos-8.6Kubernetes 集成GPU资源信息

每日禅语 自省,就是自我反省、自我检查,自知己短,从而弥补短处、纠正过失。佛陀强调自觉觉他,强调以达到觉行圆满为修行的最高境界。要改正错误,除了虚心接受他人意见之外,还要不忘时时观照己身。自省自悟之…

EnumMap:让Java Map更高效的技巧

前言 摘要 内容 什么是EnumMap 如何使用EnumMap EnumMap的实现原理 EnumMap的例子 测试用例 小结 前言 在Java中,枚举类型是一种非常有用的数据类型,它可以用于定义一组固定的常量。枚举类型在很多场景中都有广泛的应用,例如状态码、…

计算机游戏运行时常见问题解析:d3dx9_43.dll丢失的真相与修复指南

游戏运行时d3dx9_43.dll缺失问题全解析 在计算机游戏的探险之旅中,d3dx9_43.dll文件缺失常成为玩家的绊脚石。此DLL文件是DirectX 9的关键组件,对图形渲染至关重要。以下,我们将深入剖析其丢失原因,并提供精简有效的修复策略。 …

电子科技大学《2024年839自动控制原理真题》 (完整版)

本文内容,全部选自自动化考研联盟的:《电子科技大学839自控考研资料》的真题篇。后续会持续更新更多学校,更多年份的真题,记得关注哦~ 目录 2024年真题 Part1:2024年完整版真题 2024年真题

BUUCTF Pwn [HarekazeCTF2019]baby_rop2 题解

下载 得到两个文件 checksec 64位 拖入IDA64 查看main函数 看到给了个libc说明这题是ret2libc题 这里的打印函数是printf 所以利用printf函数的plt输出真实地址got 但printf的got好像不行 所以换成了read的got 因为这是64位程序 所以用寄存器传参;又因为printf得…

Starfish 因子开发管理平台快速上手:如何完成策略编写与回测

DolphinDB 开发的因子开发管理平台 Starfish 围绕量化投研的因子、策略开发阶段设计,为用户提供了一个从数据管理、因子研究到策略回测的完整解决方案。 因子平台的回测引擎提供了多个关键的事件函数,涵盖策略初始化、每日盘前和盘后回调、逐笔、快照和…

ASP.NET|日常开发中读写TXT文本详解

ASP.NET|日常开发中读写TXT文本详解 前言一、读取 TXT 文本1.1 使用StreamReader类 二、写入 TXT 文本2.1 使用StreamWriter类 三、文件编码问题3.1 常见编码格式 四、错误处理和性能考虑4.1 错误处理4.2 性能考虑 结束语优质源码分享 ASP.NET|日常开发中…