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中的type()方法的使用
May 21 Python
将Emacs打造成强大的Python代码编辑工具
Nov 20 Python
实例讲解Python中global语句下全局变量的值的修改
Jun 16 Python
Python 专题二 条件语句和循环语句的基础知识
Mar 19 Python
python3 读写文件换行符的方法
Apr 09 Python
对Python字符串中的换行符和制表符介绍
May 03 Python
Flask框架实现给视图函数增加装饰器操作示例
Jul 16 Python
Python3操作Excel文件(读写)的简单实例
Sep 02 Python
Python单链表原理与实现方法详解
Feb 22 Python
Python3 selenium 实现QQ群接龙自动化功能
Apr 17 Python
Python selenium模拟手动操作实现无人值守刷积分功能
May 13 Python
python中数组和列表的简单实例
Mar 25 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中Date获取时间不正确怎么办
2008/06/05 PHP
PHP中isset与array_key_exists的区别实例分析
2015/06/02 PHP
AJAX PHP无刷新form表单提交的简单实现(推荐)
2016/09/09 PHP
php-fpm中max_children的配置
2019/03/15 PHP
纯js写的分页表格数据为json串
2014/02/18 Javascript
用jquery的方法制作一个简单的导航栏
2014/06/23 Javascript
jquery专业的导航菜单特效代码分享
2015/08/29 Javascript
bootstrap制作jsp页面(根据值让table显示选中)
2017/01/05 Javascript
浅谈React高阶组件
2018/03/28 Javascript
用node撸一个监测复联4开售短信提醒的实现代码
2019/04/10 Javascript
浅谈一种让小程序支持JSX语法的新思路
2019/06/16 Javascript
Webpack3+React16代码分割的实现
2021/03/03 Javascript
[27:28]Ti4 冒泡赛第二天 iG vs NEWBEE 1
2014/07/15 DOTA
[55:35]DOTA2-DPC中国联赛 正赛 CDEC vs Dragon BO3 第二场 1月22日
2021/03/11 DOTA
python实现类似ftp传输文件的网络程序示例
2014/04/08 Python
Python的Django框架中settings文件的部署建议
2015/05/30 Python
python3实现UDP协议的服务器和客户端
2017/06/14 Python
Tensorflow 利用tf.contrib.learn建立输入函数的方法
2018/02/08 Python
python制作简单五子棋游戏
2019/06/18 Python
Python中filter与lambda的结合使用详解
2019/12/24 Python
python中判断文件结束符的具体方法
2020/08/04 Python
Python实现JS解密并爬取某音漫客网站
2020/10/23 Python
python利用opencv保存、播放视频
2020/11/02 Python
html5开发三八女王节表白神器
2018/03/07 HTML / CSS
EJB实例的生命周期
2016/10/28 面试题
数学系毕业生求职信
2014/05/29 职场文书
法人委托书范本
2014/09/15 职场文书
违纪检讨书
2015/01/27 职场文书
幼儿园小班工作总结2015
2015/04/25 职场文书
闪闪红星观后感
2015/06/08 职场文书
养成教育工作总结
2015/08/13 职场文书
iPhone13再次曝光
2021/04/15 数码科技
pandas提升计算效率的一些方法汇总
2021/05/30 Python
只用50行Python代码爬取网络美女高清图片
2021/06/02 Python
C3 线性化算法与 MRO之Python中的多继承
2021/10/05 Python
使用 CSS 轻松实现一些高频出现的奇形怪状按钮
2021/12/06 HTML / CSS