OpenCV读取和写入
1.1 读取、保存图片
使用cv.imread()函数读取图像。在第1个位置参数传入图像文件的路径,如果读取文件成功返回一个numpy数组,如果获取失败将返回None。第二个参数是一 个标志,它指定了读取图像的方式。图像应该在工作目录或图像的完整路径应给出
- cv.IMREAD_COLOR: 加载彩色图像。任何图像的透明度都会被忽视。它是默认标志。
- cv.IMREAD_GRAYSCALE:以灰度模加载图像
- cv.IMREAD_UNCHANGED:加载图像,包括alpha通道.
注意 除了这三个标志,你可以分别简单地传递整数1、0、None。
OpencCV支持 JPG、PNG、TIFF 等常见格式图像文件加载(默认读取的格式是 BGR)。
这里需要注意的是获取图像失败并不会抛异常,而是得到一个None,后面的imshow(),imwrite()等方法如果直接使用反而会导致异常。
###加载图像
import numpy as np
import cv2
print ('----------------Hello OpenCv----------------')
img = cv2.imread('./images/lena.jpg',1) # 默认为1,表示按照BGR三通道方式进行读取,0则以灰度图单通道方式进行读取。
cv2.imshow('input image',img)
k = cv2.waitKey(0)
if k == 27: # wait for ESC key to exit
cv2.destroyAllWindows()
elif k == ord('q'): # wait for 'q' key to save and exit
cv2.imwrite('./images/lena_gray.png',img)
cv2.destroyAllWindows()
- cv2.waitKey(time)表示图片延时
- 在time时间内,等待键盘上的命令,没有则进入下一帧。没有下一帧,则是自动关闭窗口。
- 将time设置为0,cv2.waitKey(0) 表示停止在当前帧,有按键指令才会进入下一帧。显示单张图片设置为cv2.waitKey(0)。
- 通过if语句控制程序关闭
- 当按下 Esc 键退出程序或者按下指定的 q 键退出窗口,其它键不会退出窗口。
- 通过if控制,按下任何键都会关闭。
- 在调试过程中如果显示的窗口过多时
- 可以使用destroyWindow(窗口名称)单独关闭某个显示窗口
- 也可以使用destroyAllWindows()关闭所有显示窗口
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
使用函数 cv.imshow() 在窗口中显示图像。窗口自动适合图像尺寸。 第一个参数是窗口名称,它是一个字符串。第二个参数是我们的对象。你可以根据需要创建任意多个窗口,但可以使用不同的窗口名称。
cv2.imwrite('./images/lena_copy.png',img)
使用函数cv.imwrite()保存图像。 第一个参数是文件名,第二个参数是要保存的图像。 这会将图像以PNG格式保存在工作目录中
1.2 查看图片属性
图片是numpy数据类型的ndarray,三个维度的,比如 [H,W,C] 可以参照Numpy数据操作。
type(img),img.shape,img.size
1.3 调整窗口nameWindow()、resizeWindow()
使用imshow()方法显示图像时,默认是以图像的像素大小显示的.
可以通过nameWindow(窗口名称,cv2.WINDOW_NORMAL)命名窗口,
再使用resizeWindow(窗口名称,窗口宽度,窗口高度)缩放窗口,
最后使用imshow()显示图像,注意三者都在同一个窗口名称上操作
1.4 使用Matplotlib或Image显示图片
Matplotlib是Python的绘图库,可为你提供多种绘图方法。可以使用Matplotlib缩放图像,保存图像等。
plt.imshow 是 Matplotlib 库中用于显示图像的函数,
它的常见参数包括:
X:要显示的图像数据。可以是一个二维数组,也可以是三维数组,表示RGB图像。如果是二维数组,灰度图像将会被创建;如果是三维数组,则每个通道 将会被解释为一个颜色通道。
cmap:colormap,指定了图像使用的颜色映射。例如,'gray' 表示灰度图像,'viridis' 表示一种常见的彩色映射。你也可以传递自定义的 colormap 对象。
interpolation:插值方法,用于确定如何在图像的像素之间插值显示。常见的取值包括 'nearest'、'bilinear' 等。
aspect:'auto' 或 'equal',控制图像的纵横比。 除了这些主要参数外,还有许多其他参数可以用来调整图像的显示效果。
import cv2
from matplotlib import pyplot as plt
img = cv2.imread('./images/yanzu.jpg',0)
plt.imshow(img, cmap = 'gray', interpolation = 'bicubic')
#plt.xticks([]), plt.yticks([]) # 隐藏 x 轴和 y 轴上的刻度值
plt.show()
在使用 Python Imaging Library (PIL) 或其 fork 库 Pillow 时,可以使用 Image.fromarray 方法将 NumPy 数组转换为图像。
常见的参数包括:
array:要转换为图像的 NumPy 数组。
mode:指定图像的模式。例如,'L' 表示灰度图像,'RGB' 表示真彩色图像。
pallete:调色板,用于指定调色板模式的图像的颜色表。
除了这些主要参数外,
Image.fromarray 方法还可以接受一些其他参数,具体取决于所使用的库和版本。常见的用法是直接传入 NumPy 数组和图像模式来创建 对应的图像对象