Python OpenCV基于HSV的颜色分割实现示例

yizhihongxing

下面给您讲解一下“Python OpenCV基于HSV的颜色分割实现示例”的完整攻略。

简介

HSV是颜色空间的一种,由色调(Hue)、饱和度(Saturation)和明度(Value)构成。相对与RGB颜色空间,HSV颜色空间更加容易进行颜色分割。本实例使用Python OpenCV实现基于HSV颜色空间的颜色分割。

准备

安装Python和OpenCV、numpy库,可以使用pip install opencv-python numpy命令进行安装。

开始实现

1.读取图像

首先,读入一张图片。

import cv2

img = cv2.imread("example.jpg")

2.转换颜色空间

将BGR颜色空间转换为HSV颜色空间。

import cv2
import numpy as np

img = cv2.imread("example.jpg")
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

3.确定颜色分割的范围

选定要分割的颜色的范围。这里以分割红色为例,红色的HSV值为0-10和160-179。

import cv2
import numpy as np

img = cv2.imread("example.jpg")
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

# 分割红色
lower_red1 = np.array([0, 70,  50])
upper_red1 = np.array([10, 255, 255])
lower_red2 = np.array([160, 70, 50])
upper_red2 = np.array([179, 255, 255])
mask_red1 = cv2.inRange(hsv, lower_red1, upper_red1)
mask_red2 = cv2.inRange(hsv, lower_red2, upper_red2)
mask_red = cv2.bitwise_or(mask_red1, mask_red2)

4.应用颜色分割

使用颜色分割后的掩膜对原图像进行处理,即可得到分割后的图像。

import cv2
import numpy as np

img = cv2.imread("example.jpg")
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

# 分割红色
lower_red1 = np.array([0, 70,  50])
upper_red1 = np.array([10, 255, 255])
lower_red2 = np.array([160, 70, 50])
upper_red2 = np.array([179, 255, 255])
mask_red1 = cv2.inRange(hsv, lower_red1, upper_red1)
mask_red2 = cv2.inRange(hsv, lower_red2, upper_red2)
mask_red = cv2.bitwise_or(mask_red1, mask_red2)

# 应用颜色分割
res = cv2.bitwise_and(img, img, mask=mask_red)
cv2.imshow("result", res)
cv2.waitKey(0)
cv2.destroyAllWindows()

示例说明

示例1:分割绿色

如果要分割绿色,在确定颜色分割的范围时,可以设置如下的上下界。

# 分割绿色
lower_green = np.array([35, 43, 46])
upper_green = np.array([90, 255, 255])
mask_green = cv2.inRange(hsv, lower_green, upper_green)

示例2:分割蓝色

如果要分割蓝色,在确定颜色分割的范围时,可以设置如下的上下界。

# 分割蓝色
lower_blue = np.array([100, 50, 50])
upper_blue = np.array([124, 255, 255])
mask_blue = cv2.inRange(hsv, lower_blue, upper_blue)

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python OpenCV基于HSV的颜色分割实现示例 - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • 浅谈一下RabbitMQ、Kafka和RocketMQ消息中间件对比

    浅谈一下RabbitMQ、Kafka和RocketMQ消息中间件对比 消息中间件是现代分布式系统中的重要组件之一。在大规模分布式系统中,消息中间件提供了可扩展性、可靠性和可用性等关键特性,从而有助于构建可靠的,对分布式应用程序透明的基础设施。RabbitMQ、Kafka和RocketMQ是广泛应用的三个消息中间件,本文将重点探讨它们的特点和优劣。 Rabbi…

    人工智能概览 2023年5月25日
    00
  • Yii2框架中一些折磨人的坑

    下面我就来详细讲解Yii2框架中一些折磨人的坑和解决方案。 一、数据库操作中的坑 1.1 坑:使用Query对象时,忘记使用createCommand方法生成实际的SQL语句 在Yii2框架中,我们可以使用Query对象来构建和执行SQL语句。但是,在使用Query对象时,需要注意生成实际的SQL语句时需要使用createCommand方法。如果忘记了使用c…

    人工智能概论 2023年5月25日
    00
  • Python中if语句的使用方法及实例代码

    针对“Python中if语句的使用方法及实例代码”的完整攻略,我将按照以下几个方面进行讲解: if语句的概述:if语句是Python中最基本的流程控制语句,用于根据条件的真假执行不同的代码段。 if语句的语法:Python中if语句的语法格式如下: if 条件语句: 执行语句1 else: 执行语句2 其中,条件语句可以使用关系运算符、逻辑运算符或位运算符等…

    人工智能概论 2023年5月24日
    00
  • Python+selenium破解拼图验证码的脚本

    首先,需要说明的是破解验证码是一种非常不道德的行为,我们强烈反对任何形式的违法行为。下面我们通过演示示例的方式讲解Python+selenium破解拼图验证码的脚本。 安装Python及相关库 首先需要安装Python,推荐使用Anaconda进行安装。在安装完Python后,需要使用pip安装selenium库和ChromeDriver。 pip inst…

    人工智能概论 2023年5月25日
    00
  • 分布式医疗挂号系统整合Gateway网关解决跨域问题

    分布式医疗挂号系统整合Gateway网关解决跨域问题教程 一、背景 随着互联网技术的快速发展,越来越多的医院开始接受互联网挂号服务,但是同时也出现了医院之间的系统隔离和跨域问题。针对这个问题,我们可以采用分布式系统架构+Gateway网关的方式进行解决,下面详细讲解。 二、分布式系统架构介绍 分布式系统架构是指采用不同计算机之间的互联网连接以及信息共享、相互…

    人工智能概览 2023年5月25日
    00
  • Django模板继承与模板的导入实例详解

    下面是“Django模板继承与模板的导入实例详解”的攻略: 什么是Django模板继承? Django模板继承是一种将多个HTML模板组合起来使用的方式,可以大大减少代码的重复,提高代码的重用率。模板继承的原理类似于面向对象的继承,在继承中,父模板是被继承而来的模板,子模板通过继承父模板来实现代码的重用。 在Django中,模板继承非常容易实现,只需要在子模…

    人工智能概论 2023年5月25日
    00
  • PHPExcel导出2003和2007的excel文档功能示例

    为了实现PHPExcel导出2003和2007的excel文档功能,我们需要进行以下步骤: 步骤一:安装PHPExcel 可以通过Composer安装PHPExcel,或者直接下载PHPExcel的源代码压缩包解压到项目的目录下。以下是通过Composer安装的步骤: 在项目根目录下执行以下命令: composer require phpoffice/php…

    人工智能概论 2023年5月25日
    00
  • django settings.py 配置文件及介绍

    介绍 在 Django 项目中,settings.py 文件是非常重要的配置文件,它包含了项目中的所有配置选项。其中包括数据库配置、邮件配置、静态文件路径、调试设置、国际化选项等。 settings.py 文件位于 Django 项目根目录下(与 manage.py 文件同级),使用 Python 语言编写,必须定义一个名为 settings 的变量作为模块…

    人工智能概览 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部