opencv——图像的读取、展示、保存

  • Post author:
  • Post category:其他




读取图像

注意:路径不能有中文,否则读取图像返回的结果为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



版权声明:本文为qq_40884357原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。