Python图像处理之使用OpenCV检测对象颜色
作者:AI?technophile 发布时间:2023-05-20 01:00:18
标签: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()
总结
来源:https://blog.csdn.net/qq_30167691/article/details/128138980


猜你喜欢
- Function Moneynm(n,m) &
- 如下所示:import osimport timeimport subprocesssubprocess.Popen(r'cmd
- 本文实例讲述了Python实现统计文本文件字数的方法。分享给大家供大家参考,具体如下:统计文本文件的字数,从当前目录下的file.txt取文
- 工作中,经常会有用python访问各种数据库的需求,比如从oracle读点配置文件或者往mysql写点结果信息之类的。这里列一下可能用到的各
- 本文实例讲述了基于pako.js实现gzip的压缩和解压功能。分享给大家供大家参考,具体如下:<!DOCTYPE html>&l
- 在前面的文章中,我分别介绍了基于列表元素柱状图和基于表格元素柱状图的实现方法,虽然方法比较简单,但是它却包含了基本的实现原理。在了解了前面两
- 这里的Counter是指collections中的Counter,通过Counter可以实现字典的创建以及字典key出现频次的统计。然而,使
- 这篇文章主要介绍了Python插入Elasticsearch操作方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考
- 要做一个页面上短信息的提示音的功能,本来想用HTML5中Audio+IE下的bgsound来实现,可是发现每种浏览器对Audio的解码类型还
- 以前一直用RHEL 6.3和6.4,系统盘里自带了mysql server,配置好yum源后,直接yum install mysql-ser
- 本博文源于python科学计算,旨在解析如何使用python进行计算分段函数值。下面就以复杂的二元函数进行演示。题目再现求解思路首先先生成x
- 哈喽!我的朋友们,最近有一个新项目。所以一直没更新!有没有想我啊!!今天咱们来说一下JS原生轮播图!话不多说:直接来代码吧:下面是CSS部分
- 为了在一幅图像 f 的(x,y)位置寻找边缘的强度和方向,所选择的工具就是梯度,梯度使用向量来表示:该向量指出了图像 f 在位置(x,y)处
- 最近在实习,boss给布置了一个python的小任务,学习过程中发现copy()和deepcopy()这对好 * 实在是有点过分,搞的博主就有
- 将Excel中的数据导入到Access中,前提是在Access中的表已经建好。 dim conn dim co
- 本文实例主要实现的是python根据unicode判断语言类型,具体如下。实例代码:def is_chinese(uchar): "
- pycharm确实要比Spyder功能全面,但是anaconda的环境配置实在太方便了,所以想take both,其实很简单,利用pycha
- php实现上传图片保存到数据库的方法。分享给大家供大家参考。具体分析如下:php 上传图片,一般都使用move_uploaded_file方
- 1000块钱做个百度?能提出这种要求的客户实乃乙方克星、民族之光、科创永动机、西虹市一大杰出青年,诺奖永远得不到的人才。但作为一个硬核的程序
- 1、获取秒级时间戳与毫秒级时间戳、微秒级时间戳import timeimport datetimet = time.time()print