首页 > 其他分享 >OpenCV(cv::split())

OpenCV(cv::split())

时间:2024-09-14 17:36:53浏览次数:10  
标签:channels OpenCV split 图像 单通道 cv 通道

目录



cv::split() 是 OpenCV 提供的一个函数,用于将多通道图像分割成其各个单通道。该函数主要用于处理彩色图像和多通道矩阵,通常用于对图像中的每个颜色通道单独进行处理。



1. 函数定义

void cv::split(const Mat& src, std::vector<Mat>& mv);

参数:

  1. src(输入):

    • 这是一个 Mat 对象,代表输入的多通道图像或矩阵。典型的 3 通道图像是 BGR 图像(蓝-绿-红),也可以是 4 通道的带有 alpha 通道的图像(如 BGRA)。
  2. mv(输出):

    • 这是一个 std::vector<Mat> 类型的容器,用于存储分割后的各个单通道矩阵。输出的向量中每个 Mat 对象都将包含输入图像的一个单独通道。


2. 工作原理

cv::split() 会将多通道矩阵拆分为单通道矩阵。

例如,如果输入的是一个 BGR 图像,cv::split() 会将其分为三个单通道图像:蓝色通道、绿色通道、红色通道。



3. 示例

以下是一个示例,展示如何使用 cv::split() 函数分割一张彩色图像:

#include <opencv2/opencv.hpp>
#include <iostream>

int main() {
    // 读取一张彩色图像
    cv::Mat img = cv::imread("image.jpg");

    if (img.empty()) {
        std::cout << "无法读取图像" << std::endl;
        return -1;
    }

    // 创建一个 vector 来存储分离出来的通道
    std::vector<cv::Mat> channels;

    // 使用 cv::split 将图像分割成 3 个通道
    cv::split(img, channels);

    // 显示分离后的通道
    cv::imshow("Blue Channel", channels[0]);  // 蓝色通道
    cv::imshow("Green Channel", channels[1]); // 绿色通道
    cv::imshow("Red Channel", channels[2]);   // 红色通道

    cv::waitKey(0);
    return 0;
}

说明:

  1. 输入图像 img 是一个三通道的 BGR 图像。通过调用 cv::split(),将其分割为三个单通道的图像,分别存储在 channels 向量中。
  2. channels[0] 是蓝色通道,channels[1] 是绿色通道,channels[2] 是红色通道。
  3. 使用 cv::imshow() 分别显示这些单独的通道图像。


4. 使用场景

  1. 单通道处理:如果你想对每个颜色通道分别进行处理,比如对红色通道增强亮度或对蓝色通道做边缘检测,可以先使用 cv::split() 将通道分离,处理后再用 cv::merge() 合并。

  2. 颜色分析:当你需要分析图像中的颜色成分(如蓝色、绿色和红色的分布情况)时,可以用 cv::split() 分离通道后对每个单通道进行统计。



5. 注意事项

  • 对于灰度图像,cv::split() 没有作用,因为灰度图像是单通道图像。
  • 分割后的每个通道都是单独的 Mat 对象,可以像处理普通图像一样对其进行操作。

总结来说,cv::split() 是一个非常有用的工具,特别是在需要对每个颜色通道分别处理时非常有用。



标签:channels,OpenCV,split,图像,单通道,cv,通道
From: https://www.cnblogs.com/keye/p/18414406

相关文章

  • 从“看”到“管”:EasyCVR安防监控平台如何推动城市管理模式的转型升级
    在21世纪的今天,随着城市化进程的加速推进,城市规模不断扩大,人口密集度显著增加,城市管理面临着前所未有的挑战。从公共安全、交通管理到环境保护、应急响应,每一个领域都对城市的治理能力和效率提出了更高要求。在这一背景下,安防监控行业作为智慧城市建设的核心组成部分,正逐步成为推......
  • 数据为翼,智控未来:EasyCVR视频监控汇聚平台助力城市精准管理
    在数字化浪潮席卷全球的今天,智慧城市的概念已不再遥不可及,而是逐步成为现代城市发展的核心驱动力。作为智慧城市的重要组成部分,视频监控系统正以前所未有的速度和规模覆盖城市的每一个角落,成为城市管理者手中的“千里眼”和“顺风耳”。而EasyCVR视频监控汇聚平台,凭借其强大的数据......
  • 【鸿蒙应用开发】常见的容器组件:ColumnSplit、RowSplit和Flex
    上一章已经了解了Column和Row的一些属性,以下是几个案例:设置子组件水平方向的间距为:5@Entry@Preview@ComponentstructIndex{@Statemessage:string='Hello鸿蒙';controller:webview.WebviewController=newwebview.WebviewController();build(){Column(......
  • OpenCV添加中文文字
    代码如下,随机在摄像头中添加文字importcv2importnumpyasnpfromrandomimportrandintfromPILimportImage,ImageDraw,ImageFontCOLOR=(255,0,0)font_size=24cap=cv2.VideoCapture(0)whilecap.isOpened():ret,frame=cap.read()width,height......
  • OpenCV(cv::dilate())
    目录1.函数定义2.工作原理3.示例4.应用场景5.膨胀和腐蚀的对比总结cv::dilate()是OpenCV中用于图像形态学变换的函数之一,与cv::erode()相对,它执行图像的膨胀操作。膨胀是一种将图像中的前景(白色区域)扩展的操作,通常用于填补图像中的小孔洞、连接分离的物体、或增强图......
  • OpenSSH 远程代码执行漏洞(CVE-2024-6387) Ubuntu22.04 和 centos7处理方法
    这是文档,不是脚本,请一行一行复制粘贴执行,不用批量自动执行下面是Ubuntu22.04和centos7的处理方法,其他系统可能需要适当调整#!/bin/bash#========================================================================================##Ubuntu22.04升级openssh#......
  • OpenCV(cv::erode())
    目录1.函数定义2.工作原理3.示例4.应用场景总结cv::erode()是OpenCV中的图像形态学变换函数之一,用于执行图像的腐蚀操作。腐蚀是一种将图像中的白色区域缩小的操作,通常用于去除噪声、分离相邻的物体,或将小的图像细节消除。1.函数定义voidcv::erode(InputArraysrc......
  • OpenCV(cv::GaussianBlur())
    目录1.函数定义2.高斯模糊原理2.1高斯核\((3\times3)\)2.1.1高斯核的创建2.1.2卷积操作2.1.3边界处理2.1.4完成模糊处理2.1.5总结2.2高斯核\((5\times5)\)3.示例4.高斯核的生成5.高斯模糊的应用场景6.高斯模糊与其他模糊方式的对比7.总结cv::GaussianBlur()......
  • opencv-python学习笔记9-图像分割
    目录一、图像分割的概述、技术现状、应用:技术现状:传统图像分割技术:深度学习驱动的图像分割技术:应用领域:二、 图像分割的方法和分类:(1)基于阈值的分割方法:(2)基于区域的分割方法:(3)基于边缘的分割方法:(4)基于特定理论的分割方法:(5)基于深度学习的分割方法:三、图像分割的原理:......
  • CVE-2015-5254(ActiveMQ-反序列化漏洞)
    漏洞描述编号:CVE-2015-5254影响版本:ApacheActiveMQ5.13.0之前5.x版本CVE地址:CVE-2015-5254漏洞原理:该漏洞源于程序没有限制可在代理中序列化的对象。远程攻击者可借助特制的序列化的JavaMessageService(JMS)ObjectMessage对象利用该漏洞执行任意代码复现环境windows,doc......