首页 > 其他分享 >OpenCV基础:通道的分割与合并

OpenCV基础:通道的分割与合并

时间:2025-01-18 09:30:33浏览次数:3  
标签:分割 合并 image cv2 OpenCV 图像 np 通道

目录

相关阅读

1. 简述

2. 相关接口

2.1 通道分割API

2.2. 通道合并API

3. 分割与合并示例

4. 注意事项

5. 通道操作的应用场景

5.1 颜色空间转换

5.2 图像增强和处理


相关阅读

OpenCV基础:色彩空间转换-CSDN博客

OpenCV基础:图像运算-CSDN博客

OpenCV基础:图像的溶合-CSDN博客


1. 简述

在图像处理中,通道是图像数据的重要组成部分。例如,彩色图像通常由三个通道(RGB 或 BGR)组成,每个通道表示一种颜色分量。在某些场景中,我们可能需要对单个通道进行操作,这就需要用到 OpenCV 的通道分割与通道合并功能。


2. 相关接口

2.1 通道分割API

cv2.split(m)

用于将多通道图像拆分为单通道图像,每个通道会存储在一个独立的矩阵中。

参数:输入的多通道图像。

返回值::一个包含各通道的列表,每个通道为一个单通道图像。

2.2. 通道合并API

cv2.merge(mv)

用于将多个单通道图像合并为一个多通道图像。

参数:包含单通道图像的列表,要求列表中的图像尺寸必须相同。
返回值:合并后的多通道图像。


3. 分割与合并示例

import cv2
import numpy as np

# 创建一张全黑的背景图
img = np.zeros((480,640,3), np.uint8)

# 分离通道
b,g,r = cv2.split(img)

b[10:100, 10:100] = 255
g[10:100, 10:100] = 255

# 合并通道
img2 = cv2.merge((b, g, r))

cv2.imshow('b', b)
cv2.imshow('img2', img2)
cv2.waitKey(0)

运行结果:

    

b 为分离出的通道, 改变部分区域的值为255, 显示出来有一块白色的区域;

img2为b, g, r 三个通道合并的结果,b 和 g 通道中部分区域改为了白色, r 通道数据未改变, 合并后重叠区域显示为青色 - BGR(255,255,0)。


4. 注意事项

  • 尺寸一致性:合并通道时,所有通道的尺寸必须一致。如果尺寸不同,可以先使用 cv2.resize 对图像进行调整。
  • 数据类型一致性:分割和合并时,所有通道的数据类型必须一致。例如,uint8 格式的图像不能直接与 float32 格式的图像合并。
  • 颜色空间:默认情况下,OpenCV 使用 BGR 颜色空间,而不是 RGB。在处理彩色图像时,务必注意颜色空间的正确性。

5. 通道操作的应用场景

5.1 颜色空间转换

通道分割和合并可用于颜色空间的转换。例如,将 BGR 图像转换为 HSV(色调、饱和度、亮度)或 YUV 等其他颜色空间时,可能需要先将图像分割成通道,进行一些操作,然后再合并回去。

 代码示例:

import cv2
import numpy as np

# 读取图像
image = cv2.imread('D:\\resource\\huaji.jpg')

# 通道分割
b, g, r = cv2.split(image)

# 转换为 YUV 颜色空间
yuv_image = cv2.cvtColor(image, cv2.COLOR_BGR2YUV)
y, u, v = cv2.split(yuv_image)

# 对 Y 通道进行操作,例如增强亮度
y = np.clip(y * 1.2, 0, 255).astype(np.uint8)

# 合并 YUV 通道
modified_yuv_image = cv2.merge((y, u, v))

# 转换回 BGR 颜色空间
modified_image = cv2.cvtColor(modified_yuv_image, cv2.COLOR_YUV2BGR)

# 显示修改后的图像
cv2.imshow('Modified Image', modified_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这个示例中,我们将图像转换为 YUV 颜色空间,对 Y 通道进行亮度增强操作,然后再转换回 BGR 颜色空间。

运行效果:

 

5.2 图像增强和处理

import cv2
import numpy as np

# 读取图像
image = cv2.imread('D:\\resource\\huaji.jpg')

# 通道分割
b, g, r = cv2.split(image)

# 增强红色通道
r = np.clip(r * 1.5, 0, 255).astype(np.uint8)

# 合并通道
enhanced_image = cv2.merge((b, g, r))

# 显示增强后的图像
cv2.imshow('Enhanced Image', enhanced_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

这里我们将红色通道的值乘以 1.5,实现了对红色的增强。

运行效果:

标签:分割,合并,image,cv2,OpenCV,图像,np,通道
From: https://blog.csdn.net/u011186532/article/details/145132639

相关文章

  • OpenCV基础:绘制基本图形
    OpenCV是一个强大的图像处理库,可以轻松实现图形绘制功能。本文将通过代码示例,介绍如何使用OpenCV在图像上绘制常见的图形,包括直线、矩形、圆形、椭圆、多边形以及绘制字体。1.画线API:cv2.line(image,pt1,pt2,color,thickness)参数说明:image:目标图像。pt1:线段起......
  • Python 字符串分割时 spilt 和 re 效率对比
    假设有一些文件名是数字_文档名的格式,如何用python将数字提取出来?可以使用Python的正则表达式模块re提取文件名中的数字部分。以下是实现代码:示例代码:importre#示例文件名列表file_names=["1_file1.txt","2_file2.txt","10_document.doc","random_file.......
  • 【PCL】Segmentation 模块—— 圆柱模型分割(Cylinder model segmentation)
    1、简介PCL(PointCloudLibrary)中的圆柱模型分割CylinderModelSegmentation是一种从点云数据中提取圆柱体模型的技术。它通过识别点云中符合圆柱体几何形状的部分,将圆柱体从其他几何形状中分离出来。1.1主要步骤预处理:对点云进行去噪、下采样等操作,以减少数据量并提......
  • Qt+OpenCV实现图片压缩(JPEG、PNG)
    一、概述需求:1.编写一个小工具实现图片压缩2.图片仅支持JPEG和PNG格式3.目的是压缩图片在磁盘中所占用的大小4.使用的开发语言是Qt、C++、OpenCV5.压缩的质量可以动态调节如下图所示:ps:1.如果图片是jpeg......
  • e2studio开发RA0E1(17)----ADC单通道采集电压
    e2studio开发RA0E1.17--ADC单通道采集电压概述视频教学样品申请完整代码下载硬件准备参考程序新建工程工程模板保存工程路径芯片配置工程模板选择时钟设置UART配置UART属性配置设置e2studio堆栈e2studio的重定向printf设置R_UARTA_Open()函数原型回调函数user_uart_callb......
  • opencv实现像素统计的示例代码
    在OpenCV中,统计图像的像素信息(如像素值分布、最大值、最小值、均值等)是常见的操作。以下是一些常用的方法和函数,用于统计图像的像素信息:统计像素值的基本信息最大值、最小值、均值、标准差:使用cv::minMaxLoc()和cv::meanStdDev()函数可以快速计算图像的最大值、最小值......
  • 多通道传感器接入集中控制频率温度 传感器集线器带来更多方便
    多通道传感器接入集中控制频率温度传感器集线器带来更多方便现场传感器太多,编号容易混乱?传感器集线器可以将多路传感器轮流切换到单一接口,为现场提供更多方便。操作简便直观,使用一个百位拨动开关和两个旋转开关(十位和个位)自由切换到任意传感器。传感器通道多,最多可实现100组频......
  • 32ADC单通道连续模式只能采样一次问题,adc值不更新( CUBMX+HAL)
    1.问题使用ADC2,单通道(IN15)连续模式cubemx配置如下在main.c中添加如下函数结果adc_value的值只有复位时有效,然后值一直不变(IN15的IO口接了个电压值不断变换的信号)2.解决只要在cubemx中使能LowPowerAutoWait,代码不变,即可正常工作......
  • 常用阈值分割算法及 C++ 代码分析(二)
    一、概述阈值分割是图像处理中一种基础且重要的技术,它的核心思想是通过设定一个或多个阈值将图像中的像素划分为不同的类别,以实现图像中目标和背景的分离,或者不同目标之间的分离。这种技术广泛应用于物体检测、图像识别、医学影像处理、遥感图像处理等众多领域。在C++环境下......
  • 可以用于分割字符串的方法(python)
    一、str.split(sep,maxsplit)函数(返回列表)sep:分隔符maxsplit:分割次数a="Helloworld"list1=a.split("",1)print(list1)结果:['Hello','world']二、str.rsplit(sep,maxsplit)函数(从右边开始分割,返回列表)sep:分隔符maxsplit:分割次数a="Helloworld&q......