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
0
投稿
猜你喜欢
- 音频文件放入和.py文件同级的目录下import winsound # 导入此模块实现声音播放功能import time # 导入此模块,获
- 前言今天我们一起来聊聊DataFrame中的索引。上一篇文章当中我们介绍了DataFrame数据结构当中一些常用的索引的使用方法,比如ilo
- Google Chrome 的发布,使我们更加的注重基于 WebKit 核心的浏览器的表现情况,但我们很多时候“不小心”就会出现
- <html><head><title>过滤空格</title><SCRIPT LANG
- 现在不写asp了这次我将我以前沉淀下的一些函数库共享给大家,希望能给初学者启示,给老手也有所帮助吧.先谢谢大家支持! <%@
- 概述Web环境我们假设为Apache。在编译PHP的时候,为了能够让Apache支持PHP,我们会生成一个mod_php5.so的模块。Ap
- 请问如何从ASP连接到Oracle Server?可用下面的代码进行连接: <%@ Lan
- SQL> show all --查看所有68个系统变量值 SQL> show user --显示当前连接用户 SQL> s
- 本文实例讲述了PHP中soap的用法,分享给大家供大家参考。具体用法分析如下:PHP 使用soap有两种方式。一、用wsdl文件服务器端:&
- 1. composer 安装 PDF组件composer require setasign/fpdicomposer require set
- Array(数组)内部机制在 Go 语言中数组是固定长度的数据类型,它包含相同类型的连续的元素,这些元素可以是内建类型,像数字和字符串,也可
- Oracle分页存储过程的思路于sqlserver的思路是一样的,但是我这里做了点改动,在因为Oracle的语法和规则的不同所以,Oracl
- 视图视图是一个虚拟表(非真实存在),其本质是根据SQL语句获取动态的数据集,并为其命名,用户使用时只需使用名称即可获取结果集,并可以将其当作
- 很长时间以来,一直想将自己的一些零碎的想法总结下,给自己一个完整的思维,也算是做个存档。一家之言,绝不敢说对别人会有什么帮助,对外人的层面上
- 连续看到几个和 Oracle 优化器隐含参数 _sort_elimination_cost_ratio 相关的优化案例(Refer Refe
- lambda函数是一种小的匿名函数。lambda语法lambda函数:lambda [arg1 [,arg2,...[,argn]]] :
- 以下是通过Excel 的VBA连接Oracle并操作Oracle相关数据的示例Excel 通过VBA连接数据库需要安装相应的Oracle客户
- 还是网站在不同操作系统不同浏览器下兼容性的问题,但难度加了一层.如果是要检查用户登录后的页面的兼容性,该怎么办?现在一般的测试网站,都是提交
- 本文研究的主要是python实现Decorator模式,具体介绍如下。一般来说,装饰器是一个函数,接受一个函数(或者类)作为参数,返回值也是
- SQL Server 2000 清理日志精品教程SQL Server 2000 数据库日志太大!如何清理SQL Server 2000的日志