当前位置: 首页 > news >正文

opencv PIL读取图像得到的图像格式

文章目录

  • opencv读取图像
  • rbg格式和gbr
  • HWC和CHW

opencv读取图像

cv2.imread()

# Load an color image in grayscale
img = cv2.imread('messi5.jpg', 0)
  • cv2.IMREAD_COLOR : 加载彩色图像,是一个默认值,可以用数字1代替
  • cv2.IMREAD_GRAYSCALE : 加载图像为灰色模式,可以用数字0代替
  • cv2.IMREAD_UNCHANGED : 加载包括alpha通道的图像

cv2.imshow(),显示图像

cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.imwrite(),写入图像

cv2.imwrite('messigray.png',img)

rbg格式和gbr

opencv读取的图像格式是gbr,PIL读取的图像格式是rgb

1、使用opencv读取和显示

使用cv2.imread()和cv2.imshow()

img = cv2.imread('demo.jpg')
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows() # 任意键关闭

显示正常:

在这里插入图片描述

2、使用opencv进行读取,plt进行显示

cv2.imread和plt.imshow()

img = cv2.imread('demo.jpg')
plt.imshow(img)

发现颜色改变了,因为opencv读取的顺序是gbr,imshow显示的顺序是rgb:

在这里插入图片描述

3、我们对三个通道进行调换,再用plt显示

将第三个维度进行逆序切片:

img = img[:, :, ::-1]
plt.imshow(img)

或者:

b, g, r = cv2.split(img)
rgb_img = cv2.merge([r, g, b])
plt.imshow(rgb_img)

此时颜色显示正常:

在这里插入图片描述

4、使用PIL读取,plt显示

img1 = Image.open('E:/notebook/demo.jpg')
plt.imshow(img1)

显示正常:
在这里插入图片描述

HWC和CHW

opencv读取的文件形式为:HWC

在这里插入图片描述
可以使用transpose将图像转为CHW

img1 = img.transpose((2, 0, 1))

参考资料:
https://youcans.blog.csdn.net/article/details/121168935
https://blog.csdn.net/haiyanp_p/article/details/118294120
https://www.likecs.com/show-204512169.html
http://www.zzvips.com/article/205586.html
https://www.cnblogs.com/AntonioSu/p/12021384.html

相关文章:

  • 支持JDK19虚拟线程的web框架,之三:观察运行中的虚拟线程
  • 基于Redis实现分布式锁(理论篇)
  • 一加8 pro 刷入 kali Hunter
  • 【C++】模板初阶
  • TPM分析笔记(十二)TPM PCR操作
  • 这里不适合做技术
  • aws ec2 配置jenkins和gitlab
  • 词缀 week 4th
  • Network 之十一 详解 PXE 原理、工作流程、服务端(Tiny PXE Server、Serva、Ubuntu)搭建
  • keras实现深度神经网络,keras实现卷积神经网络
  • 在ubuntu上用QT写一个简单的C++小游戏
  • linux 安装dotnet sdk
  • git Husky 搭配 commitizen ,规范代码提交
  • 【数据结构与算法】排序算法总结
  • 拒绝宕机,华为云CDN赋能企业发展!
  • CentOS 7 修改主机名
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • JS变量作用域
  • PHP 的 SAPI 是个什么东西
  • socket.io+express实现聊天室的思考(三)
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 官方解决所有 npm 全局安装权限问题
  • 记一次删除Git记录中的大文件的过程
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 终端用户监控:真实用户监控还是模拟监控?
  • 转载:[译] 内容加速黑科技趣谈
  • Linux权限管理(week1_day5)--技术流ken
  • MPAndroidChart 教程:Y轴 YAxis
  • 阿里云API、SDK和CLI应用实践方案
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (二)学习JVM —— 垃圾回收机制
  • (二十四)Flask之flask-session组件
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (理论篇)httpmoudle和httphandler一览
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (排序详解之 堆排序)
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (转)Linux下编译安装log4cxx
  • .bashrc在哪里,alias妙用
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .NET CF命令行调试器MDbg入门(一)
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .NET处理HTTP请求
  • [ 云计算 | AWS ] 对比分析:Amazon SNS 与 SQS 消息服务的异同与选择
  • [Angular] 笔记 6:ngStyle
  • [asp.net core]project.json(2)
  • [autojs]逍遥模拟器和vscode对接
  • [AX]AX2012 SSRS报表Drill through action
  • [BT]BUUCTF刷题第9天(3.27)
  • [bzoj4010][HNOI2015]菜肴制作_贪心_拓扑排序
  • [Docker]十.Docker Swarm讲解
  • [ITIL学习笔记]之事件管理(2)
  • [Java安全入门]三.CC1链
  • [java基础揉碎]方法的重写/覆盖