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引用DLL文件的方法
May 11 Python
python itchat实现微信好友头像拼接图的示例代码
Aug 14 Python
python实现顺序表的简单代码
Sep 28 Python
python实现远程控制电脑
May 23 Python
python绘制双Y轴折线图以及单Y轴双变量柱状图的实例
Jul 08 Python
pytorch获取模型某一层参数名及参数值方式
Dec 30 Python
Python json读写方式和字典相互转化
Apr 18 Python
Python selenium爬取微博数据代码实例
May 22 Python
Python趣味实例,实现一个简单的抽奖刮刮卡
Jul 18 Python
安装python依赖包psycopg2来调用postgresql的操作
Jan 01 Python
Python实现socket库网络通信套接字
Jun 04 Python
Python字典和列表性能之间的比较
Jun 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
《魔兽世界》惊魂幻象将获得调整
2020/03/08 其他游戏
关于文本留言本的分页代码
2006/10/09 PHP
抓取并下载CSS中所有图片文件的php代码
2011/09/26 PHP
又一个PHP实现的冒泡排序算法分享
2014/08/21 PHP
php获取ip及网址的简单方法(必看)
2017/04/01 PHP
php引用和拷贝的区别知识点总结
2019/09/23 PHP
laravel-admin 在列表页添加自定义按钮的例子
2019/09/30 PHP
深入Javascript函数、递归与闭包(执行环境、变量对象与作用域链)使用详解
2013/05/08 Javascript
javascript实现图片跟随鼠标移动效果的方法
2015/05/13 Javascript
超精准的javascript验证身份证号的具体实现方法
2015/11/18 Javascript
Nodejs进阶:如何将图片转成datauri嵌入到网页中去实例
2016/11/21 NodeJs
详解jQuery事件
2017/01/13 Javascript
vue动态生成dom并且自动绑定事件
2017/04/19 Javascript
jQuery中each循环的跳出和结束实例
2017/08/16 jQuery
angular4 JavaScript内存溢出问题
2018/03/06 Javascript
AngularJS模态框模板ngDialog的使用详解
2018/05/11 Javascript
vue观察模式浅析
2018/09/25 Javascript
微信小程序自定义带价格显示日历效果
2018/12/29 Javascript
详解Vue组件之间通信的七种方式
2019/04/14 Javascript
LayUi使用switch开关,动态的去控制它是否被启用的方法
2019/09/21 Javascript
原生js实现文件上传、下载、封装等实例方法
2020/01/05 Javascript
JS定时器如何实现提交成功提示功能
2020/06/12 Javascript
js实现盒子滚动动画效果
2020/08/09 Javascript
[01:06:26]全国守擂赛第二周 Team Coach vs DeMonsTer
2020/04/28 DOTA
Python 面向对象 成员的访问约束
2008/12/23 Python
Python help()函数用法详解
2014/03/11 Python
bpython 功能强大的Python shell
2016/02/16 Python
python anaconda 安装 环境变量 升级 以及特殊库安装的方法
2017/06/21 Python
python 通过 socket 发送文件的实例代码
2018/08/14 Python
nginx搭建基于python的web环境的实现步骤
2020/01/03 Python
css3遮罩层镂空效果的多种实现方法
2020/05/11 HTML / CSS
美国汽车交易网站:Edmunds
2016/08/17 全球购物
优秀学生事迹材料
2014/02/08 职场文书
公司党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
教师辞职信范文
2015/02/28 职场文书
使用CSS实现一个搜索引擎的原理解析
2021/09/25 HTML / CSS