opencv、pillow和matplotlib的区别

考文章:Python学习小技巧——opencv、pillow和matplotlib的区别_pillow和opencv区别-CSDN博客

1 概念的比较:

opencv
(1)默认不支持中文文件名
(2)数据为numpy,维度:高,宽,通道数,通道序:BGR
(3)显示完后要cv2.destroyAllWindows()
(4)读取图片时与pillow速度差不多

pillow
(1)python原生支持最好,各种操作都很方便,pytorch内部使用的就是pillow
(2)读入的是一个Image类,size的顺序:宽,高,通道序RGB
(3)保存图片时比opencv
(4)在大量图片数据读写时可以优先考虑pillow

matplotlib
(1)读入数据格式最为便准,numpy格式,维度:高,宽,通道数,通道序:RGB
(2)交互模式中只要用plt.imshow()就直接显示图片了,脚本模式中要多加一句plt.show()
(3)opencv转matplotlib时rgb_img = cv2.cvtColor(cv_img, cv2.COLOR_BGR2RGB)
(4)可以制作坐标图
 

英文可以用OpenCV直接在画面上显示,中文需要Pillow去写字

2 OpenCV处理图片

opencv读、写以及展示图片等操作
import cv2# opencv读、写以及展示图片等操作
image = cv2.imread(r"000000.jpg")                            # 读取图片
cv2.namedWindow('img1', cv2.WINDOW_NORMAL)                   # 建立名为img的窗口
cv2.imshow('img1', image)                                    # 在ing窗口展示图片
cv2.waitKey(2000)                                            # 2s后自动销毁
cv2.imwrite(r"1.png", image)                                 # 写入图片
GrayImage = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)          # 灰度化
cv2.namedWindow('img2', cv2.WINDOW_NORMAL)
cv2.imshow('img2', GrayImage)
cv2.waitKey(2000)  
cv2.destroyAllWindows()                                      # 关闭全部窗口
cv2.imwrite(r"2.png", GrayImage)

输出结果如图示:
在这里插入图片描述

 opencv读取图片的形状、大小、编码格式及数据类型等
import cv2image = cv2.imread(r"000000.jpg")                       # 读取图片
GrayImage = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)     # opencv读取图片默认为BGR格式,灰度化
print(image.shape)                                      # opencv读取图片的shape为高、宽、通道数
print(image.size)                                       # opencv读取图片的size为像素和
print(GrayImage.shape)                                  # opencv读取灰度图的shape为高、宽(通道数默认为1不显示)
print(GrayImage.size)                                   # opencv读取灰度图的size为像素和
print(image.dtype)                                      # opencv读取图片的编码格式
print(GrayImage.dtype)                                  # opencv读取灰度图的编码格式
print(type(image))                                      # opencv读取图片的数据类型
print(type(GrayImage))                                  # opencv读取灰度图的数据类型
# print(image)                                          # opencv读取图片的图片数据
# print(GrayImage)                                      # opencv读取灰度图的图片数据

输出结果如图示:

 3 pillow处理图片

读、写以及展示图片等操作
from PIL import Image# pillow读、写以及展示图片等操作
img = Image.open("000000.jpg").convert('RGB')     # pillow默认RGB格式
img.show()                                        # 展示图片
img.save("img1")                                  # 保存图片img1
Grayimg = Image.open("000000.jpg").convert('L')   # 灰度化
Grayimg.show()                                    # 展示图片
Grayimg.save("Grayimg1")                          # 保存图片Grayimg1

输出结果如图示:

 pillow读取图片的宽高、数据类型及图片数据等
from PIL import Image# pillow处理图片
img = Image.open("000000.jpg").convert('RGB')       # pillow默认RGB格式
Grayimg = Image.open("000000.jpg").convert('L')     # 灰度化
print(img.size)                                     # pillow读取图片的size为宽、高
print(Grayimg.size)                                 # pillow读取灰度图的size为宽、高
print(type(img))                                    # pillow读取图片的数据类型
print(type(Grayimg))                                # pillow读取灰度图的数据类型
print(img)                                          # pillow读取图片的图片数据
print(Grayimg)                                      # pillow读取灰度图的图片数据

输出结果如图示:
在这里插入图片描述

 4 matplotlib处理图片

matplotlib读、写以及展示图片等操作
import matplotlib.pyplot as plt# matplotlib读取图片
plt_img = plt.imread("000000.jpg")     # 读取图片
plt.imshow(plt_img)                    # 交互模式中imshow就显示了,脚本模式中要多加plt.show()
plt.show()                             # 展示图片
plt.imsave("plt_out.jpg", plt_img)     # 保存图片

输出结果如图示:

matplotlib读取图片的形状、大小、编码格式、数据类型等
import matplotlib.pyplot as plt# matplotlib处理图片
plt_img = plt.imread("000000.jpg")     # 读取图片(默认RGB格式)
print(plt_img.shape)                   # matplotlib读取图片的shape为高、宽、通道数
print(plt_img.size)                    # matplotlib读取图片的size为像素和
print(plt_img.dtype)                   # matplotlib读取图片的编码格式
print(type(plt_img))                   # matplotlib读取图片的数据类型
# print(plt_img)                       # matplotlib读取图片的图片数据

输出结果如图示:

5 opencv、pillow和matplotlib相互转换 

opencv转pillow
import cv2
from PIL import Image# opencv转pillow(先转通道,再转类型)
image = cv2.imread(r"000000.jpg")                       # 读取图片
rgb_img = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)        # 转通道
# cv2.COLOR_BGR2RGB 与 COLOR_RGB2BGR 都是4, 相当于
# rgb_img = cv_img[:, :, [2, 1, 0]]
print(image.shape)                                      # opencv读取图片的shape为高、宽、通道数
print(image.size)                                       # opencv读取图片的size为像素和
print(image.dtype)                                      # opencv读取图片的编码格式
print(type(image))                                      # opencv读取图片的数据类型
# print(image)                                          # opencv读取图片的图片数据
# print(GrayImage)                                      # opencv读取灰度图的图片数据
pil_img = Image.fromarray(rgb_img)                      # 转类型
# pil_img.show()
print(pil_img.size)                                     # pillow读取图片的size为宽、高
print(type(pil_img))                                    # pillow读取图片的数据类型
print(pil_img)                                          # pillow读取图片的图片数据

输出结果如图示:

 pillow转opencv
import cv2
import numpy as np
from PIL import Image# pillow转opencv
pil_img = Image.open("000000.jpg").convert('RGB')       # pillow默认RGB格式
pil_np_img = np.array(pil_img)                          # 转为numpy格式
cv2.namedWindow('img1', cv2.WINDOW_NORMAL)
cv2.imshow('img1', pil_np_img)                          # opencv读取图片为BGR格式
cv2.waitKey(2000)                                       # 2s后自动销毁
cv2.destroyAllWindows()
print(pil_np_img.shape)
print(pil_np_img.size)
print(pil_np_img.dtype)
print(type(pil_np_img))
# print(pil_np_img)

输出结果如图示:

 

 matplotlib转opencv
import cv2
import matplotlib.pyplot as pltplt_img = plt.imread("000000.jpg")                       # 读取图片(默认RGB格式)
# plt.imshow(plt_img)
# plt.show()
print(plt_img.shape)                                     # matplotlib读取图片的shape为高、宽、通道数
print(plt_img.size)                                      # matplotlib读取图片的size为像素和
print(plt_img.dtype)                                     # matplotlib读取图片的编码格式
print(type(plt_img))                                     # matplotlib读取图片的数据类型
# print(plt_img)                                         # matplotlib读取图片的图片数据
img_cv = cv2.cvtColor(plt_img, cv2.COLOR_RGB2BGR)        # RGB转BGR
# cv2.imshow('img', img_cv)                              # 显示图片
cv2.waitKey(0)
cv2.destroyAllWindows()
GrayImage = cv2.cvtColor(img_cv, cv2.COLOR_BGR2GRAY)     # opencv读取图片默认为BGR格式,灰度化
print(img_cv.shape)                                      # opencv读取图片的shape为高、宽、通道数
print(img_cv.size)                                       # opencv读取图片的size为像素和
print(GrayImage.shape)                                   # opencv读取灰度图的shape为高、宽(通道数默认为1不显示)
print(GrayImage.size)                                    # opencv读取灰度图的size为像素和
print(img_cv.dtype)                                      # opencv读取图片的编码格式
print(GrayImage.dtype)                                   # opencv读取灰度图的编码格式
print(type(img_cv))                                      # opencv读取图片的数据类型
print(type(GrayImage))                                   # opencv读取灰度图的数据类型
# print(image)                                           # opencv读取图片的图片数据
# print(GrayImage)                                       # opencv读取灰度图的图片数据

输出结果如图示:

6 总结

三者转换的时候,转换的是数据类型和通道顺序。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/231441.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图片速览 PoseGPT:基于量化的 3D 人体运动生成和预测(VQVAE)

papercodehttps://arxiv.org/pdf/2210.10542.pdfhttps://europe.naverlabs.com/research/computer-vision/posegpt/ 方法 将动作压缩到离散空间。使用GPT类的模型预测未来动作的离散索引。使用解码器解码动作得到输出。 效果 提出的方法在HumanAct12(一个标准但小规…

AWS-WAF-CDN基于速率rate的永久黑名单方案(基于lambda实现)

参考方案(有坑), 所以产生了这篇博客: 点击跳转 1. 部署waf (有则跳过) 必须存在一个rate速率规则,后面的方案堆栈要用 新建rate速率规则 关联cdn资源 2.部署堆栈 (美国东部 (弗吉尼亚北部 …

短视频账号剪辑矩阵系统源码技术3年自研开发框架

短视频账号剪辑矩阵系统源码技术3年自研开发框架,这个市场截至到现在基本上违规开发的,没有正规接口开发的,基本上都已经筛选完了,目前各位技术者公司想要考察的话,只需要甄别3方面即可 1.剪辑是不是自己核心研发的&a…

正则表达式:简化模式匹配的利器

正则表达式:简化模式匹配的利器 一、正则表达式简介1.1 正则表达式介绍1.2 正则表达式使用场景 二、正则表达式语法2.1 正则表达式元字符和特性2.2 正则表达式常用匹配 三、正则表达式实战3.1 常见的正则表达式用法3.2 正则表达式的过滤用法3.3 正则表达式的代码用法…

Hadoop Single Node Cluster的安装

Hadoop Single Node Cluster的安装 安装JDK查看java -version更新本地软件包安装JDK查看java安装位置 设置SSH无密码登录安装hadoop下载安装设置hadoop环境变量修改hadoop配置设置文件设置core-site.xml设置YARN-site.xml设置mapred-site.xml设置HDFS分布式文件系统创建并格式化…

华为配置OSPF与BFD联动示例

组网需求 如图1所示,SwitchA、SwitchB和SwitchC之间运行OSPF,SwitchA和SwitchB之间的交换机仅作透传功能。现在需要SwitchA和SwitchB能快速感应它们之间的链路状态,当链路SwitchA-SwitchB发生故障时,业务能快速切换到备份链路Swi…

HTML---CSS美化网页元素

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 一.div 标签&#xff1a; <div>是HTML中的一个常用标签&#xff0c;用于定义HTML文档中的一个区块&#xff08;或一个容器&#xff09;。它可以包含其他HTML元素&#xff0c;如文本、图像…

3.2 内容管理模块 - 课程分类、新增课程、修改课程

内容管理模块-课程分类、新增课程、修改课程 文章目录 内容管理模块-课程分类、新增课程、修改课程一、课程分类1.1 课程分类表1.2 查询树形结构1.2.1 表自连接1.2.2 SQL递归 1.3 Mapper1.4 Service1.5 Controller1.6 效果图 二、添加课程2.1 需求分析2.2 数据表2.2.1 课程基础…

嵌入式科普(5)ARM GNU Toolchain相关概念和逻辑

一、目的/概述 二、资料来源 三、逻辑和包含关系 四、Arm GNU Toolchain最常用的命令 嵌入式科普(5)ARM GNU Toolchain相关概念和逻辑 一、目的/概述 对比高集成度的IDE(MDK、IAR等)&#xff0c;Linux开发需要自己写Makefile等多种脚本。eclipse、Visual Studio等需要了解预处…

Selenium框架的使用心得(一)

最近使用selenium框架实现业务前端的UI自动化&#xff0c;在使用selenium时&#xff0c;有一些心得想要和大家分享一下~ Selenium是一款用于web应用程序测试的工具&#xff0c;常用来实现稳定业务的UI自动化。这里&#xff0c;不想对其发展历史做介绍&#xff0c;也不想用官方…

vscode 文件目录栏缩进

一个好的开发IDE&#xff0c;一定是让人赏心悦目的&#xff0c;这个赏心悦目也一定是包含层级目录的清晰明了&#xff01;不能像感冒的鼻涕一样一擤一摊子&#xff01;就像。。。。嗯&#xff0c;算了&#xff0c;断子还是不讲了&#xff0c;怕有些妹子投诉 或发消息批评我。。…

【ppt密码】ppt的密码忘了,怎么破解

PPT文件设置了保护密码&#xff0c;但是密码忘记了&#xff0c;无法打开PPT文件、无法编辑PPT文件了该怎么办&#xff1f;PPT文件的两种保护密码该如何解密&#xff1f; 首先是打开密码 网上有一种解决方法&#xff1a; 1、重新命名PPT文件&#xff0c;将其后缀改为zip格式&…

Shell编程基础 – C语言风格的Bash for循环

Shell编程基础 – C语言风格的Bash for循环 Shell Programming Essentials - C Style For Loop in Bash By JacksonML 循环是编程语言的基本概念之一&#xff0c;同样也是Bash编程的核心。当用户需要一遍又一遍地运行一系列命令直到达到特定条件时&#xff0c;例如&#xff1…

优点和缺点(以及在求职过程中如何处理它们)

你知道你会感到紧张&#xff0c;因为你真的很想要这份工作。当人力资源人员提出这个普遍存在的问题“你的优势和劣势是什么&#xff1f;”时&#xff0c;他们在寻找什么&#xff1f; 有哪些突出的优点和缺点示例&#xff1f;您如何将这些示例个性化&#xff0c;以免听起来像人…

leecode题解Golang版本-3-无重复字符最长子串

题目 无重复字符最长子串 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 题解 func lengthOfLongestSubstring(s string) int {m : make(map[uint8]int)res : 0for l, r : 0, 0; r < len(s); r {m[s[r]]if v, ok : m[s[r]]; !ok || v 1…

智能优化算法应用:基于世界杯算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于世界杯算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于世界杯算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.世界杯算法4.实验参数设定5.算法结果6.参考文…

小程序自定义轮播图样式

小程序自定义轮播图样式以下是各案例&#xff0c;仅供大家参考。 效果展示&#xff1a; index.wxml代码&#xff1a; <view><!-- 轮播 --><view><swiper indicator-dots"{{indicatorDots}}"autoplay"{{autoplay}}" interval"{{…

数据可视化的魅力你了解吗?

你真的了解数据可视化吗&#xff1f;它所具备的真正魅力可能远远超出我们想象。数据可视化扩展了我们对数字和信息的简单理解&#xff0c;为我们揭示了一个无限可能的世界。今天我就以可视化行业的多年工作经验出发&#xff0c;和大家简单聊聊数据可视化的魅力。 数据的故事化…

STM32——时钟树与滴答计时器

STM32——时钟树与滴答计时器 使用的开发板为stm32F407VET6的芯片,主要介绍stm32的时钟树与滴答计时器的一些理论和一个自己编写的delay函数。 时钟树的结构图可以在STM32F4xx中文参考手册.pdf中的时钟这块找到。而滴答计时器是内核资源&#xff0c;需要到Cortex M3与M4权威指南…

【VScode】设置语言为中文

1、下载安装好vscode 2、此时可看到页面为英文&#xff0c;为方便使用可切换为中文 3、键盘按下 ctrlshiftP 4、在输入框内输入configure display language 5、选择中文&#xff0c;restart即可&#xff08;首次会有install安装过程&#xff0c;等待安装成功后重启即可&am…