matplotlib.image 和 cv2.imread 的区别

Hit*_*esh 3 python opencv matplotlib python-3.x

当我使用 matplotlib.image 读取灰度图像时,它显示尺寸 (512,512) 和类型 (float32),但是当我对同一图像使用 cv2.imread 时,它显示 (512,512,3) 并键入 uint8。为什么会这样?由于默认标志,cv2.imread 命令是否自动将图像转换为 BGR 格式。(我使用的是 python 3 和 opencv2。)以下是代码:

import cv2
import matplotlib.image as mpimage
img = cv2.imread('image_1.png')
img1=mpimage.imread('image_1.png')
Run Code Online (Sandbox Code Playgroud)

GPP*_*PPK 5

是的,默认情况下它读取 BGR,如果您想读取灰度图像,您需要使用 imread 中的第二个参数。从文档

读取图像

使用函数 cv2.imread() 读取图像。图像应该在工作目录中,或者应该给出图像的完整路径。

第二个参数是一个标志,它指定应该读取图像的方式。

  1. cv2.IMREAD_COLOR :加载彩色图像。图像的任何透明度都将被忽略。它是默认标志。
  2. cv2.IMREAD_GRAYSCALE : 以灰度模式加载图像
  3. cv2.IMREAD_UNCHANGED : 加载图像,包括 alpha 通道 注意代替这三个标志,您可以分别简单地传递整数 1、0 或 -1。

请参阅下面的代码:

import numpy as np import cv2

#Load an color image in grayscale 
img = cv2.imread('messi5.jpg',0)
Run Code Online (Sandbox Code Playgroud)

因此,如果您想在默认情况下读取灰度图像,则需要将 imread 中的第二个参数设为 1,而不是 0。对以下代码的细微更改应在两种情况下以相同的图像格式读取

import cv2
import matplotlib.image as mpimage
img = cv2.imread('image_1.png', 1)
img1=mpimage.imread('image_1.png')
Run Code Online (Sandbox Code Playgroud)