详解OpenCV和PIL读取和显示图像的差异

 更新时间:2021年04月19日 08:39:46   作者:鸡啄米的时光机  
这篇文章主要介绍了OpenCV和PIL读取和显示图像的差异,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

本博客演示使用OpenCV和PIL读取和显示图像的差异。

首先来看一下原始的bgr图像 src.jpg

1. 使用cv2读取src.jpg并转为rgb格式的src_rgb.jpg并显示和保存

#首先读入并保存为rgb图像
src_path = 'C:\\Users\\Administrator\\Desktop\\cv2_PIL\\src.png' # bgr
img = cv2.imread(src_path)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
cv2.imshow('src_rgb.png', img)
cv2.imwrite('src_rgb.png', img)
cv2.waitKey(5000)

2. 使用cv2读取src_rgb.jpg并显示, 发现仍为rgb格式

# 读入rgb格式的图像并保存
src_path = 'C:\\Users\\Administrator\\Desktop\\cv2_PIL\\src_rgb.png' # rgb
img = cv2.imread(src_path)
cv2.imshow('src_rgb.png', img)
cv2.waitKey(5000)

由此可见cv2读取bgr格式图片为bgr格式读入;读取rgb格式图片为rgb格式读入。

3. 使用PIL读取src.jpg并显示

# 使用PIL读取bgr格式图片并显示
src_path = 'C:\\Users\\Administrator\\Desktop\\cv2_PIL\\src.png' # bgr
img = Image.open(src_path)#.convert("RGB")
print(img.mode)
img.show("src.png")

由此可见PIL读入bgr格式图片为读入后是rgb格式

4. 使用PIL读取src.jpg并转为numpy的array格式图片并显示

# 使用PIL读取bgr格式图片并显示
src_path = 'C:\\Users\\Administrator\\Desktop\\cv2_PIL\\src.png' # bgr
img = Image.open(src_path)#.convert("RGB")
print(img.mode)
img = np.array(img) # rgb
cv2.imshow("src.png",img)
cv2.waitKey(5000)

所以进一步坐实了PIL读入bgr格式图片为读入后是rgb格式

5. 使用PIL读取rgb格式src_rgb.jpg并显示

# 使用PIL读取rgb格式图片并显示
src_path = 'C:\\Users\\Administrator\\Desktop\\cv2_PIL\\src_rgb.png' # rgb
img = Image.open(src_path)#.convert("RGB")
print(img.mode)
# img1 = img.load()
# print(img1[0,0])
#img.show()
img = np.asarray(img) # bgr
#print(img)
cv2.imshow("src_.png",img)
cv2.waitKey(5000)

可见PIL读入rgb顺序图片后虽然为RGB格式,但是其实通道顺序为BGR格式图片

总结:

cv2读取BGR图片 img = cv2.imread('src.png'),其中img为BGR通道顺序的图片
cv2读取RGB图片 img = cv2.imread('src.png'),其中img为RGB通道顺序的图片
PIL读入BGR图片 img = Image.open('src.png'),显示img为RGBA格式,其中img为RGBA通道顺序的图片; img = img.convert('RGB')后,img为RGBA通道顺序的图片
PIL读入RGB图片 img = Image.open('src_rgb.png'),虽然显示img为RGB格式,但是img为通道顺序为BGR格式的图片。

到此这篇关于详解OpenCV和PIL读取和显示图像的差异的文章就介绍到这了,更多相关OpenCV和PIL读取和显示图像 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python写的英文字符大小写转换代码示例

    Python写的英文字符大小写转换代码示例

    这篇文章主要介绍了Python写的英文字符大小写转换代码示例,本文例子相对简单,本文直接给出代码实例,需要的朋友可以参考下
    2015-03-03
  • python中pyplot基础图标函数整理

    python中pyplot基础图标函数整理

    在本篇文章里小编给大家整理的是一篇关于python中pyplot基础图标函数整理的相关知识点,有兴趣的朋友们可以参考下。
    2020-11-11
  • Python的类实例属性访问规则探讨

    Python的类实例属性访问规则探讨

    这篇文章主要介绍了Python的类实例属性访问规则,本文总结了一些对C++和Java程序员来说不是很直观的地方来说明Python中的类实例属性访问,需要的朋友可以参考下
    2015-01-01
  • Python API自动化框架总结

    Python API自动化框架总结

    在本篇文章里小编给大家整理的是关于Python API自动化框架总结内容,需要的朋友们学习下。
    2019-11-11
  • pyinstaller打包遇到的问题解决

    pyinstaller打包遇到的问题解决

    本文主要介绍了pyinstaller打包遇到的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • 人工智能深度学习OpenAI baselines的使用方法

    人工智能深度学习OpenAI baselines的使用方法

    这篇文章主要为大家介绍了人工智能深度学习OpenAI baselines的使用方法,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • Flask之flask-session的具体使用

    Flask之flask-session的具体使用

    这篇文章主要介绍了Flask之flask-session的具体使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • 使用python实现哈希表、字典、集合操作

    使用python实现哈希表、字典、集合操作

    这篇文章主要介绍了使用python实现哈希表、字典、集合操作,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12
  • Python之print函数里逗号和加号的区别及说明

    Python之print函数里逗号和加号的区别及说明

    这篇文章主要介绍了Python之print函数里逗号和加号的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • python matplotlib画图时坐标轴重叠显示不全和图片保存时不完整的问题解决

    python matplotlib画图时坐标轴重叠显示不全和图片保存时不完整的问题解决

    最近工作中遇到了matplotlib保存图片坐标轴不完整的问题,所以这篇文章主要给大家介绍了关于python matplotlib画图时坐标轴重叠显示不全和图片保存时不完整问题的解决方法,需要的朋友可以参考下
    2022-07-07

最新评论