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

下面给您讲解一下“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日

相关文章

  • 详解commons-pool2池化技术

    详解commons-pool2池化技术 什么是commons-pool2? commons-pool2是一个用于池化技术的开源Java库。池化技术是一种资源复用的技术,可以帮助我们策略性地使用资源,以提高性能和降低资源消耗。在Java开发中,资源包括数据库连接、网络连接、线程等。使用池化技术的好处在于可以减少连接的创建和释放,根据需要重用资源对象,从而提高整…

    人工智能概论 2023年5月25日
    00
  • windows下Nginx多域名简单配置教程

    标题:Windows下Nginx多域名简单配置教程 在Windows系统上安装和配置Nginx服务可以让我们在本地或局域网内搭建轻巧高效的Web服务器,并且可以支持多个域名的访问。下面是详细的步骤说明: 1. 安装Nginx 我们可以从Nginx的官方网站(https://nginx.org/en/download.html)下载到适合我们系统的Nginx版…

    人工智能概览 2023年5月25日
    00
  • Deployment副本无状态服务创建及水平扩展

    下面我将详细讲解“Deployment副本无状态服务创建及水平扩展”的完整攻略。 1. 创建Deployment对象 首先,我们需要在Kubernetes集群中创建一个Deployment对象,Deployment对象是Kubernetes中的一种资源类型,它可以用来管理应用程序的部署、升级和回滚。 创建Deployment对象,可以使用kubectl命令行…

    人工智能概览 2023年5月25日
    00
  • SpringBoot之使用Redis实现分布式锁(秒杀系统)

    让我来详细讲解一下“SpringBoot之使用Redis实现分布式锁(秒杀系统)”的完整攻略。 什么是分布式锁? 在分布式系统中,多个服务对同一数据进行操作时,存在并发冲突的风险。为了解决这个问题,常见的做法是使用分布式锁。分布式锁可以将某个资源标记为“被占用”的状态,防止多个服务同时对其进行操作。 Redis如何实现分布式锁? Redis提供了一种叫做SE…

    人工智能概览 2023年5月25日
    00
  • C#将DataTable转化为List

    将DataTable转化为List的过程包含以下几个步骤: 创建实体类,以存储转换后的数据。 在转换DataTable之前,你需要创建一个实体类来存储转换后的数据。这个实体类的每个属性应该与DataTable的每一列对应。例如,如果你的DataTable有3列(ID,Name和Age),那么你需要创建一个类,这个类应该包含3个属性:ID、Name和Age。 …

    人工智能概览 2023年5月25日
    00
  • 编写自定义的Django模板加载器的简单示例

    编写自定义的Django模板加载器可以让我们更加灵活地管理和渲染模板,本文将介绍如何编写自定义的Django模板加载器的完整攻略。 步骤一:创建自定义加载器 首先,我们需要创建一个自定义的Django模板加载器。通常情况下,我们可以通过继承django.template.loader.BaseLoader类来实现。 from django.template …

    人工智能概论 2023年5月24日
    00
  • 深入理解nginx如何实现高性能和可扩展性

    深入理解nginx如何实现高性能和可扩展性 Nginx 是一个高性能、高可靠性的 Web 服务器和反向代理服务器。在处理高并发网络请求时,它可以同时保持较高的稳定性和扩展性。以下是 Nginx 实现高性能和可扩展性的攻略: 1.事件驱动模型 Nginx 使用了事件驱动的模型,在单个进程中处理多个并发连接,从而避免了每个连接都创建一个新进程或线程的模型。这种模…

    人工智能概览 2023年5月25日
    00
  • linux系统安装Nginx Lua环境

    下面是详细讲解“linux系统安装Nginx Lua环境”的完整攻略: 1. 安装Nginx 1.1 安装依赖库 在安装Nginx之前,需要先安装一些必要的依赖库,包括以下内容: $ sudo apt-get update $ sudo apt-get install curl gnupg2 ca-certificates lsb-release 1.2 添…

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