读入图像
cv2.imread():
图像变量 = cv2.imread(‘图片路径’,第二参数)
第二参数 = cv2.IMREAD_COLOR 或者 > 0: 读入一副彩色图像。图像的α通道会被忽略, 这是默认参数。
第二参数 = cv2.IMREAD_GRAYSCALE 或者 = 0: 以灰度模式读入图像
第二参数 = cv2.IMREAD_UNCHANGED 或者 < 0: 读入一幅图像,并且包括图像的α通道(透明度)
另外flag在-1~3有宏定义:
第二参数 =-1,8位深度,原通道(有透明度)
第二参数 = 0,8位深度,1通道
第二参数 = 1, 8位深度,3通道
第二参数 = 2,原深度, 1通道
第二参数 = 3, 原深度, 3通道
需要额外注意的是OpenCV中的颜色通道顺序是BGR,而不是RGB
显示图像
cv.imshow('窗口名', 图像变量):只要窗口名不重复就可以一直创建
cv.waitKey(ms) : 是一个键盘绑定的函数,按下任何键则返回那个键的ASCII码,否则返回-1,函数的参数用于指定函数运行多少毫秒,如果参数为0则会一直检测
cv2.destroyWindow('窗口名'):删除特定的窗口
cv2.destroyAllWindows():删除我们建立的所有窗口
当然你也可以先建一个空窗口再加载图像:
cv2.namedWindow(‘窗口名’,flag):
对于第二参数
flag = cv2.WINDOW_AUTOSIZE 窗口大小和图像大小一致
flag = cv2.WINDOW_NORMAL 窗口大小可调
cv2.resizeWindow(‘窗口名’, 宽, 高): 调整窗口大小
当出现下面的错误时:
cv2.error: OpenCV(3.4.5) C:\projects\opencv\python\opencv\modules\highgui\src\window.cpp:358:
error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'cv::imshow'
表示在图片读入时出现错误,图像变量为空,有可能是文件名错误或者地址错误造成的
保存图像
cv2.imwrite('图像文件地址',图像变量) :将图像变量保存到指定位置的指定文件中
最后给一个结合所有函数的例子:
import cv2
import numpy as np
from matplotlib import pyplot as plt
for i in range(-1, 4):
img = cv2.imread('test2.png', i) # 选择自己的图片
WindowName = 'image' + str(i) # 使每个窗口名不同
cv2.namedWindow(WindowName, cv2.WINDOW_AUTOSIZE) # 建立空窗口
cv2.imshow(WindowName, img)
# cv2.resizeWindow(WindowName, 500, 312) # 定义窗口大小
k = cv2.waitKey(0) # 始终检测键盘
if k == 27: # 按ESC退出
cv2.destroyAllWindows()
elif k == ord('s'): # 按s保存
cv2.imwrite(WindowName+'.png', img)
cv2.destroyAllWindows()
elif k == ord('p'): # 按p用matplotlib打开
rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 将opencv用的的BGR通道顺序变为plt用的RGB顺序
plt.imshow(rgb)
plt.xticks([]), plt.yticks([])
plt.show()