(一)图像的表示与通道数问题、读取并展示图片

图像的表示与通道数问题

数字图像的基本概念

对于一幅的数字图像,我们看到的是 肉眼可见的一幅真正的图片,但是计算机看来,这副图像只是一堆亮度各异的点。一副尺寸为 M × N 的图像可以用一个 M × N 的矩阵来表示,矩阵元素的值表示这个位置上的像素的亮度,一般来说像素值越大表示该点越亮。

一般来说,灰度图用 2 维矩阵表示,彩色(多通道)图像用 3 维矩阵(M× N × 3)表示。

————————————————————————————————————————

通道数问题

单通道
描述一个像素点,如果是灰度,那么只需要一个数值来
描述它,就是单通道。灰度图和二值化的图像都是单通道图片。
2 8 2^{8} 28 = 2 2 2^{2} 22(B) * 2 3 2^{3} 23(G) * 2 3 2^{3} 23(R)
总共显示256种颜色
取值范围:0~255

  • 灰度图的位深度为1*8=8.
  • 二值化图像的位深度为1*1=1.

三通道
如果一个像素点,有RGB三种颜色来描述它,就是三通道。
2 24 2^{24} 224 = 2 8 2^{8} 28(B) * 2 8 2^{8} 28(G) * 2 8 2^{8} 28(R)
总共显示16777216种颜色
取值范围:0~16777215
三通道是用的最多的一种图片了。三通道图的意思是每个像素点都有3个值表示 。位深度=3*8=24.

四通道
而四通道图像,就是R、G、B加上一个A通道,表示透明度。一般叫做alpha通道,表示透明度的。
2 32 2^{32} 232 = Alpha透明度 + 2 8 2^{8} 28(B) * 2 8 2^{8} 28(G) * 2 8 2^{8} 28(R)
四通道图的意思是每个像素点都有4个值表示 ,位深度=4*8=32.
PNG是一种使用RGBA的图像格式。

二值化图像
二值图像的意思,就是每个图像当中的每个像素点,只能取0或255,其中0为黑,255为白,即非黑即白。我们将我们的彩色图片转化为灰度图并输出。
位深度为1,代表每个像素点用1位表示,即非1即0.

通道数之间的转化

# 高通道数向低通道数转化
img_gray=img.convert('L')  # 将四通道或三通道图片转化为灰度图
img_white=img.convert('1') # 将四通道,三通道,灰度图转化为二值化图片
#低通道数向高通道数转化,主要涉及到灰度图向RGB的转化。

# 灰度图向三通道图的转化注意这里输出的图片依然是灰色的,但是位深度已经达到24.
img_color=img_gray.convert('RGB') 

————————————————————————————————————————

接着再说说图像是如存储的,即使如何编码的:
如果是单通道图像,即灰度图,每个像素值用一个八位的二进制即可,如下图:
在这里插入图片描述

其中,I(ij)表示第i行第j列的亮度值。

如果是多通道图像,比如 RGB 图像,则每个像素用三个字节表示。在 OpenCV 中, RGB 图像的通道顺序为 BGR ,存储如下图 所示:
在这里插入图片描述

原文链接:https://blog.csdn.net/mao_hui_fei/article/details/78217049

————————————————————————————————————————

读取并展示图片

代码如下:

# 引入包
import cv2 as cv

img = cv.imread("./static/image/blur.jpg")
#Mat imread(const String& filename,int flags);  读取图片
# 第一个参数是图片地址:“\”"\\"和"/" "//"   无论正反,单双python2.7实测没影响
# 第二个参数是图片读取方式:默认正常读取,如果为0 则为 灰度图

cv.namedWindow("Image", 0)
# cv.NamedWindow( const char* name, int flags );
# 创建窗口,其实不写这行代码也可以show出来。
#  第一个参数是窗口名字,尽量使用英文命名,中文会出现乱码
# 第二个参数是窗口显示方式, 为0或cv.WINDOW_NORMAL:可以改变窗口大小,不写或cv.WINDOW_AUTOSIZE则不可改变大小

cv.imshow('Image', img)
# mshow(const string& winname, InputArray mat) 显示图片窗口
# 第一个参数:窗口名称。如果上面有NamedWindow()函数,这个名称要与它一样,不然会出现两个窗口,一个是NamedWindow的空白窗口,一个是imshow的图片窗口。
# 第二个参数:要显示的图片。
# 如果窗口是用CV_WINDOW_AUTOSIZE(默认值)标志创建的,那么显示图像原始大小。否则,将图像进行缩放以适合窗口。而imshow 函数缩放图像,取决于图像的深度

cv.waitKey(5000)
# waitKey(K) 窗口显示时间,单位:毫秒
# k=0: (也可以是小于0的数值)一直显示,键盘上按下一个数字键即会消失
# k>0:显示多少毫秒

cv.destroyAllWindows() # 删除建立的全部窗口,释放资源

结果展示:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值