python opencv创建图像_使用Python中OpenCV库创建一幅图片的RGB通道图片

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

ae51f3deb48f8c5480668757c5d124f0e1fe7f0a.jpeg?token=52a40ee88a64a851d47d6ca7639a980c&s=37A540A6CE100CCC701330A80300C018图片来自网络

【前期准备】

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

【原理分析】

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

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

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

aec379310a55b3198626323443508b23cdfc1795.jpeg?token=1c1556687ef8616d359e62e39a928bd4&s=E9F223C217FCBC695CC9FD0B0200F0C1使用cv2读取图片并检查数据类型

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

【程序源码】

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

908fa0ec08fa513db4dccee7c2955cfeb3fbd997.jpeg?token=0140cf8a6d35dc995dc69606547a65b8&s=E0F233C41BF8BC4906ED059603003082程序源代码

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

6159252dd42a2834b8ebbc4fa44dc0ef14cebf27.jpeg?token=99714bc7ab843423f38c08222967e629&s=522BB1E2955E2FDA4A4A1E0F030050CE取消红色通道后的图片R.png在ps中显示

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

【总 结】

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值