20250118-读取并显示彩色图像以及提取彩色图像的 R、G、B 分量

读取并显示彩色图像以及提取彩色图像的 R、G、B 分量

import cv2  #彩图R、G、B的提取
import torch
from PIL import Image
from matplotlib import pyplot as plt
import numpy as np
  1. 读取并显示彩色图像的三种方法:
img_path = "./data/yndx"

1.1 使用 PIL 读取图像,并使用 plt.imshow 显示图像

# 使用 PIL 读取图像
pil_img = Image.open(img_path + "/color_img.jpg")# 使用 plt.imshow 显示图像
plt.imshow(pil_img)
plt.axis('off')  # 不显示坐标轴
plt.show()

在这里插入图片描述

1.2 使用 OpenCV 读取图像,并使用 plt.imshow 显示图像

# 使用 OpenCV 读取图像
cv2_img = cv2.imread(img_path + "/color_img.jpg")# OpenCV 读取的图像是 BGR 格式,需要转换为 RGB 格式
img_rgb = cv2.cvtColor(cv2_img, cv2.COLOR_BGR2RGB)
# 使用 plt.imshow 显示图像
plt.imshow(img_rgb)
plt.axis('off')  # 不显示坐标轴
plt.show()

在这里插入图片描述

1.3 使用 OpenCV 读取图像,并使用 cv2.imshow 显示图像

烦人

# 使用 cv2.imshow 显示图像
cv2.imshow("Original", cv2_img)
# 等待键盘事件
cv2.waitKey(0)
# 关闭所有 OpenCV 窗口
cv2.destroyAllWindows()
  1. 提取彩色图像的 R、G、B 分量的两种方法

2.1 使用 PIL(Pillow)

PIL(Pillow)是 Python Imaging Library 的一个分支,它以 RGB 格式读取图像,因此可以直接提取各个分量。

# 读取图像
# 将图像转换为 NumPy 数组
image_np = np.array(pil_img)# 提取 R、G、B 分量
R = image_np[:, :, 0]
G = image_np[:, :, 1]
B = image_np[:, :, 2]# 显示各分量
plt.figure(figsize=(12, 4))plt.subplot(1, 4, 1)
plt.imshow(pil_img)
plt.title('Original Image')
plt.axis('off')plt.subplot(1, 4, 2)
plt.imshow(R, cmap='gray')
plt.title('Red Channel')
plt.axis('off')plt.subplot(1, 4, 3)
plt.imshow(G, cmap='gray')
plt.title('Green Channel')
plt.axis('off')plt.subplot(1, 4, 4)
plt.imshow(B, cmap='gray')
plt.title('Blue Channel')
plt.axis('off')plt.show()

在这里插入图片描述

2.2 使用 OpenCV

OpenCV 是一个功能强大的图像处理库,它以 BGR 格式读取图像,但我们可以轻松地将其转换为 RGB 格式,并提取各个分量。

2.2.1 使用 cv2.split() 提取 B、G、R 分量

  • 功能:将图像按通道分割成多个单通道图像。
  • 返回值:返回一个包含三个单通道图像的元组,分别是 B、G、R 分量。
  • 用途:主要用于需要分别处理每个通道的情况,例如对每个通道进行独立的滤波、阈值处理等操作。
# 读取图像
# 使用 cv2.split() 提取 B、G、R 分量
(B, G, R) = cv2.split(cv2_img)# 另存图像
cv2.imwrite(img_path + "/blue_img.jpg", B)
cv2.imwrite(img_path + "/green_img.jpg", G)
cv2.imwrite(img_path + "/red_img.jpg", R)# 显示各分量
plt.figure(figsize=(12, 4))plt.subplot(1, 4, 1)
plt.imshow(cv2.cvtColor(cv2_img, cv2.COLOR_BGR2RGB))
plt.title('Original Image')
plt.axis('off')plt.subplot(1, 4, 2)
plt.imshow(R, cmap='gray')
plt.title('Red Channel')
plt.axis('off')plt.subplot(1, 4, 3)
plt.imshow(G, cmap='gray')
plt.title('Green Channel')
plt.axis('off')plt.subplot(1, 4, 4)
plt.imshow(B, cmap='gray')
plt.title('Blue Channel')
plt.axis('off')plt.show()

在这里插入图片描述

2.2.2 使用 cv2.cvtColor() 提取 R、G、B 分量

  • 功能:将图像从一种颜色空间转换到另一种颜色空间。
  • 返回值:返回一个转换后的图像,仍然是一个三通道图像。
  • 用途:主要用于将图像从 BGR 格式转换为 RGB 格式,以便在 matplotlib 等库中正确显示图像。也可以用于其他颜色空间的转换,如从 BGR 转换为 HSV、YCrCb 等。
# 读取图像
# 使用 cv2.cvtColor() 将 BGR 图像转换为 RGB 图像
image_rgb = cv2.cvtColor(cv2_img, cv2.COLOR_BGR2RGB)# 提取 R、G、B 分量
R = image_rgb[:, :, 0]
G = image_rgb[:, :, 1]
B = image_rgb[:, :, 2]# 显示各分量
plt.figure(figsize=(12, 4))plt.subplot(1, 4, 1)
plt.imshow(image_rgb)
plt.title('Original Image')
plt.axis('off')plt.subplot(1, 4, 2)
plt.imshow(R, cmap='gray')
plt.title('Red Channel')
plt.axis('off')plt.subplot(1, 4, 3)
plt.imshow(G, cmap='gray')
plt.title('Green Channel')
plt.axis('off')plt.subplot(1, 4, 4)
plt.imshow(B, cmap='gray')
plt.title('Blue Channel')
plt.axis('off')plt.show()

在这里插入图片描述

使用 cv2.split() 和 cv2.cvtColor() 提取彩色图像的 R、G、B 分量在功能和用途上有一些区别,以下是详细对比:

  • 返回值类型:

cv2.split() 返回三个单通道图像(B、G、R)。

cv2.cvtColor() 返回一个三通道图像(例如 RGB)。

  • 用途:

cv2.split() 适用于需要分别处理每个通道的情况。

cv2.cvtColor() 适用于需要将图像从一种颜色空间转换到另一种颜色空间的情况,特别是从 BGR 转换为 RGB 以便在 matplotlib 中显示。

  • 显示效果:

cv2.split() 提取的单通道图像在 matplotlib 中需要使用 cmap=‘gray’ 显示为灰度图。

cv2.cvtColor() 转换后的 RGB 图像可以直接在 matplotlib 中显示为彩色图。

  • 选择建议

如果需要分别处理每个通道,使用 cv2.split()。

如果需要在 matplotlib 中显示图像,使用 cv2.cvtColor() 将 BGR 图像转换为 RGB 图像。

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

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

相关文章

Android BitmapShader实现狙击瞄具十字交叉线准星,Kotlin

Android BitmapShader实现狙击瞄具十字交叉线准星&#xff0c;Kotlin <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.…

20250118拿掉荣品pro-rk3566开发板上Android13下在uboot和kernel启动阶段的Rockchip这个LOGO标识

20250118拿掉荣品pro-rk3566开发板上Android13下在uboot和kernel启动阶段的Rockchip这个LOGO标识 2025/1/18 15:12 缘起&#xff1a;做飞凌OK3588-C开发板/核心板【Linux R4】的时候&#xff0c;测试/生产要求没有开机LOGO【飞凌/Rockchip】 要求&#xff1a;黑屏或者中性界面。…

浙江安吉成新照明电器:Acrel-1000DP 分布式光伏监控系统应用探索

安科瑞吕梦怡 18706162527 摘 要&#xff1a;分布式光伏发电站是指将光伏发电组件安装在用户的建筑物屋顶、空地或其他适合的场地上&#xff0c;利用太阳能进行发电的一种可再生能源利用方式&#xff0c;与传统的大型集中式光伏电站相比&#xff0c;分布式光伏发电具有更灵活…

QQ邮箱登录逆向

文章目录 抓包密码p的加密算法1.全局搜索参数2.加密函数 抓包 输入账号和错误的密码,可用看到如下的两个包: check: 里面包含密码加密时需要的参数及发送登录时需要的参数 check的响应: ptui_checkVC(0, !UIO, \x00\x00\x00\x00\x74\xca\x4f\x59, ef787cccd192b4015ef02ef3…

Docker安装PostGreSQL docker安装PostGreSQL 完整详细教程

Docker安装PostGreSQL docker安装PostGreSQL 完整详细教程 Docker常用命令大全Docker 运行命令生成Docker 上安装 PostGreSQL 14.15 的步骤&#xff1a;1、拉取 PostGreSQL 14.15 镜像2、创建并运行容器3、测试连接4、设置所有IP都可以运行连接进入容器内 修改配置文件关闭容器…

常见的两种虚拟化技术比较:KVM与VMware

引言 在当今的数据中心和云计算环境中&#xff0c;虚拟化技术已经成为不可或缺的一部分。它不仅提高了资源利用率&#xff0c;降低了硬件成本&#xff0c;还增强了系统的灵活性和可管理性。KVM&#xff08;基于内核的虚拟机&#xff09;和VMware是两种广泛使用的虚拟化解决方案…

Redis的安装和使用--Windows系统

Redis下载地址&#xff1a; windows版本readis下载&#xff08;GitHub&#xff09;&#xff1a; https://github.com/tporadowski/redis/releases &#xff08;推荐使用&#xff09; https://github.com/MicrosoftArchive/redis/releases 官网下载&#xff08;无Windows版本…

Spring Security(maven项目) 3.0.2.5版本中改

前言&#xff1a; 通过实践而发现真理&#xff0c;又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识&#xff0c;又从理性认识而能动地指导革命实践&#xff0c;改造主观世界和客观世界。实践、认识、再实践、再认识&#xff0c;这种形式&#xff0c;循环往…

flutter 装饰类【BoxDecoration】

装饰类 BoxDecoration BoxDecoration 是 Flutter 中用于控制 Container 等组件外观的装饰类&#xff0c;它提供了丰富的属性来设置背景、边框、圆角、阴影等样式。 BoxDecoration 的主要属性 1.color 背景颜色。类型&#xff1a;Color?示例&#xff1a; color: Colors.blu…

ScratchLLMStepByStep:训练自己的Tokenizer

1. 引言 分词器是每个大语言模型必不可少的组件&#xff0c;但每个大语言模型的分词器几乎都不相同。如果要训练自己的分词器&#xff0c;可以使用huggingface的tokenizers框架&#xff0c;tokenizers包含以下主要组件&#xff1a; Tokenizer: 分词器的核心组件&#xff0c;定…

抖音a_bogus,mstoken全参数爬虫逆向补环境2024-06-15最新版

抖音a_bogus,mstoken全参数爬虫逆向补环境2024-06-15最新版 源码获取 已放在github上&#xff0c;抖音部分已全面更新为a_bogus算法。 除了抖音还包括快手&#xff0c;小红书&#xff0c;哔哩哔哩&#xff0c;微博&#xff0c;京东&#xff0c;淘宝等平台&#xff0c;旨在帮助…

第十一章 图论

#include <iostream> #include <cstdio> #include <vector>using namespace std;const int MAXN 1000;vector<int> graph[MAXN]; //用向量存储邻接表中的每个点及其连接的的其他点int main(){return 0; } #include <iostream> #include &…

[LeetCode] 链表完整版 — 虚拟头结点 | 基本操作 | 双指针法 | 递归

链表 基础知识虚拟头结点203# 移除链表元素&#xff08;可递归&#xff09;24# 两两交换链表中的节点&#xff08;可递归&#xff09; 链表基本操作707# 设计链表单链表双链表 双指针法206# 反转链表&#xff08;可递归&#xff09;19# 删除链表的倒数第N个结点面试题02.07.# 链…

OODA循环在网络安全运营平台建设中的应用

OODA循环最早用于信息战领域&#xff0c;在空对空武装冲突敌对双方互相较量时&#xff0c;看谁能更快更好地完成“观察—调整—决策—行动”的循环程序。 双方都从观察开始&#xff0c;观察自己、观察环境和敌人。基于观察&#xff0c;获取相关的外部信息&#xff0c;根据感知…

【人工智能】:搭建本地AI服务——Ollama、LobeChat和Go语言的全方位实践指南

前言 随着自然语言处理&#xff08;NLP&#xff09;技术的快速发展&#xff0c;越来越多的企业和个人开发者寻求在本地环境中运行大型语言模型&#xff08;LLM&#xff09;&#xff0c;以确保数据隐私和提高响应速度。Ollama 作为一个强大的本地运行框架&#xff0c;支持多种先…

HarmonyOS NEXT应用开发边学边玩系列:从零实现一影视APP (四、最近上映电影滚动展示及加载更多的实现)

在HarmonyOS NEXT开发环境中&#xff0c;可以使用多种组件和库来构建丰富且交互友好的应用。本文将展示如何使用HarmonyOS NEXT框架和nutpi/axios库&#xff0c;从零开始实现一个简单的影视APP的首页&#xff0c;主要关注最近上映电影的滚动展示及加载更多功能的实现。 开源项目…

Linux 音视频入门到实战专栏(视频篇)视频编解码 MPP

文章目录 一、MPP 介绍二、获取和编译RKMPP库三、视频解码四、视频编码 沉淀、分享、成长&#xff0c;让自己和他人都能有所收获&#xff01;&#x1f604; &#x1f4e2;本篇将介绍如何调用alsa api来进行音频数据的播放和录制。 一、MPP 介绍 瑞芯微提供的媒体处理软件平台…

LabVIEW 蔬菜精密播种监测系统

在当前蔬菜播种工作中&#xff0c;存在着诸多问题。一方面&#xff0c;播种精度难以达到现代农业的高标准要求&#xff0c;导致种子分布不均&#xff0c;影响作物的生长发育和最终产量&#xff1b;另一方面&#xff0c;对于小粒径种子&#xff0c;传统的监测手段难以实现有效监…

飞牛 使用docker部署Watchtower 自动更新 Docker 容器

Watchtower是一款开源的Docker容器管理工具&#xff0c;其主要功能在于自动更新运行中的Docker容器 Watchtower 支持以下功能&#xff1a; 自动拉取镜像并更新容器。 配置邮件通知。 定时执行容器更新任务。 compose搭建Watchtower 1、新建文件夹 先在任意位置创建一个 w…

网络功能虚拟化(NFV):网络设备也能虚拟成产品

随着信息技术的迅猛发展&#xff0c;网络服务的需求也在不断变化。为了应对这一挑战&#xff0c;网络功能虚拟化&#xff08;NFV&#xff09;作为一项创新技术应运而生。它不仅改变了传统网络服务的部署方式&#xff0c;还为电信行业带来了前所未有的灵活性、效率和成本效益。 …