filename:读取图像的文件名称,包含文件地址(相对路径或绝对路径都可)、名称和文件类型。
flags:图像的读取形式,默认为彩色形式,为零时为灰度形式。
import cv2
from matplotlib import pyplot as plt
img = cv2.imread(r'D:\pythonProject1\R-C.jpg')
print(img)
根据输出的数据可知其图像以矩阵形式读入到计算机中,这里的矩阵的每一个数字分别对应图像中每一个像素的亮度,而同一个像素点的三个数值分别对应RBG三个通道。我们可以使用绘图软件来令其可视化也可以用OpenCV中自带的显示算子。
plt.imshow(img, cmap='prism', interpolation='bicubic')
plt.xticks([]), plt.yticks([]) # 隐藏xy轴上的刻度线
plt.show()
显示结果如下:
我们看见绘制出来的图像的颜色与正常的图像有所出入,这是因为历史遗留问题OpenCV使用的图像模式是BGR模式,而matplotlib绘制图像时使用的是RBG模式,所以导致其色彩与原图有所出入,这里我们可以使用颜色空间变换来令BGR模式转化为RBG模式。
src:待转换的原始图像。
dst:转换后的目标图像。
code:颜色转换的标志,这里使用的是BGR转RBG,即是COLOR_BGR2RGB,简记为4。
dstCn:目标图像中的通道数,如果为零的话则从src中自动导出通道数。
img_rbg = cv2.cvtColor(img, 4, 0) # BGR转RBG
plt.imshow(img_rbg, cmap='prism', interpolation='bicubic')
plt.xticks([]), plt.yticks([]) # 隐藏xy轴上的刻度线
plt.show()
winname: 要显示图像的窗口名字,为字符串形式
mat:目标图像的图像矩阵
cv2.imshow('img', img)
cv2.waitKey(0) # 加入一个键盘等待防止程序上一步只执行一瞬间观察不到
显示效果如下:
但是这里的窗口无法调整位置和大小,显得略微呆板,接下来优化一下这个窗口。
winname:窗口名称,用作窗口的标识符,为字符串形式
flags:窗口属性设置,主要设置窗口大小是否可调、显示图像是否填满窗口等。具体可选择的参数及含义如下表所示。
标志参数 | 作用 |
---|---|
cv2.WINDOW_NORMAL | 显示图像后,允许用户随意调整窗口大小 |
cv2.WINDOW_AUTOSIZE | 根据图像大小显示窗口,不允许用户调整大小 |
cv2.WINDOW_OPENGL | 创建窗口的时候会支持OpenGL |
cv2.WINDOW_FULLSCREEN | 全屏显示窗口 |
cv2.WINDOW_FREERATIO | 调整图像尺寸以充满窗口 |
cv2.WINDOW_KEEPRATIO | 保持图像比例 |
cv2.WINDOW_GUI_EXPANDED | 创建的窗口允许添加工具栏和状态栏 |
cv2.WINDOW_GUI_NORMAL | 创建没有状态栏和工具栏的窗口 |
用代码实现如下
cv2.namedWindow('imgWindow', cv2.WINDOW_NORMAL)
cv2.imshow('imgWindow', img)
cv2.waitKey(0)
至此完成了图像的读取与显示。