我要在最细的雨中 吹出银色的花纹 让所有在场的丁香 都成为你的伴娘
我要张开梧桐的手掌 去接雨水洗脸 让水杉用软弱的笔尖 在风中写下婚约。
— — 顾城 《南国之秋》
前言
粉丝朋友们,我们又见面了,上周我们一同学习了opencv图像处理的基本显示和保存等操作(【图像篇】OpenCV图像处理(二)---图像读取与显示),既然显示了图像,那么我们就要对其进行一系列的操作了,现在,让我们一同走进今天的学习内容-----【图像数据】&【通道分离】
图像数据
壹
一、图像数据
首先,我们来了解一点必备知识,在python中,数据结构类型有list、dict、numpy.ndarray 等,数据元素的数据类型(int、float等),下面,我们就来看看jpg图像数据的结构类型和元素的数据类型。
1.代码实践
代码语言:javascript复制#coding:utf-8
import cv2
image_path = './02.jpg'
image = cv2.imread(image_path)
print("图像数据结构类型是:{}".format(type(image)))
# python中 dtype()是返回数据元素的数据类型(int、float等)
print("图像数据元素的数据类型是:{}".format(image.dtype))
#cv2.imshow("image",image)
cv2.waitKey(0)
cv2.destroyAllWindows()
代码解读:第五行代码读取名称为02.jpg的图像,随后用print()函数打印出type()、X.dtype()函数的返回值,返回值的解释已在代码中注释了,请各位仔细查看。
2.效果演示:
如上图可以看出,image.dtype返回的是uint8类型,是一个无符号的整形,范围为:{0-255(2的8次方减一)},也就是说图像数据的每一个像素点是由八个二进制位来表示的。
通道分离
贰
二、通道分离
1.图像通道分离及其显示
前面说过了,OpenCV读取的图像是按照BGR的方式读取的,下面我们就来进行实操图像通道分离和显示单通道图像。
(1)代码实践
代码语言:javascript复制#coding:utf-8
import cv2
image_path = './02.jpg'
image = cv2.imread(image_path)
print("图像数据结构类型是:{}".format(type(image)))
# python中 dtype()是返回数据元素的数据类型(int、float等)
print("图像数据元素的数据类型是:{}".format(image.dtype))
# B通道分离(blue) 蓝色通道
B_channel = image[:,:,0]
# G通道分离(green)绿色通道
G_channel = image[:,:,1]
# R通道分离(red) 红色通道
R_channel = image[:,:,2]
cv2.imshow("B_channel",B_channel)
cv2.imshow("G_channel",G_channel)
cv2.imshow("R_channle",R_channel)
cv2.waitKey(0)
cv2.destroyAllWindows()
代码解读:代码中主要部分在于image[:,:,0],该部分主要功能在于对三通道图像(BRG)
对最后一个通道取0,1,2可分别取得B,G,R通道d 图像数据。
(2)显示效果
原图:
小结:从上可以看出,RGB图像可进行通道分离,当进行一些不太关注细节的图像处理时,可以只采取单通道来处理,这样就可以减少图像处理的时间和加快项目推进的速度。
结语
好了,各位老铁们,今天的知识分享就到这里了,还有什么没讲解到位的,大家后台回复就好,从我们的文章可以看出,我们都是从基础讲解,几乎可以说是面对零基础的同学,并且每次的文章内容都比较简单和简洁,不会太长,因此,下来后大家可以很快的进行实操,不会占用太多的时间,我们下期再会。