显示图像的RGB三通道图像

news2024/9/26 18:40:30

引 言 视觉任务处理的图片常用类型有RGB图、grayscale灰度图、binary二值图、PNG图等图像形式。图像打开和格式转换需要使用PIL库。本文主要讲解PIL库图像格式转换以及如何提取RGB每个通道的图片。

文章目录

    • 一、图像格式转换
      • 1.1 RGB格式图像
      • 1.2 grayscale灰度图
      • 1.3 二值图像
      • 1.4 PNG格式图像
      • 1.5 RGBA图像
      • 1.6 YCbCr图像
    • 二、RGB各通道图像提取
    • 三、区分numpy.array和torch.tensor存储图像维度变化

一、图像格式转换

图像打开并转换成项目需要的格式调用函数为:Image.open(img_path).convert(format_str)
format_str参数:**‘RGB’,‘L’, ‘1’,‘P’,‘RGBA’, ‘YCbCr’**等。

1.1 RGB格式图像

传统的红绿蓝三色图,每个通道的每个像素用8bit像素值表示0~255,语法为image.convert('RGB')

img_path = r'F:\pytorch_project\plane.jpg'

image = Image.open(img_path).convert('RGB')
img = np.array(image)
plt.imshow(image)
plt.show()

1.2 grayscale灰度图

图像中每个像素值为8bit,黑:0,白:255,其他像素值表示不同的灰度等级。
从RGB图转换成灰度图,实现公式【gray = 0.299R+0.587G+0.114*B】,语法为:

image = Image.open(img_path).convert('L')

此外,img.convert('I')表示32位整型灰度图,img.convert('F')表示32为浮点型灰度图。

1.3 二值图像

图像中只有两种像素值,黑:0,白:255,语法为:

image = Image.open(img_path).convert('1')

1.4 PNG格式图像

该格式图像为8bit图像,每个像素值通过查阅调色板获取,语法为:

image = Image.open(img_path).convert('P')

1.5 RGBA图像

图像为32bit,前24bit存储RGB三通道像素值,最后8bit存储透明度信息,语法为:

image = Image.open(img_path).convert('RGBA')

1.6 YCbCr图像

YCbCr图为24bit彩色图,Y表示亮度通道,Cb和Cr表示两个色度通道,肉眼对亮度通道敏感,对两个色度通道进行下采样。语法为:

image = Image.open(img_path).convert('YCbCr')

二、RGB各通道图像提取

对于RGB各图层图像的提取并展示有利于更直观了解图像的情况。

import numpy as np
from PIL import Image
import matplotlib.pyplot as plt


img_path = r'F:\pytorch_project\plane.jpg'

# 获取图像数据
image = Image.open(img_path).convert('RGB')
img = np.array(image)

img_list = []

# 获取各图层数据
for i in range(img.shape[-1]):
    temp = np.zeros_like(img)
    temp[...,i] = img[:,:,i]
    img_list.append(temp)

# 图像展示
fig,axes = plt.subplots(1,3)
titles = ['the image of {} channel'.format(channel) for channel in ['R','G','B']]

for i in range(len(img_list)):
    axes[i].imshow(img_list[i])
    axes[i].set_title(titles[i])
    
plt.show()

在这里插入图片描述

三、区分numpy.array和torch.tensor存储图像维度变化

numpy.array存储的图像维度为【H,W,C】,torch.tensor存储的图像通道维度【C,H,W】,在使用过程中要注意对图像矩阵进行维度转换。

import numpy as np
from PIL import Image
from torchvision import transforms

img_path = r'F:\pytorch_project\plane.jpg'

image = Image.open(img_path).convert('RGB')
img_np = np.array(image)
img_tensor = transforms.ToTensor()(image)

print("numpy.array shape: {}".format(img_np.shape))
print("torch.tensor shape: {}".format(img_tensor.shape))

###
numpy.array shape: (1200, 1920, 3)
torch.tensor shape: torch.Size([3, 1200, 1920])

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

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

相关文章

新租赁准则下使用权资产和租赁负债会计处理(案例:无免租期、除租金外无其他支出)

文章目录 一、概述二、使用权资产和租赁负债相关会计处理 一、概述 2018年底财政部会计准则委员会发布了修订后的《企业会计准则第21号——租赁》,财政部规定: 在境内外同时上市的企业以及在境外上市并采用国际财务报告准则或企业会计准则编制财务报表的…

通过数组中元素或者key将数组拆分归类成新的二维数组

处理前的数组: 处理后的数组: 你希望根据 riqi 字段将这个数组拆分成多个二维数组,每个二维数组包含相同日期的项。在ThinkPHP中,你可以使用PHP的数组操作来实现这一拆分操作。以下是如何按照 riqi 字段拆分成新的二维数组的示例代码: $splitArrays = [];foreach ($list…

《网络安全自学教程》- MySQL文件权限的安全问题和解决方案

《网络安全自学教程》 在实际生产环境中,应按照软件安全设计的「最小特权原则」设置MySQL的文件权限。 MySQL文件权限 1、数据库配置文件2、数据存储文件3、历史操作文件MySQL「安装目录」的属主和属组需要设置成mysql用户;MySQL的「历史操作文件」、「历史命令文件」、「数据…

JVM的面试考点

JVM内存划分 1.堆,整个内存区域中,内存最大的区域,放的都是new出来的对象,new类名这一部分存放在堆中, 而这个scanner是一个临时变量,这个scanner的地址存放在栈上,scanner里面存放的值是new类名这个对象的首地址 2.栈,分为JVM虚拟机栈(Java代码),和本地方法栈(C),这个栈包含了…

Python爬虫入门实战(详细步骤)

1. 技术选型 爬虫这个功能,我个人理解是什么语言都能写的,只要能正常发送 HTTP 请求,将响应回来的静态页面模版 HTML 上把我们所需要的数据提取出来就可以了,原理很简单,这个东西当然可以手动去统计收集,但…

Spring的监听机制详解

Spring的监听机制详解 讲在前面 对Spring框架,大家都已不陌生,它给我们提供了很多功能,包括IoC、AOP、事务管理等。其中,Spring的事件监听机制是一项非常重要的功能,它允许开发人员定义和处理自定义事件,并…

深入研究scRNA-seq基础模型

基础模型在大量未标记的数据集上进行预训练,然后在特定任务上进行微调,最近基础模型在生物学应用中取得了成功。该文探讨了最近的scRNA-seq基础模型,scBERT和scGPT。专注于细胞类型注释的微调任务,主要探索了与简单基线&#xff0…

OpenCV教程04:结合pillow在图片上显示中文文字

1.如果添加的内容是纯英文文字,直接使用cv2.putText 函数操作即可。但它不支持自定义字体文件,仅限于这些内置的字体样式。如果你需要更复杂的字体支持,可能需要使用其他库,如 Python Imaging Library (PIL) 或 Pillow。可用的字体…

判断用户是否在pwa环境中打开运行?(已安装的 PWA 与未安装的 PWA 网站之间有什么区别?)以及pwa安装成功/失败的回调

前言: 👉vue3tsvite项目中使用vite-plugin-pwa搭建 PWA 项目,以及如何处理pwa安装图标的显示隐藏 👉pwa在iframe下能否显示,以及在iframe下相关问题解析 如何判断用户是否在pwa环境中运行? 根据pwa配置的display-mo…

下载qwen2-72b报错

下载大模型或者是国外的大文件,最好配置git的代理,报错如下:https://modelscope.cn/models/qwen/Qwen2-72B 增加以下配置解决 git config --global http.sslVerify “false” git config --global advice.detachedHead false

小程序测试文档

预约小程序测试文档 一、访客 1、访客审批预约在vue修改过成功以后&#xff0c;在小程序页面未显示 解决办法 在pages\appointQuery\appointQuery.wxml页面中修改 <view class"order_right"><view class"order_status_left" wx:if"{{item…

想发Top实力不够:顶刊也能“水”!影响因子9.1 ,国人友好,2个月秒速录用

本周投稿推荐 SCI&EI • 4区“水刊”&#xff0c;纯正刊&#xff08;来稿即录&#xff09; • CCF-B类&#xff0c;IEEE一区-Top&#xff08;3天初审&#xff09; EI • 各领域沾边均可&#xff08;2天录用&#xff09; 知网&#xff08;CNKI&#xff09;、谷歌学术 …

exptern “C“的作用,在 C 和 CPP 中分别调用 openblas 中的 gemm 为例

openblas提供的sgemm有两种方式&#xff0c;一种是通过cblas&#xff0c;另一种是直接声明并调用 sgemm_ 其中&#xff0c;cblas方式是更正规调用方法&#xff1b; 1&#xff0c;调用openblas的 sgemm 的两种方式 1.1 c语言程序中使用 sgemm hello_sgemm.c #include <st…

层次分析法(评价类问题)

本文章内容来自&#xff1a;​​​​​​​ 层次分析法模型讲解(附matlab和python代码) 【数学建模快速入门】数模加油站 江北_哔哩哔哩_bilibili 一. 概念 做决策依托于量化分析&#xff0c;量化分析依托于选择的指标以及各项指标的权重&#xff08;重要性及对结果的影响程度…

XLT开关矩阵

开关矩阵 苏州新利通 系列化开关矩阵是提高被测件测试效率、实现自动化测试的核心设备&#xff0c;是基于标准控制平台可进行定制化设计的产品。系列化开关矩阵工作频率范围覆盖DC~67GHz&#xff0c;可通过LAN、GPIB、RS232和USB-B等标准控制接口&#xff0c;支持客户端、Web…

ElasticSearch安装与集群部署

ElasticSearch安装与集群部署 很多小伙伴第一次接触ElasticSearch的时候是一脸愁容,这个东西他怎么用啊,不知道从哪里安装,那我们今天就着重从哪里下载?怎么下载?怎么安装?来研究一下吧! windows下载安装ElasticSearch 下载地址&#xff1a;https://www.elastic.co/cn/do…

移动端下拉加载更多(h5,小程序)

1.h5,使用原生方式监听页面滚动下拉加载更多 <template><div></div> </template><script> export default {data() {return {loadflag: true,maxpages: 0, //最大页码currentpage: 0, //当前页listData: [],config: {page: 1,pageSize: 15,tota…

Unity开发的Domino多米诺3D小游戏源码

Unity开发的Domino多米诺3D小游戏源码下载地址

计算机组成原理 - 总线、输入/输出系统

总线 考纲内容 总线的基本概念总线的组成及性能指标总线事务和定时 本章大多以选择题的形式出现&#xff0c;特别是总线的特点、猝发传输方式、性能指标、定时方式及常见的总线标准等 思考以下问题&#xff1a; 1、引入总线结构有什么好处? 2、引入总线结构会导致什么问题…

公司官网为何建议用OV SSL证书?如何申请?

随着网络安全威胁的日益增多&#xff0c;保护用户数据安全变得尤为重要。其中SSL&#xff08;Secure Sockets Layer&#xff09;证书成为了保障网站安全的关键技术之一。而在众多SSL证书中&#xff0c;OV&#xff08;Organization Validation&#xff09;SSL证书因其独特的优势…