【数字图像处理】OpenCV中cv2.imread()与PIL中Image.open()的差别
cv2.imread()与PIL中Image.open()两个函数都是用来读取图像,但是在使用过程存在一些差别。
1. 首先,从导入库方面看:
# opencv-python
import cv2 # PIL
from PIL import Image
2. 读取图像
# opencv-python
img = cv2.imread('' ---.jpg'')
img = cv2.imread('' ---.jpg'', flages=cv2.IMREAD_GRAYSCALE) # flags是可选读入模式,如灰度图等,默认为None # PIL
img = Image.open("---.jpg")
img = Image.open("---.jpg", mode=‘r’ ) # mode只能并且默认是‘r’,未查阅到相关资料,暂时不清楚具体代表什么。
值得注意的是,在文档中对Image.open()函数的描述如下:
Opens and identifies the given image file.
This is a lazy operation; this function identifies the file, but
the file remains open and the actual image data is not read from
the file until you try to process the data (or call the
:py:meth:`~PIL.Image.Image.load` method). See
:py:func:`~PIL.Image.new`. See :ref:`file-handling`.
Image.open()函数只是保持了图像被读取的状态,但是图像的真实数据并未被读取,因此如果对需要操作图像每个元素,如输出某个像素的RGB值等,需要执行对象的load()方法读取数据。具体如下:
img = Image.open("lena.jpg")
img = img.load()
print(img[0,0])
# result:(255, 201, 166)
3. 默认读入图像通道
对于Image.open()函数默认真彩图像读取通道顺序为RGB,而cv2.imread()则是BGR。同时,当图像格式为RGBA时,Image.open(‘---.jpg’)读取的格式为RGBA(其中A表示图像的alpha通道,即RGBA共四个通道),而cv2.imread('---.jpg')读取的格式是BGR,只有三个通道。
(1)
import cv2
from PIL import Image
img = cv2.imread(r"F:\DailyPractice\AffectiveComputing\ck+_dataset\1_17_0.png")
b, g, r = cv2.split(img)
img = Image.open(r"F:\DailyPractice\AffectiveComputing\ck+_dataset\1_17_0.png")
print(img.mode)
结果如下:
RGBA
(2)
import cv2
from PIL import Image
img = cv2.imread(r"----.jpg")
b, g, r, _ = cv2.split(img)
print(img)
img = Image.open(r"----.jpg"")
print(img.mode)
报错信息如下:
Traceback (most recent call last):
File "(此处为当前运行脚本名称及路径,已被删除)", line 122, in <module>
b, g, r, _ = cv2.split(img)
ValueError: not enough values to unpack (expected 4, got 3)
报错提示 cv2.split(img)只返回三个返回参数,但是‘=’左边却有四个接收变量。而(1)是正确的,故 cv2.imread(r"----.jpg")对于RGBA图像只读取了BGR三个通道。
参考文献
【1】https://www.cnblogs.com/lyrichu/p/9124504.html
【数字图像处理】OpenCV中cv2.imread()与PIL中Image.open()的差别的更多相关文章
- Python图像处理库PIL中图像格式转换
o 在数字图像处理中,针对不同的图像格式有其特定的处理算法.所以,在做图像处理之前,我们需要考虑清楚自己要基于哪种格式的图像进行算法设计及其实现.本文基于这个需求,使用python中的图像处理库PIL ...
- Python图像处理库PIL中图像格式转换(一)
在数字图像处理中,针对不同的图像格式有其特定的处理算法. 所以,在做图像处理之前,我们须要考虑清楚自己要基于哪种格式的图像进行算法设计及事实上现.本文基于这个需求.使用python中的图像处理库PIL ...
- cv2.imread BGR模式
openCV 的cv2.imread()导入图片时是BGR通道顺序,这与Matplotlib的显示,或者读取图片的通道不同,如果需要可以转换为RGB模式,以下代码显示不同之处,但BGR在许多地方使用, ...
- OpenCV中cv2的用法
一.读入图像 使用函数cv2.imread(filepath,flags)读入一副图片 filepath:要读入图片的完整路径 flags:读入图片的标志 cv2.IMREAD_COLOR:默认参数 ...
- 数字图像处理作业使用OpenCV - 使用笔记
数字图像处理作业的输入图像全部都是灰度图像,所以汇总一下自己遇到的问题答案. OCV的图像容器是Mat<typename>,可以用imread(filename)读取图像,filename ...
- 数字图像处理技术在TWaver可视化中的应用
数字图像处理(Digital Image Processing)又称为计算机图像处理,它是指将图像信号转换成数字信号并利用计算机对其进行处理的过程.常用的图像处理方法有图像增强.复原.编码.压缩等,数 ...
- Python图像处理库:PIL中Image,ImageDraw等基本模块介绍
Python图像处理库:PIL中Image,ImageDraw等基本模块介绍 标签: 图像处理PILPYTHON 2016-08-19 10:58 461人阅读 评论(0) 收藏 举报 分类: 其他 ...
- Win8Metro(C#)数字图像处理--2.10图像中值滤波
原文:Win8Metro(C#)数字图像处理--2.10图像中值滤波 [函数名称] 图像中值滤波函数MedianFilterProcess(WriteableBitmap src) [函数代码] ...
- 在Python中使用OpenCV(CV2)对图像进行边缘检测
转载:https://blog.csdn.net/cumtb2002/article/details/107798767 Modules used: 使用的模块: For this, we will ...
随机推荐
- 状态压缩DP(大佬写的很好,转来看)
奉上大佬博客 https://blog.csdn.net/accry/article/details/6607703 动态规划本来就很抽象,状态的设定和状态的转移都不好把握,而状态压缩的动态规划解决的 ...
- ACM-ICPC 2019 山东省省赛D Game on a Graph
Game on a Graph Time Limit: 1 Second Memory Limit: 65536 KB There are people playing a game on a con ...
- grep 如何自动标注颜色
首先 最后一行加入 保存 然后source ~/.bashrc 然后来试一下效果
- JavaWeb实战:报价计算系统(layui+tomcat+cookie实现)
JavaWeb实战:报价计算系统(layui+tomcat+cookie实现) 系统概述: 该系统是文物物流公司的一个小功能模块,用于帮助用户计算运费.点击查看实际效果 系统文档: 添加展品: 在表单 ...
- 分布式锁-Redission-Lock锁的使用与原理
环境准备 添加 Maven 依赖 <dependency> <groupId>org.redisson</groupId> <artifactId>re ...
- C# 获取从1月至12月的月初时间和月末时间
public IActionResult GetMonthData() { var dataList = new List<object>(); var currentMonth = Da ...
- SpringBoot基础实战系列(三)springboot单文件与多文件上传
springboot单文件上传 对于springboot文件上传需要了解一个类MultipartFile ,该类用于文件上传.我此次使用thymeleaf模板引擎,该模板引擎文件后缀 .html. 1 ...
- angular js 页面添加数据保存数据库
一.编写实体类Controller层返回数据使用 package entity; import java.io.Serializable; public class Result implements ...
- webpack指南(三)缓存
缓存 把 /dist 目录中的内容部署到服务器上,客户端(通常是浏览器)就能够访问网站此服务器的网站及其资源.而通过网络获取资源是比较耗时的,这就是为什么浏览器要使用缓存这种技术.可以通过命中缓存,以 ...
- 用JetBrains PyCharm 开发工具写一个简单python案例
import urllib.request import re #解析html的内容 def getHtml(url): page=urllib.request.urlopen(url) html=p ...