苏州集团网站设计定制/微信营销方式
1 问题
前几天在使用matplotlib.image.imread()函数进行读取的时候,想通过循环查看图片里面的RGB矩阵分布的时候:
import matplotlib.image as pim
img = pim.imread('2007_000033.png')
for i in img:print(i)
发现矩阵里面惊现小数,如下图(矩阵读取的部分结果):
2 解决
我百思不得其解,直接把读取图片接口换成cv2.imread():
import cv2
img_bgr = cv2.imread('2007_000033.png')
# 使用cv2接口读出来的格式是BGR的,需要转成RGB
img_rgb = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB)
for i in img_rgb:print(i)
发现正常显示了RGB整数的分布,如下图(矩阵读取的部分结果):
3 分析
为何出现这样?我分析了一波,会不会是使用matplotlib.image.imread()读取图片返回的时候它自动对图片进行归一化处理了?为了验证,我先使用cv2.imread()读取图片并且对其进行归一化处理,然后用matplotlib.image.imread()读取图片,判断二者是否相等。代码如下:
import matplotlib.image as pim
import cv2
img_bgr = cv2.imread('2007_000033.png')
img1 = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB)/255.0
img2 = pim.imread(‘2007_000033.png’)
print(img1==img2)
结果显示如下图(矩阵读取的部分结果):
结果全为True。所以,说明matplotlib.image.imread()在读取图像的时候顺便归一化了。
更多参考
https://blog.csdn.net/weixin_44850744/article/details/124759278