Python-OpenCV基础篇学习笔记(1)

Python-OpenCV基础篇笔记之一

  • 图像的读取与显示
    • 图像读取函数
      • cv2.imread(const String & filename, int flags = TMREAD_COLOR)
    • 使用matplotlib绘图演示
      • OutputArray dst = cv2.cvtColor(InputArray src, int code, int dstCn = 0)
    • 使用OpenCV自带的显示函数
      • cv2.imshow(const String & winname, InputArray mat)
      • cv2.namedWindow(const String & winname, int flags = WINDOW_AUTOSIZE)

图像的读取与显示

图像读取函数

cv2.imread(const String & filename, int flags = TMREAD_COLOR)

filename:读取图像的文件名称,包含文件地址(相对路径或绝对路径都可)、名称和文件类型。
flags:图像的读取形式,默认为彩色形式,为零时为灰度形式。

import cv2
from matplotlib import pyplot as plt
img = cv2.imread(r'D:\pythonProject1\R-C.jpg')
print(img)

根据输出的数据可知其图像以矩阵形式读入到计算机中,这里的矩阵的每一个数字分别对应图像中每一个像素的亮度,而同一个像素点的三个数值分别对应RBG三个通道。我们可以使用绘图软件来令其可视化也可以用OpenCV中自带的显示算子。

使用matplotlib绘图演示

plt.imshow(img, cmap='prism', interpolation='bicubic')
plt.xticks([]), plt.yticks([])  # 隐藏xy轴上的刻度线
plt.show()

显示结果如下: Python-OpenCV基础篇学习笔记(1)_第1张图片
我们看见绘制出来的图像的颜色与正常的图像有所出入,这是因为历史遗留问题OpenCV使用的图像模式是BGR模式,而matplotlib绘制图像时使用的是RBG模式,所以导致其色彩与原图有所出入,这里我们可以使用颜色空间变换来令BGR模式转化为RBG模式。

OutputArray dst = cv2.cvtColor(InputArray src, int code, int dstCn = 0)

src:待转换的原始图像。
dst:转换后的目标图像。
code:颜色转换的标志,这里使用的是BGR转RBG,即是COLOR_BGR2RGB,简记为4。
dstCn:目标图像中的通道数,如果为零的话则从src中自动导出通道数。

img_rbg = cv2.cvtColor(img, 4, 0)  # BGRRBG
plt.imshow(img_rbg, cmap='prism', interpolation='bicubic')
plt.xticks([]), plt.yticks([])  # 隐藏xy轴上的刻度线
plt.show()

显示结果如下:
Python-OpenCV基础篇学习笔记(1)_第2张图片
这次绘制出来的图片便与原图无二了。

使用OpenCV自带的显示函数

cv2.imshow(const String & winname, InputArray mat)

winname: 要显示图像的窗口名字,为字符串形式
mat:目标图像的图像矩阵

cv2.imshow('img', img) 
cv2.waitKey(0)  # 加入一个键盘等待防止程序上一步只执行一瞬间观察不到

显示效果如下:
Python-OpenCV基础篇学习笔记(1)_第3张图片
但是这里的窗口无法调整位置和大小,显得略微呆板,接下来优化一下这个窗口。

cv2.namedWindow(const String & winname, int flags = WINDOW_AUTOSIZE)

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)

至此完成了图像的读取与显示。

你可能感兴趣的:(python,opencv)