数据结构论坛

首页 » 分类 » 问答 » 使用Python中OpenCV库创建一幅
TUhjnbcbe - 2024/6/4 17:25:00

我们知道,在使用PhotoShop进行图片的抠取、创建和存储选区、存储图像的色彩资料等复杂操作时,经常会用到一个功能,那就是“RGB”通道,它能从三原色角度对一幅图片进行精准处理。我们在惊叹PhotoShop中RGB通道功能强大的同时,是否想过它是如何实现的呢?今天,我们使用Python中OpenCV库实现获取一幅图片的RGB三通道图片的功能。我们以网上下载的一幅千与千寻的彩色图片为例进行处理。

图片来自网络

在开始案例之前,我们先要下载安装第三方库OpenCV和numpy。对于OpenCV的安装方式,网上有很多,大家可以自行参照学习安装,我们安装的是比较新的版本4.0.0版本。该版本的OpenCV安装成功后,可以在Python编译器中importcv2测试下安装是否成功。numpy这个库相信大家都很熟悉,数据分析常用的第三方库,对于处理数组有其自身的优势,它的使用方法本篇也不赘述,后续有专门的学习经验跟大家交流。我们使用的Python版本是3.4.3版。

我们知道,在计算机中一幅图片通过RGB三色展现(也可以是RGBA,后面的A表示alpha值,可以设置透明度),显示的每一个像素点都可以使用(R,G,B)这样的数据格式来描述这个像素点的颜色,其中,RGB的取值都是在0-之间,RGB全部取值为0表示黑色,全部为表示白色。

对于一幅图片中每一个像素点,我们可以使用一个二维数组来表示其具体的行列值,然后我们在这个基础上增加一个维度,用一个表示三原色取值的列表定义具体的RGB值,数据结构应该是这样的(row,column)=[R,G,B],我们使用Python中的列表处理这样一种数据结构是很复杂的。有没有好的办法呢?答案当然是肯定的,我们需要用到的神器numpy就该登场了。但是,貌似使用cv2打开的图片就是numpy的ndarray这种类型。但是,必须要说明的是,我们使用cv2.imread()打开的图片中RGB的顺序应该是BGR,可以自行测试以下哦。

然后,如果我们想获取图片的RGB通道图片,把相应的值变为0即可,然后保存图片即可。我们看下这个例子。

使用cv2读取图片并检查数据类型

如果我们想将图片img中所有像素点的R值改为0该怎么操作呢?很简单我们使用img[:,:,2]=0(按照BGR的顺序取值的)。

为了增加程序的复杂性,我们使用一个循环同时将同一幅图片的RGB通道图片分别进行输出。程序源代码如下图所示。

程序源代码

下面我们在PhotoShop中比较看下我们的输出结果是否符合要求。

取消红色通道后的图片R.png在ps中显示

上图中取消红色通道就是将图片中所有像素点的R值置为0,同理,其它通道按照红色通道进行处理即可。

OpenCV是一款很不错的计算机视觉库,最重要的是这款视觉库是开源并且跨平台的,轻量而高效是其主要特点,主要接口是C++,保证了运行速率,它实现了很多图形图像处理及计算机视觉方面的通用算法。本例子只是OpenCV的简单应用。对于视频它也可以很好的处理,并且它提供的接口很容易使用。我们在后续会进一步讨论其对于视频处理的一些简单运用,并且对于它的一些常用算法也进行初步研究,欢迎大家留言讨论。

转载请注明出处(百家号:Python高手养成)

1
查看完整版本: 使用Python中OpenCV库创建一幅