0

0

使用OpenCV和HSV颜色空间精确检测图像中的黄色物体

DDD

DDD

发布时间:2025-12-02 11:44:17

|

464人浏览过

|

来源于php中文网

原创

使用OpenCV和HSV颜色空间精确检测图像中的黄色物体

本教程详细介绍了如何利用python和opencv库,通过转换到hsv颜色空间来精确检测图像中的黄色物体。与bgr颜色空间相比,hsv因其对色调、饱和度和亮度的分离,在颜色识别方面表现更优。文章将提供从图像加载、颜色空间转换、阈值分割到轮廓检测的完整步骤和代码示例,帮助读者高效实现特定颜色物体的识别。

图像中特定颜色物体检测的挑战与HSV的优势

计算机视觉领域,识别图像中的特定颜色物体是常见的任务。然而,直接在BGR(蓝绿红)颜色空间中进行颜色检测往往面临挑战。BGR颜色模型将颜色表示为蓝、绿、红三原色的组合,这使得颜色的表示与光照强度紧密耦合。例如,一个深黄色的物体可能在BGR值上与一个浅棕色的物体相似,或者在不同光照下,同一种黄色物体在BGR通道上的值会发生显著变化,导致难以设定一个稳定且鲁棒的阈值范围。

为了克服这些限制,通常建议使用HSV(色相、饱和度、亮度)颜色空间进行颜色检测。HSV模型更符合人类对颜色的感知方式,其三个分量分别代表:

  • H (Hue - 色相):表示颜色的种类,如红色、黄色、绿色等,通常以角度表示(0-360度)。在OpenCV中,H通道被缩放到0-179。
  • S (Saturation - 饱和度):表示颜色的纯度或鲜艳程度,从0(灰色)到100%(纯色)。在OpenCV中,S通道范围是0-255。
  • V (Value - 亮度):表示颜色的明暗程度,从0(黑色)到100%(白色)。在OpenCV中,V通道范围是0-255。

在HSV空间中,色相(Hue)通道将颜色种类独立出来,使其受光照强度变化的影响远小于BGR。这意味着我们可以更容易地定义一个稳定的色相范围来识别特定颜色,例如黄色。

使用OpenCV和HSV检测黄色物体

以下是使用Python和OpenCV库,通过HSV颜色空间检测图像中黄色物体的详细步骤。

1. 导入必要的库

首先,我们需要导入cv2(OpenCV库)和numpy(用于处理数组)。

import cv2
import numpy as np

2. 加载图像

使用cv2.imread()函数加载目标图像。请确保图像文件与脚本位于同一目录下,或提供完整的路径。

# 替换为你的图像文件路径
image_path = 'screenshot.png'
image = cv2.imread(image_path)

# 检查图像是否成功加载
if image is None:
    print(f"错误:无法加载图像 '{image_path}'。请检查文件路径或文件名。")
    exit()

3. 将图像从BGR转换为HSV

OpenCV默认读取的图像是BGR格式。为了利用HSV的优势,我们需要将其转换为HSV颜色空间。

剪映专业版
剪映专业版

一款全能易用的桌面端剪辑软件

下载
hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

4. 定义黄色的HSV范围

这是检测特定颜色的关键一步。我们需要为黄色定义一个合适的下限和上限HSV值。在OpenCV中,H的范围是0-179(而不是0-360),S和V的范围是0-255。

对于黄色,一个常用的HSV范围是:

  • Hue (H): 20-30 (对应于色轮上的黄色区域)
  • Saturation (S): 100-255 (确保颜色足够鲜艳,避免检测到灰色或白色)
  • Value (V): 100-255 (确保颜色具有一定的亮度,避免检测到黑色或过暗的区域)

请注意,这些值可能需要根据图像的具体情况(如光照、黄色深浅、相机白平衡)进行微调。

# 定义黄色的HSV范围
lower_yellow = np.array([20, 100, 100])
upper_yellow = np.array([30, 255, 255])

5. 创建颜色掩码

使用cv2.inRange()函数根据定义的HSV范围创建一个二值掩码(mask)。掩码中,属于黄色范围的像素点为白色(255),其余为黑色(0)。

# 根据HSV范围创建掩码
mask = cv2.inRange(hsv_image, lower_yellow, upper_yellow)

6. 应用掩码提取黄色区域

通过cv2.bitwise_and()函数将原始图像与掩码进行按位与操作,从而只保留图像中的黄色区域,背景变为黑色。这有助于直观地看到被检测到的黄色部分。

# 将掩码应用到原始图像,提取黄色物体,背景为黑色
result = cv2.bitwise_and(image, image, mask=mask)

7. 查找并绘制轮廓

为了识别独立的黄色物体,我们可以对掩码图像进行轮廓检测。轮廓是连接所有连续点(沿颜色或强度边界)的曲线,是物体形状识别的基础。

# 查找掩码中的轮廓
# cv2.RETR_EXTERNAL 只检测外层轮廓
# cv2.CHAIN_APPROX_SIMPLE 压缩水平、垂直和对角线段,只保留它们的端点
contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# 复制原始图像用于绘制轮廓,避免修改原图
output_image = image.copy()
detected_objects_count = 0

if len(contours) > 0:
    # 遍历并绘制所有检测到的轮廓,同时可以根据面积进行筛选
    for contour in contours:
        area = cv2.contourArea(contour)
        if area > 50:  # 设定一个最小面积阈值,排除小的噪声点,可根据实际情况调整
            cv2.drawContours(output_image, [contour], -1, (0, 255, 0), 2) # 绿色轮廓,粗细为2
            detected_objects_count += 1

    if detected_objects_count > 0:
        print(f"检测到 {detected_objects_count} 个有效的黄色物体轮廓。")
    else:
        print("未检测到面积足够大的黄色物体。")
else:
    print("未检测到任何黄色物体

相关专题

更多
python开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

759

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

639

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

761

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

618

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1265

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

548

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

579

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

709

2023.08.11

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

65

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 4万人学习

Django 教程
Django 教程

共28课时 | 3.2万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号