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. 这种方法可以应用在以下场景:

    • 交通标志识别。

    • 物体检测与跟踪。

    • 色彩分类任务。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot【八】mybatis-plus条件构造器使用手册!

一、前言🔥 环境说明:Windows10 Idea2021.3.2 Jdk1.8 SpringBoot 2.3.1.RELEASE 经过上一期的mybatis-plus 入门教学,想必大家对它不是非常陌生了吧,这期呢,我主要是围绕以下几点展开,重点给大家介绍 里…

【java常用集合】java

第1关:初识Collection 第2关:集合遍历方法 第3关:Set接口 第4关:Map接口 第5关:泛型 第6关:知识回顾

论文概览 |《Sustainable Cities and Society》2024.12 Vol.116

本次给大家整理的是《Sustainable Cities and Society》杂志2024年12月第116期的论文的题目和摘要,一共包括52篇SCI论文! 论文1 Enhancing road traffic flow in sustainable cities through transformer models: Advancements and challenges 通过变压…

AI开发 - 用GPT写一个GPT应用的真实案例

就在昨天,我的同事推荐给我了一个第三方的公共大模型API,这个API集合了国际上上几乎所有知名的大模型,只需要很少的费用,就可以接入到这些大模型中并使用它们。成本之低,令人乍舌!包括我们现在无法试用的 G…

怎样使用Eclipse创建Maven的Java WEB 项目

文章目录 1、第一种方式(选择 archetype 方式) 1.1、第一步:创建项目1.2、第二步:配置jre1.3、第三步:配置tomcat1.4、第四步:设置为WEB3.11.5、第五步:配置Maven的编译级别 1.5.1、第一种方法…

【密码学】ZUC祖冲之算法

一、ZUC算法简介 ZUC算法(祖冲之算法)是中国自主研发的一种流密码算法,2011年被3GPP批准成为4G国际标准,主要用于无线通信的加密和完整性保护。ZUC算法在逻辑上采用三层结构设计,包括线性反馈移位寄存器(L…

Kaggler日志--Day5

进度24/12/15 昨日复盘 Intermediate Mechine Learning之类型变量 读两篇讲解如何提问的文章,在提问区里发起一次提问 实战:自己从头到尾首先Housing Prices Competition for Kaggle Learn Users并成功提交 Intermediate Mechine Learning之管道&#…

每天五分钟深度学习pytorch:基于AlexNet模型完成手写字体识别

本文重点 前面我们学习了LeNet的搭建,本文我们学习AlexNet网络模型的搭建,然后使用它跑一遍手写字体识别的项目 AlexNet 在2012年ImageNet竞赛中以超过第二名10.9个百分点的绝对优势一举夺冠,从此深度学习重新火热起来,我们来看一下它的网络结构,它比LeNet更深,同时第…

【学习笔记】桌面浏览器的视口

概念:设备像素和CSS像素 设备像素:设备物理屏幕的像素分辨率,使用screen.width/height获取 这里有四个像素100%缩放,CSS像素完全覆盖设备像素 缩小后,CSS像素开始缩小,意味着一个设备像素覆盖多个CSS像素…

分享两个爬虫练习网站+一个python游戏网站

目录 第一个网站第二个Python游戏网站 第一个网站 网站一 第二个 网站二 Python游戏网站 网站三

基于小程序实现地图定位、轨迹绘制、地图标点、快捷导航、唤醒导航APP、开箱即用

目录 前言研究背景与意义研究目标与内容研究方法与技术路线小程序地图组件介绍定位技术与原理轨迹绘制技术地图标注与标记功能地图定位与轨迹绘制功能实现定位功能设计与实现获取用户当前位置总结说明代码块前言 研究背景与意义 地图定位和轨迹追踪作为智能手机中常见的功能之…

微信小程序中 Echarts 的巧妙运用

一、引入 Echarts 的准备工作 在微信小程序中引入 Echarts 需要进行一系列的准备工作。首先,我们可以从 echarts 官网或 GitHub 上下载 echarts-for-weixin 项目。找到其中的 ec-canvas 文件夹,这个文件夹将是我们引入到微信小程序项目中的关键部分。 …

论文阅读笔记:OminiControl: Minimal and Universal Control for Diffusion Transformer

论文阅读笔记:OminiControl: Minimal and Universal Control for Diffusion Transformer 1 背景1.1 问题1.2 提出的方法 2 创新点3 方法4 模块4.1 预备知识4.2 OminiControl4.2.1 利用已有的结构4.2.2 统一序列处理4.2.3 位置感知token交互4.2.4 可控调节强度 4.3 S…

时序论文30|NIPS24一篇对时间戳深入研究的文章

论文标题:Frequency Adaptive Normalization For Non-stationary Time Series Forecasting 论文链接:https://arxiv.org/pdf/2409.18696 代码链接:https://github.com/ForestsKing/GLAFF 前言 这篇论文提出了一个新框架GLAFF,…

图像处理 - 车道线检测:智能驾驶的“眼睛”

引言 在智能驾驶技术飞速发展的今天,车道线检测作为一项基础而关键的技术,扮演着车辆“眼睛”的角色。它不仅关系到车辆的导航和定位,还直接影响到自动驾驶系统的安全性和可靠性。本文将带你深入了解车道线检测技术的原理、方法以及在实际应用…

加速科技精彩亮相ICCAD 2024

12月11日—12日 ,中国集成电路设计业的年度盛会——ICCAD 2024在上海世博馆隆重举行。本次活动以“智慧上海,芯动世界”为主旨,汇聚了众多业界精英,共同探讨集成电路产业的未来。作为半导体测试行业领军企业,加速科技携…

java+springboot+mysql法律咨询网

项目介绍: 使用javaspringbootmysql开发的法律咨询网(文书),系统包含管理员、用户角色,功能如下: 管理员:登录系统;用户管理;文章管理(法律知识&#xff09…

安卓BLE蓝牙开发经验分享

注意点一:一开始必须申请权限,否则后面根本无法成功。 注意点二:BLE使用向某个特征写入来发送数据,写入一次默认长度是23字节,必须向蓝牙设备申请更大字节的写入才能发送更多字节。(23字节是BLE通信的最小…

Linux shell的七大功能 ---自动补齐、管道机制、别名

1、自动补齐---TAB 输入命令的前几个字符,按下tab键,会自动补齐完整的字符,若有多个命令、文件或目录的前几个字符相同,按下tab将会全部列举出来 2、管道机制---| 例如:ls -- help |more 将有关ls的帮助内容传递给“|…

实现SpringBoot项目嵌入其他项目

很多时候我们需要在项目里面嵌入其他项目或者被其他项目嵌入,如我们开发一个开源项目b,用户需要在自己的项目a嵌入b项目,使用b项目的功能,而且要实现a项目工作最小化,最好实现引入即用。 1.定义b项目的自定义配置 …