Python中 matplotlib和opencv读取图片返回通道不同的原因和解决方法

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)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值