彩色图片在OpenCV里的表示方式

前面了解了灰度图片在python里的表示方式,也是图片的数据结构,它是采用numpy的ndarray来存储,是一个二维的数据结构。那么彩色图片是怎么样表示呢?难道也是采用二维数组吗?在理解表示方式之前,先来看一下彩色图片的基本特征。下雨之后,如果天空中有太阳,往往会形成一道亮丽的彩虹风景,这样就看到了五颜六色。如果学习过初中的物理,就知道这是太阳光经过水珠的折射,把白光进行分解了。基于这个原理,科学家不断地研究,寻找颜色的秘密,以及它的本质。比如白光可以有这么多种颜色组成的,反过来,说明一点,只要找到几种基本的颜色,就可以组合成其它颜色。经过不断试验,发现红色(R)、绿色(G)和蓝色(B)就可以组合出其它颜色,只是每种颜色分量不一样。如果三种颜色份量一样,组合出来的就是白色。旧式的CRT彩色电视机就是采用这个原理,目前LED的显示器也是采用这个原理。那么彩色图片转换为数字化时,也可以采用这个原理。在灰度图片里,每个像素只要使用一个字节就可以表示了,如果彩色图片也采用一个字节来表示,每种颜色表示只能2位或3位来表示,这样颜色非常有限,表示的色彩就失真很多。在以前旧式的电脑是有用这种方式来表示的,随着技术的进步,内存和储存的容量扩大,目前都是每一种颜色采用一个字节来表示,三种颜色共用3个字节来表示,也是24位来表示。比如(0,0,0)表示黑色,(255,255,255)表示白色,(255,0,0)表示红色,(0,255,0)表示绿色,(0,0,255)表示蓝色。

 

下面通过一个小程序来看一下在python的OpenCV里是怎么样表示,代码如下:

#python 3.7.4,opencv4.1
#蔡军生 https://blog.csdn.net/caimouse/article/details/51749579
#
import cv2

#图片的路径
imgname = "img1.jpg"

#读取图片
image = cv2.imread(imgname, cv2.IMREAD_COLOR)
print(image)
print(image.shape)
print(type(image))

#分离三个颜色通道
b = image[: , :, 0]
g = image[: , :, 1]
r = image[: , :, 2]

cv2.imshow("B", b)
cv2.imshow("G", g)
cv2.imshow("R", r)

#显示图像
cv2.imshow("image", image)

#等待用户输入,然后删除所有窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

运行程序之后,可以看到下面的结果输出:

从上面结果可以看到三种颜色的图片,每种颜色的图片数值不一样。

同时也可以看到ndarray的结构为(288, 300, 3),也就是说288表示行,300表示列,3表示颜色的三维数组,它的组成如下:

[[[217 138 129]           表示一列中的一个像素点

  [219 140 131]

  [222 143 134]

  ...

  [196 123 119]

  [194 123 119]

  [193 122 118]]         到这里表示一行元素

 

下一行元素的开始

 [[216 137 128]

  [218 139 130]

  [221 142 133]

  ...

  [196 123 119]

  [193 122 118]

  [193 122 118]]

由于函数返回的图像以[B G R]的排列表示颜色分量,因此image[: , :, 0]语句是获取蓝色分量的通道数据,image[: , :, 1]语句是获取绿色分量的通道数据,image[: , :, 2]语句是获取红色分量的通道数据,如果要修改不同的颜色,就可以操作相应颜色的通道,就可以改变图片的颜色了。

https://blog.csdn.net/caimouse/article/details/51749579

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

caimouse

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值