Opencv读取和显示需要使用到imread()和imshow()两个函数,使用下面这段代码即可利用Opencv实现指定图片的读取与显示:
import cv2 as cv #导入opencv并命名为cv
img = cv.imread('cat.jpg',-1) #读取指定图片
cv.namedWindow('Img',cv.WINDOW_AUTOSIZE) #创建显示图片窗口
cv.imshow('Img',img) #在指定窗口中显示图片
cv.waitKey(0) #设置等待键盘响应
cv.destroyWindow('Img') #销毁指定窗口
#cv.destroyAllWindows() #销毁所有窗口
函数介绍
cv.imread():读取要展示的照片,imread()有两个参数,第一个参数是要读取照片路径(包括文件名和后缀),第二个参数是图像的读取方式,可以是:
cv.IMREAD_COLOR(彩色rgb,忽视透明度,默认值)
cv.IMREAD_GRAYSCALE(灰度模式)
cv.IMREAD_UNCHANGED(rgba,a表示透明度)
这三个参数分别可用1、0、-1代替。
cv.namedWindow():创建要展示图片的窗口,第一个参数是窗口名称,第二个参数控制窗口大小是否可以调整,取值为:
cv.WINDOW_AUTOSIZE(默认值,适应图片大小,窗口大小不可调整)
cv.WINDOW_NORMAL:(可以调整窗口大小,对大图会进行一个缩放便于展示)。
cv.imshow():展示读取的图片,同样有两个参数,第一个参数类型为字符串类型,是我们给展示图象窗口取的名称,第二个参数是我们要展示的图片对象
cv.waitKey():键盘绑定函数,参数是以毫秒为单位的时间,如果传入0,那么会无限等待敲击一次键盘才会退出。
cv.destroyWindow():销毁指定窗口,参数为要销毁的窗口。
cv.destroyAllWindows():销毁所有窗口。
Opencv保存图像十分简单,使用imwrite()函数即可,这里我简单的加载一张彩色图像并将其保存为灰度图像:
#读取彩色图像
img = cv.imread('cat.jpg',1)
#彩色图像转换为灰度图像
img_temp = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
#保存灰度图像
cv.imwrite('cat_gray.jpg',img_temp)
函数介绍
imwrite():保存图像,涉及两个参数,第一个参数表示要将图像保存到的路径(包括文件名和后缀),第二个参数即是我们要保存的图像对象。
代码执行之后我们就可以在我们指定的路径(我这里设置为与程序同一路径)下看到我们所保存的灰度图像了,如下图所示:
除了使用Opencv的imshow()显示图像外,我们还可以使用python的绘图库Matplotlib显示图像,使用方式同样简单,但是要注意plt.imshoe()要和plt.show()搭配使用才能达到显示图像的目的。代码如下:
import cv2 as cv
from matplotlib import pyplot as plt
img = cv.imread('cat.jpg',1)#读取彩色图像
plt.imshow(img)#不显示图像,可以认为是对图像做一些处理
plt.xticks([]), plt.yticks([]) # 隐藏 x 轴和 y 轴上的刻度值
plt.show()#显示图像
展示图片效果:
从上边的图像展示效果可以看到,虽然我们使用Matplotlib对cv.imread()读取的图像进行了显示,但是很明显这其中出现了一些问题,导致图片色彩显示错误。
导致这个错误的原因是cv.imread()读取图片的时候是按照BGR的顺序进行读取的,而Matplotlib进行显示的时候却是按照RGB的顺序进行显示的,这就导致了图像色彩显示错误的原因,我们可以只使用Opencv来对图像进行读取和显示操作来避免这种情况发生,也可以采用下面的办法来解决这个问题。
方法一:
import cv2 as cv
from matplotlib import pyplot as plt
img = cv.imread('cat.jpg',1)#读取彩色图像
img2=img[:,:,::-1] #利用切片方法将bgr的存储顺序变成rgb顺序
plt.imshow(img2)
plt.xticks([]), plt.yticks([]) # 隐藏 x 轴和 y 轴上的刻度值
plt.show()
方法二:
import cv2
from matplotlib import pyplot as plt
img = cv.imread('cat.jpg',1)#读取彩色图像
cv2.cvtColor(img, cv2.COLOR_BGR2RGB)#使用opencv函数进行转换
plt.imshow(img2)
plt.xticks([]), plt.yticks([]) # 隐藏 x 轴和 y 轴上的刻度值
plt.show()
上述两种方式分别采用了数组索引与切片的方法、Opencv色彩空间转换函数cv.cvtColor()将BGR的存储顺序转化为RGB顺序,以使Matplotlib可以正确显示图片。
这篇文章是我学习Opencv中文官方文档的开篇,也同样是我在CSDN记录自己学习过程的开始,文中涉及到的讲解掺杂了我自己的理解,肯定有不详尽甚至错误之处,如果确实存在的话请一定在评论区指出,感激不尽!