PIL.Image.open和cv2.imread的比较与相互转换的方法


Posted in Python onJune 03, 2020

摘要

PIL.Image.open读入的是RGB顺序,而opencv中cv2.imread读入的是BGR通道顺序 。cv2.imread会显示图片更蓝一些。

cv2.imread(path,读取方式)方法

第一个参数是图片的路径。

第二个参数是读取方式:cv2.IMREAD_COLOR:读入一副彩色图片;cv2.IMREAD_GRAYSCALE:以灰度模式读入图片;cv2.IMREAD_UNCHANGED:读入一幅图片,并包括其alpha通道。

默认为cv2.IMREAD_COLOR。

返回值是(height,width,channel)数组,channel的顺序是BGR顺序。

例:

import cv2
from PIL import Image
imagePath='4.jpg'
import matplotlib.pyplot as plt
cvImage=cv2.imread(imagePath)
print(cvImage.shape)
plt.subplot(121)
plt.imshow(cvImage)
plt.show()

PIL.Image.open和cv2.imread的比较与相互转换的方法

PIL.Image.open(path)方法

参数:图片的路径

返回值: <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=374x288 at 0x13EA15F7808>

需要用img=np.array(img)做转换,才能看到shape属性,是(height,width,channel)数组,channel的通道顺序为RGB。

例:

from PIL import Image

import numpy as np

imagePath='4.jpg'

import matplotlib.pyplot as plt

'''

cvImage=cv2.imread(imagePath)

print(cvImage.shape)

plt.subplot(121)

plt.imshow(cvImage)

plt.show()

'''

img=Image.open(imagePath)

img=np.array(img)

print(img.shape)

plt.imshow(img)

plt.show()

PIL.Image.open和cv2.imread的比较与相互转换的方法

二者之间的相互转化

主要用到的函数cv2.cvtColor(p1,p2) 是颜色空间转换函数,p1是需要转换的图片,p2是转换成何种格式。

本例用到的格式是cv2.COLOR_RGB2BGR和cv2.COLOR_BGR2RGB

代码:

def PILImageToCV(imagePath):
    # PIL Image转换成OpenCV格式
    img = Image.open(imagePath)
    plt.imshow(img)
    img = cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)
    plt.imshow(img)
    plt.show()

def CVImageToPIL(imagePath):
    # OpenCV图片转换为PIL image
    img = cv2.imread(imagePath)
    plt.imshow(img)
    img2 = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
    plt.imshow(img2)
    plt.show()

判断图像数据是否是OpenCV格式:

isinstance(img, np.ndarray)

到此这篇关于PIL.Image.open和cv2.imread的比较与相互转换的方法的文章就介绍到这了,更多相关PIL.Image.open和cv2.imread内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python实现冒泡,插入,选择排序简单实例
Aug 18 Python
使用70行Python代码实现一个递归下降解析器的教程
Apr 17 Python
Python中字典的基础知识归纳小结
Aug 19 Python
利用Python爬取可用的代理IP
Aug 18 Python
Python中pip更新和三方插件安装说明
Jul 08 Python
python 定时器,实现每天凌晨3点执行的方法
Feb 20 Python
Python button选取本地图片并显示的实例
Jun 13 Python
基于python plotly交互式图表大全
Dec 07 Python
Tensorflow不支持AVX2指令集的解决方法
Feb 03 Python
Python爬虫小例子——爬取51job发布的工作职位
Jul 10 Python
Python爬虫入门案例之爬取去哪儿旅游景点攻略以及可视化分析
Oct 16 Python
Python基本知识点总结
Apr 07 Python
Python3创建Django项目的几种方法(3种)
Jun 03 #Python
Django 实现 Websocket 广播、点对点发送消息的代码
Jun 03 #Python
使用python实现时间序列白噪声检验方式
Jun 03 #Python
部署Django到阿里云服务器教程示例
Jun 03 #Python
Python flask路由间传递变量实例详解
Jun 03 #Python
django的autoreload机制实现
Jun 03 #Python
浅谈python量化 双均线策略(金叉死叉)
Jun 03 #Python
You might like
PHP url 加密解密函数代码
2011/08/26 PHP
浅谈PHP与C#的值类型指向区别的详解
2013/05/21 PHP
基于php无限分类的深入理解
2013/06/02 PHP
PHP5.5和之前的版本empty函数的不同之处
2014/06/13 PHP
twig里使用js变量的方法
2016/02/05 PHP
js实现俄罗斯方块小游戏分享
2014/01/31 Javascript
举例讲解JavaScript substring()的使用方法
2015/11/09 Javascript
Javascript实现单例模式
2016/01/24 Javascript
vue与bootstrap实现时间选择器的示例代码
2017/08/26 Javascript
element-ui中el-upload多文件一次性上传的实现
2020/12/02 Javascript
vue绑定class的三种方法
2020/12/24 Vue.js
[01:32]2016国际邀请赛中国区预选赛IG战队首日赛后采访
2016/06/27 DOTA
[01:04:29]DOTA2-DPC中国联赛 正赛 Phoenix vs XG BO3 第二场 1月31日
2021/03/11 DOTA
Python自动化测试工具Splinter简介和使用实例
2014/05/13 Python
python网络编程学习笔记(一)
2014/06/09 Python
python之wxPython菜单使用详解
2014/09/28 Python
Python中操作符重载用法分析
2016/04/29 Python
Python使用Turtle模块绘制五星红旗代码示例
2017/12/11 Python
对Python中gensim库word2vec的使用详解
2018/05/08 Python
Python用于学习重要算法的模块pygorithm实例浅析
2018/08/16 Python
python实现在线翻译功能
2020/03/03 Python
解决python Jupyter不能导入外部包问题
2020/04/15 Python
python多线程实现同时执行两个while循环的操作
2020/05/02 Python
Python设计密码强度校验程序
2020/07/30 Python
使用CSS实现阅读进度条
2017/02/27 HTML / CSS
canvas离屏技术与放大镜实现代码示例
2018/08/31 HTML / CSS
Windows和Linux动态库应用异同
2016/07/28 面试题
施工人员岗位职责
2013/12/12 职场文书
给国外客户的邀请函
2014/01/30 职场文书
企业军训感言
2014/02/08 职场文书
合作意向书格式及范文
2014/03/31 职场文书
领导班子四风问题个人对照检查材料
2014/10/04 职场文书
幼儿园见习总结
2015/06/23 职场文书
python图像处理基本操作总结(PIL库、Matplotlib及Numpy)
2021/06/08 Python
MYSQL如何查看进程和kill进程
2022/03/13 MySQL
Java线程的6种状态与生命周期
2022/05/11 Java/Android