Python中 matplotlib和opencv读取图片返回的通道不同
使用双线性插值的方法初始化卷积层中卷积核的权重参数的时候,读取图片,发现报错:
RuntimeError: Given transposed=1, weight of size [3, 3, 4, 4],
expected input[1, 4, 900, 1600] to have 3 channels, but got 4 channels
instead
很奇怪,我的图像不是RGB3通道的吗
matplotlib和opencv读取不一致的图片 位深度32
matplotlib和opencv读取一致的图片 位深度24
最后看到一个博主的说明:
png图片比jpg多了一个Alpha通道, 一个RGB颜色模型的真彩图形,用由红、绿、蓝三个色彩信息通道合成的,每个通道用了8位色彩深度,共计24位,包含了所有彩色信息。为实现图形的透明效果,png图片采取在图形文件的处理与存储中附加上另一个8位信息的方法,这个附加的代表图形中各个素点透明度的通道信息就被叫做Alpha通道。
读取:
import cv2
import matplotlib.pyplot as plt
import numpy as np
# 32位深的图片 读取不一致
mat_img = plt.imread('2.png')
print(mat_img.shape)
cv2_img = cv2.imread('2.png')
print(cv2_img.shape)
print('===='*10)
cv2_img1 = cv2.imread('2.png', cv2.IMREAD_UNCHANGED) #读入完整图片,包括alpha通道,可用-1作为实参替代
print(cv2_img1.shape)
# 24位深的图片 读取一致
print('===='*10)
mat_img = plt.imread('1.jpg')
print(mat_img.shape)
cv2_img = cv2.imread('1.jpg')
print(cv2_img.shape)
输出:
(900, 1600, 4)
(900, 1600, 3)
========================================
(900, 1600, 4)
========================================
(240, 384, 3)
(240, 384, 3)