Python图像处理之使用OpenCV检测对象颜色
前言
检测图像中对象颜色的一种简单方法是首先将图像从 RGB 转换为 HSV 颜色空间,然后使用一系列色调检测对象,这可以通过使用 OpenCV 库轻松完成。为了完成对象检测任务,我们需要使用感兴趣对象的颜色值范围,使用颜色值范围识别和提取的图像中目标对象。之后,我们可以更改检测到的对象的颜色,甚至可以直接删除检测到的对象。
使用 OpenCV 检测对象颜色
在本节中,我们将使用的输入图像是位于网球场的女孩,而感兴趣的对象是女孩的头发。我们首先将 RGB 图像转换到 HSV 色彩空间,从而检测黑色色值区域。
(1) 首先加载所需的库,并读取输入图像:
import cv2
import numpy as np
import matplotlib.pylab as plt
img = cv2.imread("1.png")
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
(2) 通过选择黑色头发可能拥有的 HSV 颜色范围来为头发创建掩码,然后从输入图像中提取黑色头发:
mask = cv2.inRange(hsv, (0, 70, 80), (15, 255, 255)) imask = mask>0 hair = np.zeros_like(img) hair[imask] = img[imask]
(3) 通过减少 HSV 通道值,然后将图像转换回 BGR 空间,将黑色头发的颜色更改为其他颜色。
用于提取与彩色对象相对应的像素的函数如下所示,该函数通过检查像素值是否在下限和上限指定的值范围内来获取对应像素:
cv2.inRange(src, lowerb, upperb)
函数 inRange() 检查 src 元素是否位于 lowerv 和 upperb 构成的区间范围内。
black = img.copy() hsv[..., 0:3] = hsv[..., 0:3] / 8 black[imask] = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)[imask] black = np.clip(black, 0, 255)
(4) 最后,绘制输入图像,提取的黑色头发,修改头发颜色并显示带有修改头发颜色后的输出图像:
plt.figure(figsize=(20,10))
plt.subplots_adjust(0,0,1,0.9,0.01,0.075)
plt.subplot(131), plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.axis('off')
plt.title('original', size=10)
plt.subplot(132), plt.imshow(cv2.cvtColor(hair, cv2.COLOR_BGR2RGB))
plt.axis('off')
plt.title('only hair', size=10)
plt.subplot(133), plt.imshow(cv2.cvtColor(black, cv2.COLOR_BGR2RGB))
plt.axis('off'), plt.title('hair color changed', size=10)
plt.suptitle('Detecting and changing object colors with opencv', size=15)
plt.show()

总结
到此这篇关于Python图像处理之使用OpenCV检测对象颜色的文章就介绍到这了,更多相关Python OpenCV检测对象颜色内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
python numpy实现多次循环读取文件 等间隔过滤数据示例
这篇文章主要介绍了python numpy实现多次循环读取文件 等间隔过滤数据示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2020-03-03
pytest使用@pytest.mark.parametrize()实现参数化的示例代码
这篇文章主要介绍了pytest使用@pytest.mark.parametrize()实现参数化,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2022-07-07
Python中线程threading.Thread的使用详解
python的thread模块是比较底层的模块,python的threading模块是对thread做了一些包装的,可以更加方便的被使用。本文将为大家详细介绍一下python中的线程threading.Thread()的使用,需要的可以参考一下2022-07-07
Python内置函数之filter map reduce介绍
Python内置了一些非常有趣、有用的函数,如:filter、map、reduce,都是对一个集合进行处理,filter很容易理解用于过滤,map用于映射,reduce用于归并. 是Python列表方法的三架马车2014-11-11


最新评论