opencv 基础学习08-图像通道操作

opencv 基础学习08-图像通道操作

    • 什么是图像通道?
    • 通道操作:
    • **1 通过索引拆分**
    • 2 通过opencv 函数拆分
    • 通道合并

什么是图像通道?

OpenCV的通道拆分功能可用于将多通道图像拆分成单独的通道,这在图像处理和计算机视觉任务中具有许多应用场景。以下是一些通道拆分的常见应用场景:

图像处理:在某些图像处理任务中,需要对图像的不同通道进行独立处理。例如,可以对彩色图像的RGB通道进行分别处理,如对每个通道进行直方图均衡化、对比度调整、颜色平衡等操作。

物体检测:在某些物体检测任务中,通过分析不同通道的信息可以帮助提高检测准确性。例如,在红外图像中,热点和冷点可能分别对应于不同的物体或区域。通过拆分红外图像的通道,可以分别分析不同的温度通道,从而提取更具区分度的特征。

背景建模:在背景建模中,可以使用通道拆分来分析不同通道的背景信息。例如,可以对RGB图像的各个通道进行拆分,并针对每个通道建模,以便更好地分离前景目标和背景。

颜色空间转换:通道拆分也可以用于颜色空间转换。例如,将RGB图像拆分成HSV(色调、饱和度、亮度)通道,然后可以对亮度通道进行调整或应用其他颜色空间转换算法。

图像融合:在某些情况下,需要将不同通道的图像进行融合。通过通道拆分,可以将多个单通道图像进行合并,以生成具有所需特性的合成图像。
疑问:
一张图片最多有多个少通道?最少可以有几个通道?
最常见的图像类型是RGB图像,它由红色(R)、绿色(G)和蓝色(B)三个通道组成,因此是一个三通道图像。在这种情况下,每个像素的颜色由这三个通道的强度组合而成。

除了RGB图像之外,还有其他常见的多通道图像类型。例如,RGBA图像包含红色(R)、绿色(G)、蓝色(B)和透明度(A)四个通道,透明度通道用于控制像素的不透明度。

另一方面,灰度图像是一种单通道图像,每个像素只有一个强度值,表示图像中的亮度。在灰度图像中,像素的亮度通常使用0到255之间的灰度级别表示。

总之,一张图像可以有多个通道,最常见的是RGB图像(三通道),也可以是其他类型的多通道图像。而最少的情况下,一张图像至少有一个通道,即灰度图像(单通道)。

通道操作:

在 RGB 图像中,图像是由 R 通道、G 通道、B 通道三个通道构成的。需要注意的是,在
OpenCV 中,通道是按照 B 通道→G 通道→R 通道的顺序存储的。
在图像处理过程中,可以根据需要对通道进行拆分和合并。本节就来介绍如何对通道进行拆分合并

通道拆分

针对 RGB 图像,可以分别拆分出其 R 通道、G 通道、B 通道。在 OpenCV 中,既可以通过索引的方式拆分通道,也可以通过函数的方式拆分通道

1 通过索引拆分

通过索引的方式,可以直接将各个通道从图像内提取出来。例如,针对 OpenCV 内的 BGR
图像 img,如下语句分别从中提取了 B 通道、G 通道、R 通道

b = img[ : , : , 0 ]
g = img[ : , : , 1 ]
r = img[ : , : , 2 ]

原图
在这里插入图片描述
对原图进行通道拆分,代码如下

import cv2lena=cv2.imread("lena.png",cv2.IMREAD_COLOR,)
cv2.imshow("lena1",lena)
b=lena[:,:,0]
g=lena[:,:,1]
r=lena[:,:,2]cv2.imshow('b', b)
cv2.imshow('g', g)
cv2.imshow('r', r)cv2.waitKey(0)
cv2.destroyAllWindows()

运行效果如下图:

在这里插入图片描述

2 通过opencv 函数拆分

函数 cv2.split()能够拆分图像的通道。例如,可以使用如下语句拆分彩色 BGR 图像 img,
得到 B 通道图像 b、G 通道图像 g 和 R 通道图像 r。

b,g,r=cv2.split(img)
上述语句与如下语句是等价的:
b=cv2.split(a)[0]
g=cv2.split(a)[1]
r=cv2.split(a)[2]

将上面代码替换后源码如下:

import cv2
import numpy as nplena=cv2.imread("lena.png",cv2.IMREAD_COLOR,)
cv2.imshow("lena1",lena)b,g,r=cv2.split(lena)
cv2.imshow('b', b)
cv2.imshow('g', g)
cv2.imshow('r', r)cv2.waitKey(0)
cv2.destroyAllWindows()

运行后发现效果跟上面是一样的。

在这里插入图片描述

通道合并

通道合并是通道拆分的逆过程,通过合并通道可以将三个通道的灰度图像构成一幅彩色图
像。函数 cv2.merge()可以实现图像通道的合并,例如有 B 通道图像 b、G 通道图像 g 和 R 通道
图像 r,使用函数 cv2.merge()可以将这三个通道合并为一幅 BGR 的三通道彩色图像。其实现的
语句为:
bgr=cv2.merge([b,g,r])

演示使用函数 cv2.merge()合并通道,代码如下

import cv2
import numpy as nplena=cv2.imread("lena.png",cv2.IMREAD_COLOR,)#b,g,r=cv2.split(lena)对图像 lena 进行拆分,得到 b、g、r 这三个通道
b,g,r=cv2.split(lena)
#cv2.merge([b,g,r])对图像 lena 进行合并,合并后的图像与原图像完全一致
bgr=cv2.merge([b,g,r])
#对通道 r、g、b 进行合并,合并顺序为 R 通道→G 通道→B通道,得到图像 rgb。
rgb=cv2.merge([r,g,b])cv2.imshow("lena",lena)
cv2.imshow("bgr",bgr)
cv2.imshow("rgb",rgb)cv2.waitKey(0)
cv2.destroyAllWindows()

运行效果如下
在这里插入图片描述
从结果中看出不同顺序的通道合并,图片的效果也会不一样

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

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

相关文章

7月6日华为云盘古气象大模型登上《Nature》杂志:相比传统数值预报快10000倍

7月6日,国际顶级学术期刊《自然》(Nature)杂志正刊发表了华为云盘古大模型研发团队的最新研究成果——《三维神经网络用于精准中期全球天气预报》(《Accurate medium-range global weather forecasting with 3D neural networks》…

解析!1V1直播源码开发搭建技术实时语音识别翻译功能的应用

语言是我们人类交流的工具,它的种类繁多,比如世界语言,像是中国的汉语、英国的英语、法国的法语等;又或是我们中国的方言,像是山东话、北京话、上海话等。可谓是五花八门,争奇斗艳,每一种世界语…

thinkphp 上传图片

public function upload_img(){// 读取图片资源// 存储路径$path "uploads/avatar";$file request()->file(background_img);// 存储图片$info $file->rule(uniqid)->move($path);// 存储成功if ($info) {//获取到上传图片的路径名称$name_img $path . …

利用ChatGPT场景化学习英语听说读写

大家好,我是可夫小子,关注AIGC、读书和自媒体。解锁更多ChatGPT、AI绘画玩法。加我,备注:chatgpt,拉你进群。 我们从初中就开始学习英语,到大学也有小十年,在这个过程中,我们投入了很…

卷积神经网络(CNN)原理详解

近些年人工智能发展迅速,在图像识别、语音识别、物体识别等各种场景上深度学习取得了巨大的成功,例如AlphaGo击败世界围棋冠军,iPhone X内置了人脸识别解锁功能等等,很多AI产品在世界上引起了很大的轰动。 而其中 卷积神经网络&am…

线性代数 4 every one(线性代数学习资源分享)

Linear Algebra 4 Every One 版权说明,以下我分享的都是一个名叫Kenji Hiranabe的日本学者,在github上分享的,关于Gilbert Strang教授所撰写的《Linear Algebra for Everyone》一书的总结,更像是一个非常精美的线性代数手册&#…

Verilog 学习之路

循环 7-10 代码段 generategenvar i;for (i0; i<8; i i1) begin: my_block_nameassign out[i] in[8-i-1];end endgenerate解释 该代码使用了 S y s t e m V e r i l o g SystemVerilog SystemVerilog 中的 g e n e r a t e generate generate 构造&#xff0c;它允许在…

FreeRTOS实时操作系统(十五)Tickless低功耗模式

系列文章目录 文章目录 系列文章目录低功耗模式Tickless低功耗模式宏定义配置 实验测试 低功耗模式 在之前的逻辑开发中学习过STM32的低功耗模式&#xff0c;在FreeRTOS中的低功耗模式&#xff0c;方便操作系统进入低功耗模式。 stm32中的低功耗模式&#xff1a; Tickless低…

不外传秘诀| docker 快速搭建常用的服务环境

本文主要给大家介绍如何使用 docker 搭建常用的服务环境&#xff0c; 包括mysql,reedis,nginx,jenkins 等常用的环境&#xff0c;下面直接进入主题。 1、MySQL 部署 ①搜索 MySQL 镜像 docker search mysql ②拉取 MySQL 镜像 docker pull mysql:5.7 ③创建容器&#xf…

Flink是什么

先看下大数据的发展历程 随着公司业务的增加&#xff0c;各种场景都要大量的业务数据产生&#xff0c;对于这些不断产生的数据如何进行有效的处理&#xff1f; 由此诞生了大数据处理工具&#xff1a; 数据存在关系型数据库&#xff0c;比如mysql&#xff0c;如何分析数据&#…

疯踏java知识点-进阶精讲篇

该资源是关于Java的师生管理系统&#xff0c;可以学习借鉴一下。 继续进行讲解&#xff0c;如果前面有不懂的&#xff0c;可以翻阅一下同专栏的其他文章&#xff0c;该专栏是针对Java的知识从0开始。 JavaBean 一个Java中的类&#xff0c;其对象可用于程序中封装数据举例&…

设计模式——访问者模式

访问者模式 定义 封装一些的对于某种数据结构中的各元素的操作&#xff0c;它可以在不改变数据的前提下定义作用于这些元素的新的操作 访问者模式&#xff08;Visitor pattern&#xff09;是相对简单的模式&#xff0c;也可以作为迭代器模式的补充 优缺点、应用场景 优点 …