python OpenCV学习笔记(一):图片加载、展示、存储

官方文档 – https://docs.opencv.org/3.4.0/dc/d2e/tutorial_py_image_display.html

读取图片 cv.imread()

cv.imread(filename[, flags])
filename:为完整图片路径,图片在工作目录下则填写图片名(图片路径错误,则返回None值)
flags:提供以下三种(用属性或者数字)

  • cv.IMREAD_COLOR:默认选项,加载彩色图片,忽略透明度(可用数字1代替)
  • cv.IMREAD_GRAYSCALE:用灰度模式加载图像(可用数字0代替)
  • cv.IMREAD_UNCHANGED:加载图像,包括alpha通道(可用数字-1代替)
import cv2 as cv

# Load an color image in grayscale
img = cv.imread('test.jpg', 0)

展示图片cv.imshow()

cv.imshow(winname, mat)
winname:图片窗口名称
mat:图片

cv.imshow('image', img)
cv.waitKey(0)
cv.destroyAllWindows()

cv.waitKey()是一个键盘绑定函数retval = cv.waitKey([, delay]),参数delay<=0时无限等待,参数单位为毫秒
cv.destroyAllWindows()关闭所有窗口
cv.destroyWindow(winname)关闭指定窗口
cv.namedWindow(winname[, flags])创建一个指定名字的空窗口,类似占位符,flags提供以下选择:

  • WINDOW_NORMAL:允许手动调整窗口大小
  • WINDOW-AUTOSIZE:结合imshow会自动调整窗口大小,不允许手动调整
  • WINDOW_FREERATIO:可以对图像窗口进行调整,不考虑比例
  • WINDOW_KEEPRATIO:调整时保持图像比例
  • WINDOW_GUI_NORMAL:在没有状态栏和工具栏的情况下绘制窗口的老方法
  • WINDOW_GUI_EXPANDED:后者是一个新增强的GUI
    By default, flags == WINDOW_AUTOSIZE | WINDOW_KEEPRATIO | WINDOW_GUI_EXPANDED
cv.namedWindow('image', cv.WINDOW_NORMAL)
cv.imshow('image', img)
cv.waitKey(0)
cv.destroyAllWindows()

写入图片cv.imwrite()

cv.imwrite(filename, img[, params])
filename:文件名
img:保存的图片
params:特定格式,详见cv::ImwriteFlags

cv.imwrite('messigray.png', img)

结合练习

灰度模式加载并展示一张彩色图片,如果按下’s’键,则保存并退出,按下ESC则仅退出

import cv2 as cv

img = cv.imread('test.jpg', 0)
cv.imshow('image', img)
k = cv.waitKey(0)
if k == 27:
    cv.destroyAllWindows()
elif k == ord('s'):
    cv.imwrite('messigray.png', img)
    cv.destroyAllWindows()

附加:使用Matplotlib

import cv2 as cv
from matplotlib import pyplot as plt

img = cv.imread('messi5.jpg', 0)
plt.imshow(img, cmap='gray', interpolation='bicubic')
plt.xticks([]), plt.yticks([])  # 隐藏x、y轴上的刻度值
plt.show()

注意:OpenCV加载的彩色图像在BGR模式下。但是,Matplotlib显示在RGB模式下。因此,如果图像是用OpenCV读取的,那么在Matplotlib中不会正确显示彩色图像。

解决方法:

import cv2 as cv
from matplotlib import pyplot as plt

img = cv.imread('test.jpg')
b, g, r = cv.split(img)
img2 = cv.merge([r, g, b])
plt.imshow(img2)
plt.show()

你可能感兴趣的:(OpenCV)