随笔
理论
【1】
说明
image.shape
释义;- 获取图像的属性(信息);
- 图像的属性包括:行,列,通道,图像数据类型,像素数目等;
正文A
- 在图像处理中,
image.shape
表示图像的尺寸和通道数; - 对于彩色图像,通常有三个通道(红、绿、蓝);
- 而灰度图像只有一个通道。
正文B
image.shape
返回一个表示图像形状的元组;- 具体的含义是
(height, width, channels)
; height
表示图像的高度(垂直方向上的像素数);width
表示图像的宽度(水平方向上的像素数);channels
表示图像的通道数,对于彩色图像通常是3
(红、绿、蓝),对于灰度图像是1
;
正文C
- 举例,
image.shape[2]
表示图像的通道数,对于彩色图像来说,它应该是 3; - 这个信息在处理图像时很重要,因为它帮助我们正确地解释和处理图像的各个通道。
正文D
img.shape[:2]
表示取彩色图片的长、宽;img.shape[:3]
则取彩色图片的长、宽、通道;
正文E
- 关于
img.shape[0]、[1]、[2]
; img.shape[0]
:图像的垂直尺寸(高度);img.shape[1]
:图像的水平尺寸(宽度);img.shape[2]
:图像的通道数;- 在矩阵中,
[0]
就表示行数,[1]
则表示列数。
实操
【1】
说明
- 图片的加载、显示和保存;
代码
import cv2img = cv2.imread(r"C:\Users\SUNxRUN\Desktop\Demo.jpg")# 参数-1为按原通道读入,不写的话默认读入三通道图片,例如(112,112,3)
print(img.shape)
# 读入的时图片的高度height
print(img.shape[0])
# 读入的时图片的宽度weight
print(img.shape[1])
结果
(607, 1382, 3)
607
1382
【2】
代码
import cv2# 读取图片
img = cv2.imread(r"C:\Users\SUNxRUN\Desktop\Demo.jpg")
# 读取图片(仅读取灰色)
imgGrey = cv2.imread(r"C:\Users\SUNxRUN\Desktop\Demo.jpg", 0)
# 展示图片
cv2.imshow("img", img)
# 展示图片
cv2.imshow("imgGrey", imgGrey)
# 等待图片的关闭
cv2.waitKey()
# 写出图片
cv2.imwrite(r"C:\Users\SUNxRUN\Desktop\Demo_1.jpg", imgGrey)
疑问
imshow
的两个参数作用是什么?
【3】
说明
- 图像显示窗口的创建与销毁;
代码
import cv2img = cv2.imread(r"C:\Users\SUNxRUN\Desktop\Demo.jpg")# 创建一个窗口
cv2.namedWindow("img", cv2.WINDOW_AUTOSIZE)
cv2.imshow("img", img)
cv2.waitKey()
# 销毁任何建立的窗口
cv2.destroyAllWindows()
注释
cv2.namedWindow(窗口名,属性)
- 属性:指定窗口大小模式;
>>> `cv2.WINDOW_AUTOSIZE`:根据图像大小自动创建大小;
>>> `cv2.WINDOW_NORMAL`:窗口大小可调整;
【4】
说明
- 图片宽、高、通道数获取;
代码
import cv2img = cv2.imread(r"C:\Users\SUNxRUN\Desktop\Demo.jpg")
imgGrey = cv2.imread(r"C:\Users\SUNxRUN\Desktop\Demo.jpg", 0)sp1 = img.shape
sp2 = imgGrey.shapeprint(sp1)
print(sp2)
结果
(800, 800, 3)
(800, 800)
【5】
说明
- 图像像素数目和图像数据类型的获取;
代码
import cv2img = cv2.imread(r"C:\Users\SUNxRUN\Desktop\Demo.jpg")imgSize = img.size
print(imgSize)ty = img.dtype
print(ty)
结果
1920000
uint8
解释
- 图像矩阵
img
的size
属性和dtype
属性分别对应图像的像素总数目和图像数据类型; - 一般情况下,图像的数据类型是
uint8
;
【6】
说明
- 获取和修改图片中某点的像素值;
代码
import cv2# 读取图像(使用cv2读进来是一个`numpy`矩阵,像素值介于0~255)
img = cv2.imread(r"C:\Users\SUNxRUN\Desktop\Demo.jpg")# 读取像素点
px = img[100, 100]
print(px, " ", type(px))# 修改像素
img[100, 100] = [0, 0, 0]
print(img[100, 100])
结果
[96 75 67] <class 'numpy.ndarray'>
[0 0 0]
说明
- 访问和操作图像像素;
代码
说明
- 生成指定大小的空图像;
代码