Image.open()_image.open函数

Image.open()_image.open函数文章目录1导入库2图像读取3读入图片类型4通道5显示方法6相互转换Image.open()和ci2.imread()都是用来读取的图像,但在使用过程中存在一些差别。具体,可以从以下几个角度进行分析:1导入库导入的包不同。img=cv2.imread(path),这是opencv中的处理图片的函数,使用时需importcv2img=Image.open(path),这是PIL中的一个处理图片的函数,使用时需fromPILimportImage#opencv-py

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

Image.open()和ci2.imread()都是用来读取的图像,但在使用过程中存在一些差别。具体,可以从以下几个角度进行分析:

1 导入库

导入的包不同。
img = cv2.imread(path),这是opencv中的处理图片的函数,使用时需 import cv2
img = Image.open(path),这是PIL中的一个处理图片的函数,使用时需 from PIL import Image

# 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’,

cv2.imread()读取的是图像的真实数据。Image.open()函数只是保持了图像被读取的状态,但是图像的真实数据并未被读取,因此如果对需要操作图像每个元素,如输出某个像素的RGB值等,需要执行对象的load()方法读取数据。具体如下:

img = Image.open("lena.jpg")
img = img.load()
print(img[0,0])
# result:(255, 201, 166)

3 读入图片类型

Image.open()得到的img数据类型呢是Image对象,不是普通的数组。
cv2.imread()得到的img数据类型是np.array()类型。

4 通道

对于Image.open()函数默认彩色图像读取通道的顺序为RGB,而cv2.imread()读取通道的顺序为BGR。同时,当图像格式为RGBA时,Image.open(‘—.jpg’)读取的格式为RGBA(其中A表示图像的alpha通道,即RGBA共四个通道),而cv2.imread(’—.jpg’)读取的格式是BGR,只有三个通道。
通过使用cv2.split(img)可得到cv2.imread()读取的图片img的BGR通道值。即使图片是RGBA四通道,cv2.imread()方法仍然读取的是BGR三通道。

5 显示方法

图像显示时常见方法有两种,一种是matplotlib的plt.imshow()方法,一种是opencv的cv2.imshow()。两个函数的输入都要求是数组。因此Image读取的图片要先转化为数组,再进行图片的显示。plt函数读入的顺序为RGB,cv2.imshow()读入的顺序是BGR。因此image与plt.imshow()配合使用,opencv的方法配套使用。

6 相互转换

#1.Image对象->cv2(np.adarray)

img = Image.open(path)

img_array = np.array(img)


#2.cv2(np.adarray)->Image对象

img = cv2.imread(path)

img_Image = Image.fromarray(np.uint8(img))
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/181944.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • realsense深度图像保存方法

    realsense深度图像保存方法一般使用realsense时会保存视频序列,当保存深度图像时,需要注意保存的图像矩阵的格式,不然可能造成深度值的丢失。在众多图像库中,一般会使用opencv中的imwrite()函数进行深度图像的保存。一般深度图像中深度值的单位是mm,因此一般使用np.uint16作为最终数据格式保存。例子:importnumpyasnpimportcv2deffun1(…

  • dubbo原理详解_dubbo的作用

    dubbo原理详解_dubbo的作用alibaba有好几个分布式框架,主要有:进行远程调用(类似于RMI的这种远程调用)的(dubbo、hsf),jms消息服务(napoli、notify),KV数据库(tair)等。这个框架/工具/产品在实现的时候,都考虑到了容灾,扩展,负载均衡,于是出现一个配置中心(ConfigServer)的东西来解决这些问题。基本原理如图: 在我们的系统中,经常会有一些跨

    2022年10月29日
  • hbase rowkey设计原则 和为什么nosql查询速度快「建议收藏」

    hbase rowkey设计原则 和为什么nosql查询速度快「建议收藏」hbase rowkey设计原则 和为什么nosql查询速度快

  • window location href页面跳转的几种用法及其延展「建议收藏」

    window location href页面跳转的几种用法及其延展「建议收藏」一、location.href常见的几种形式self.location.href;//当前页面打开URL页面 window.location.href;//当前页面打开URL页面 this.location.href;//当前页面打开URL页面 location.href;//当前页面打开URL页面 parent.location.href;//在父页面打开新页面 top.loca…

  • socket通讯原理及例程(一看就懂)

    socket通讯原理及例程(一看就懂)对TCP/IP、UDP、Socket编程这些词你不会很陌生吧?随着网络技术的发展,这些词充斥着我们的耳朵。那么我想问:什么是TCP/IP、UDP?Socket在哪里呢?Socket是什么呢?你会使用它们吗?什么是TCP/IP、UDP?TCP/IP(TransmissionControlProtocol/InternetProtocol)即传输控制协议/网间协议…

  • java中输出数组元素的方法[通俗易懂]

    java中输出数组元素的方法[通俗易懂]定义一个数组:int[]array=newint{5,2,3,8};方法一:for(inti=0;i<array.length){ System.out.println(array[i]);}方法二:importjava.util.Arrays;System.out.println(Array.toString(array))方法三:…

    2022年10月11日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号