python-opencv颜色提取分割方法

yizhihongxing

Python-OpenCV颜色提取分割方法

简介

在进行图像处理时,颜色提取和分割是很常用的技术。本文将介绍如何使用Python以及OpenCV库进行颜色提取和分割。

基础知识

OpenCV

OpenCV是一个开源计算机视觉库,包括各种图像处理和计算机视觉的函数。在Python中,OpenCV库能够与Numpy库整合,并可实现使图像变得更加易于处理的数据格式和工具。

RGB颜色空间

RGB颜色空间使用红(R)、绿(G)、蓝(B)三种颜色分量来描述一种颜色。在RGB颜色空间中,每个颜色分量的取值范围为0-255。例如,灰色可用(128,128,128)或(0.5×255,0.5×255,0.5×255)来表示。

HSV颜色空间

HSV颜色空间使用色相(Hue)、饱和度(Saturation)、明度(Value)三个值来描述一种颜色。HSV颜色空间对于颜色提取很有用,因为它将颜色的亮度和彩度分离开来,且更加符合人眼的感知方式。在HSV颜色空间中,H的取值范围为0-180,S和V的取值范围均为0-255。

颜色提取

本文使用的图像是网上随机下载的一张彩色图片:

为了更好地提取图片中的红色部分,我们将颜色空间转换为HSV。在HSV颜色空间中,红色的H值大约为0或150,而S和V的值通常都比较高。我们可以使用inRange函数来筛选出H、S、V在一定范围内的像素:

import cv2

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

# 定义HSV值的范围
lower_red = np.array([0, 100, 100])
upper_red = np.array([10, 255, 255])
mask1 = cv2.inRange(hsv, lower_red, upper_red)

lower_red = np.array([160, 100, 100])
upper_red = np.array([180, 255, 255])
mask2 = cv2.inRange(hsv, lower_red, upper_red)

# 将两个mask合并
mask = mask1 + mask2

# 将mask带入图像中查看效果
res = cv2.bitwise_and(image, image, mask=mask)

cv2.imshow("res",res)
cv2.waitKey(0)
cv2.destroyAllWindows()

上述代码中,我们首先导入了OpenCV库,读取了一张图片并将其从BGR颜色空间转换为HSV颜色空间。接着,我们定义了两个数组,lower_red和upper_red,用于指定红色的取值范围。我们使用了inRange函数来获取H、S、V在特定范围内的像素,生成了两个不同阈值的掩膜(mask1和mask2)。最后,我们将两个掩膜合并成一个(mask = mask1 + mask2),使用bitwise_and函数将掩膜应用于原始图像。最终,我们可以得到包含红色部分的结果图像。

颜色分割

在颜色分割中,我们将对象从图像的背景中分离出来。在接下来的示例中,我们将使用一张包含红色和绿色球的图片,将两个球从背景中分离出来。

import cv2
import numpy as np

# 读取图片
image = cv2.imread("balls.jpg")

# 颜色空间转换BGR->HSV
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

# 确定颜色的阈值范围
lower_red = np.array([0, 50, 50])
upper_red = np.array([10, 255, 255])
mask_red = cv2.inRange(hsv, lower_red, upper_red)

# 确定绿色的阈值范围
lower_green = np.array([50, 50, 50])
upper_green = np.array([100, 255, 255])
mask_green = cv2.inRange(hsv, lower_green, upper_green)

# 将两个mask合并
mask = mask_red + mask_green

# 对图像应用掩膜
res = cv2.bitwise_and(image,image,mask=mask)

# 显示结果
cv2.imshow('res',res)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这个示例中,我们首先导入了OpenCV和Numpy库,并读取了一张包含两个球的图片。然后,我们通过转换为HSV颜色空间并使用inRange函数定义两个颜色的阈值范围,来获取两个掩膜(mask_red和mask_green)。最终,我们将两个掩膜合并成一个(mask = mask_red + mask_green)并将其应用于原始图像,获得包含红色和绿色球的结果图像。

总结

本文介绍了如何使用Python和OpenCV库进行颜色提取和分割。在进行颜色提取时,我们可以利用opencv库的inRange函数来获取像素的范围,拼凑成掩膜,从而提取指定颜色的像素。在分割时,可以类似地使用两个掩膜来从复杂的背景中分离出指定颜色的物体。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python-opencv颜色提取分割方法 - Python技术站

(1)
上一篇 2023年6月2日
下一篇 2023年6月2日

相关文章

  • Django Paginator分页器的使用示例

    当我们的网站数据量较大时,将其全部显示在一张页面上会导致页面加载速度变慢,用户体验也会大打折扣。在这种情况下,通常会采用分页器(Paginator)这一工具来将数据分页展示,提高页面加载速度和用户体验。 以下是 Django Paginator 分页器的使用示例的完整攻略: 1. 安装 Paginator Django 自带了 Paginator 工具,不需…

    python 2023年6月3日
    00
  • Python 用compress()过滤

    当我们需要压缩或者过滤掉列表中符合某个条件的元素时,我们可以使用Python内置函数compress()。 compress()函数 compress()函数接受两个参数:第一个参数是一个可迭代的对象;第二个参数是一个可迭代的布尔值序列。compress()会返回一个由可迭代对象中对应布尔值为True的元素所组成的迭代器。 语法如下: compress(da…

    python-answer 2023年3月25日
    00
  • Python内置函数及功能简介汇总

    查看Python内置函数及功能简介汇总可以帮助程序员更深入地了解Python的基础知识,并快速掌握常用的内置函数和方法。以下是具体的攻略: 1. 什么是Python内置函数 Python内置函数是Python解释器预定义的一组函数名称,用于不需要导入模块的情况下使用。这些内置函数有很多种用途,例如字符串、数字、列表等常见数据类型的操作和控制流程的语句等等。 …

    python 2023年5月13日
    00
  • 解决python 找不到module的问题

    关于“解决Python找不到Module的问题”的完整攻略,可以从以下几个方面来说明: 1. 确认Module是否已安装 在Python中使用Module,首先需要在本地电脑上安装该Module。可以通过pip命令来进行安装,比如: pip install module_name 当然,也可以通过在GitHub等代码托管平台上找到对应Module的代码库,下…

    python 2023年6月3日
    00
  • Python 实现键盘鼠标按键模拟

    针对Python实现键盘鼠标按键模拟的攻略,我可以给出以下完整的流程,包含两条示例说明: 1. 安装 PyAutoGUI PyAutoGUI 是 Python 实现自动化 GUI 操作的模块,它提供了诸多非常方便的功能,其中就包含了模拟键盘和鼠标操作的功能。因此,我们需要先安装 PyAutoGUI 模块。 安装方式: pip install pyautogu…

    python 2023年6月5日
    00
  • python数据结构之图的实现方法

    以下是关于“Python数据结构之图的实现方法”的完整攻略: 简介 图是一种常用的数据结构,用于表示对象之间的关系。在本教程中,我们将介绍如何使用Python实现图,包括邻接矩阵和邻接表两种实现方法。 邻接矩阵 邻接矩阵是一种常用的图的实现方法,它使用二维数组表示图中的节点和边。在邻接矩阵中,每个节点都对应数组中的一行和一列,如果两个节点之间有边相连,则在对…

    python 2023年5月14日
    00
  • Python+Pillow+Pytesseract实现验证码识别

    很高兴为你介绍如何使用Python+Pillow+Pytesseract实现验证码识别的完整攻略。 1. 确认安装Pillow和Pytesseract 在开始使用Python+Pillow+Pytesseract实现验证码识别之前,需确认已安装Pillow和Pytesseract库。如果你还没有安装,则可以使用以下命令安装: pip install Pill…

    python 2023年5月18日
    00
  • Python3中小括号()、中括号[]、花括号{}的区别详解

    下面是“Python3中小括号()、中括号[]、花括号{}的区别详解”的攻略: 小括号() 小括号在Python中通常用于表明函数的调用。在函数调用时,所有传递给函数的实参都应该用小括号括起来。比如: print(‘Hello World’) 在这个例子中,print()是Python的一个内置函数,它用来在标准输出中打印一些内容。’Hello World’…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部