文章目录
- 读取图像
- 展示图像
- 固定窗口读取
- 改变通道顺序,将BGR转为RGB
- 修改窗口的大小
- 保存图像
- 销毁窗口
- 输入任意键都销毁窗口
- 特定的键销毁窗口
读取图像
注意:路径不能有中文,否则读取图像返回的结果为None,不会报错
import cv2 as cv
img = cv.imread('.\图像\img.png')
print(img) # 返回None,因为在路径中不能有中文
img_ = cv.imread('.\img\img.png')
print(img_) # 返回像素值
参数介绍:def imread(filename, flags=None):
- filename:图像的路径
- flags=None:表示如何读取这幅图片,下面介绍介绍一下有哪些方法,这些方法既可以使用前面的值,也可以使用后面的数字代替。
flags | 含义 |
cv.IMREAD_ANYCOLOR=4 | 原图读取 |
cv.IMREAD_ANYDEPTH = 2 | 不论什么位深度。如果载入的图像是16-bit位图或者32-bit位图。则转化为8-bit位图。 |
cv.IMREAD_COLOR=1 | 读入一副彩色图像。图像的透明度会被忽略,这是默认参数。 |
cv.IMREAD_GRAYSCALE=0 | 以灰度模式读入图像 |
cv.IMREAD_LOAD_GDAL=8 | 使用gdal驱动程序加载图像。 |
cv.IMREAD_UNCHANGED=-1 | 不改变读取的是原图。读入一幅图像,并且包括图像的 alpha 通道 |
展示图像
固定窗口读取
opencv读取的图像是BGR格式,框的大小是图像的大小,不可以改变
import cv2 as cv
img_ = cv.imread('.\img\img.png')
cv.imshow('img',img_)
cv.waitKey(0) # 等待
cv.destroyAllWindows() # 销毁所有的窗口
参数介绍:def imshow(winname, mat):
- winname:窗口的名字
- mat:需要展示的图像
改变通道顺序,将BGR转为RGB
import matplotlib.pyplot as plt
import cv2 as cv
# 转换格式,将BGR转为RGB
img_ = cv.imread('.\img\img.png')
# 方法1
img = cv.cvtColor(img_,cv.COLOR_BGR2RGB)
# 方法2
b,g,r = cv.split(img) # 先拆分通道
img2 = cv.merge([r,g,b]) # 将拆分的通道按照RGB格式合并
plt.imshow(img)
plt.show()
修改窗口的大小
如果想修改窗口的大小,需要提前定义一个窗口,参数设置为cv.WINDOW_NORMAL
import cv2 as cv
cv.namedWindow('image',cv.WINDOW_NORMAL) # 定义一个窗口
img_ = cv.imread('.\img\img.png')
cv.imshow('image',img_)
cv.waitKey(0)
cv.destroyAllWindows()
保存图像
import cv2 as cv
img_ = cv.imread('.\img\img.png')
cv.imwrite('output.jpg',img_)
销毁窗口
- cv.waitKey()
是一个键盘绑定函数。需要指出的是它的时间尺度是毫秒级。函数等待特定的几毫秒,看是否有键盘输入。特定的几毫秒之内,如果按下任意键,这个函数会返回按键的 ASCII 码值,程序将会继续运行。如果没有键盘输入,返回值为 -1,如果我们设置这个函数的参数为 0,那它将会无限期的等待键盘输入。它也可以被用来检测特定键是否被按下,例如按键 a 是否被按下,这个后面我们会接着讨论。 - cv2.destroyAllWindows() :
可以轻易删除任何我们建立的窗口。删除所有的窗口 - cv2.destroyWindow()
删除指定的窗口在括号内输入你想删除的窗口名。
输入任意键都销毁窗口
cv.waitKey(0) # 一直等待,当有键盘输入就会触发事件,执行下面的销毁窗口
cv.destroyAllWindows()
特定的键销毁窗口
while True:
i =cv.waitKey(0)
if i==27: # Esc的ASCII为27
cv.destroyAllWindows()
break
# 特定键销毁
while True:
i =cv.waitKey(0)
if i==ord('q'): # 按q键退出,ord函数可以计算ASCII
cv.destroyAllWindows()
break