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 相关文章推荐
通过5个知识点轻松搞定Python的作用域
Sep 09 Python
Python中几种导入模块的方式总结
Apr 27 Python
python3+dlib实现人脸识别和情绪分析
Apr 21 Python
python使用tornado实现简单爬虫
Jul 28 Python
Pycharm无法使用已经安装Selenium的解决方法
Oct 13 Python
python实现大转盘抽奖效果
Jan 22 Python
python简单贪吃蛇开发
Jan 28 Python
使用pandas 将DataFrame转化成dict
Dec 10 Python
python 实现将小图片放到另一个较大的白色或黑色背景图片中
Dec 12 Python
Python将QQ聊天记录生成词云的示例代码
Feb 10 Python
Python基础之元编程知识总结
May 23 Python
一篇文章弄懂Python中的内建函数
Aug 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实现动态执行代码的方法
2016/03/25 PHP
Thinkphp开发--集成极光推送
2017/09/15 PHP
PHP使用POP3读取邮箱接收邮件的示例代码
2020/07/08 PHP
javascript document.compatMode兼容性
2010/02/23 Javascript
JS特权方法定义作用以及与公有方法的区别
2013/03/18 Javascript
用js实现小球的自由移动代码
2013/04/22 Javascript
JS实现商品倒计时实现代码
2013/05/03 Javascript
DIV始终居中的js代码
2014/02/17 Javascript
一张表格告诉你windows.onload()与$(document).ready()的区别
2014/05/16 Javascript
canvas实现钟表效果
2017/02/13 Javascript
微信通过页面(H5)直接打开本地app的解决方法
2017/09/09 Javascript
bootstrap table sum总数量统计实现方法
2017/10/29 Javascript
json数据传到前台并解析展示成列表的方法
2018/08/06 Javascript
在 Angular-cli 中使用 simple-mock 实现前端开发 API Mock 接口数据模拟功能的方法
2018/11/28 Javascript
详解Webstorm 下的Angular2.0开发之路(图文)
2018/12/06 Javascript
小程序测试后台服务的方法(ngrok)
2019/03/08 Javascript
解决layui table表单提示数据接口请求异常的问题
2019/09/24 Javascript
vuex实现像调用模板方法一样调用Mutations方法
2019/11/06 Javascript
python抓取京东商城手机列表url实例代码
2013/12/18 Python
python如何通过实例方法名字调用方法
2018/03/21 Python
Python wxPython库消息对话框MessageDialog用法示例
2018/09/03 Python
如何用python写一个简单的词法分析器
2018/12/18 Python
Flask核心机制之上下文源码剖析
2018/12/25 Python
Pyqt5如何让QMessageBox按钮显示中文示例代码
2019/04/11 Python
Python实现扫码工具的示例代码
2020/10/09 Python
使用PDF.JS插件在HTML中预览PDF文件的方法
2018/08/29 HTML / CSS
MATCHESFASHION.COM美国官网:英国奢侈品零售商
2018/10/29 全球购物
美国翻新电子产品商店:The Store
2019/10/08 全球购物
平面设计师的工作职责
2013/11/21 职场文书
求职信范文英文版
2014/01/05 职场文书
《赠汪伦》教学反思
2014/04/12 职场文书
优秀学生干部先进事迹材料
2014/05/26 职场文书
房屋过户委托书范本
2014/10/07 职场文书
2015年十月一日放假通知
2015/08/18 职场文书
2016七夕情人节寄语
2015/12/04 职场文书
Python使用华为API为图像设置多个锚点标签
2022/04/12 Python