利用OpenCV的函数split()和merge()实现通道的分离与合并

Posted 昊虹AI笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用OpenCV的函数split()和merge()实现通道的分离与合并相关的知识,希望对你有一定的参考价值。

利用OpenCV的函数split()和merge()实现通道的分离与合并

可以利用OpenCV的函数split()实现通道的分离
利用函数merge()实现通道的合并

两个函数的使用很简单,所以这里就不详细介绍了。

直接给大家C++和Python示例代码,大家一看就会。

代码中用到的图片百度网盘下载链接如下:
https://pan.baidu.com/s/1DZxvV9bTaUsw7k6Pnh8fbw?pwd=zg2d

C++示例代码如下:

//出处:昊虹AI笔记网(hhai.cc)
//用心记录计算机视觉和AI技术

//OpenCV版本 OpenCV3.0

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

using namespace std;
using namespace cv;


int main()

	// 读取源图像,图像中的三个圆分别是只有R分量、G分量、B分量的纯色圆
	cv::Mat img = cv::imread("F:/material/images/2022/2022-11/pure_rgb.bmp", 1);
	if (img.empty())
		return -1;

	imshow("pure-rgb", img);

	// 通道分离
	std::vector<cv::Mat> BGR_plane;
	cv::split(img, BGR_plane);

	imshow("b_channel", BGR_plane[0]);
	imshow("g_channel", BGR_plane[1]);
	imshow("r_channel", BGR_plane[2]);

	// 通道合并
	cv::Mat img1;
	cv::merge(BGR_plane, img1);
	imshow("img_merge", img1);


	cv::waitKey(0);
	return 0;

运行结果如下图所示:

Python示例代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 出处:昊虹AI笔记网(hhai.cc)
# 用心记录计算机视觉和AI技术
# OpenCV的版本为4.4.0

import numpy as np
import cv2 as cv
import sys

if __name__ == '__main__':
    # 读取图像,图像中的三个圆分别是只有R分量、G分量、B分量的纯色圆
    img = cv.imread('F:/material/images/2022/2022-11/pure_rgb.bmp')
    if img is None:
        print('Failed to read lena.jpg.')
        sys.exit()

    cv.imshow('pure-rgb', img)

    # 通道分离
    b1, g1, r1 = cv.split(img)

    cv.imshow('b_channel', b1)
    cv.imshow('g_channel', g1)
    cv.imshow('r_channel', r1)

    # 通道合并
    img1 = cv.merge([b1, g1, r1])
    cv.imshow('img_merge', img1)

    # 关闭窗口
    cv.waitKey(0)
    cv.destroyAllWindows()

运行结果如下图所示:

另外,在Python-OpenCV下,还有一种更高效的图像通道分离方法,详情见下面的链接:
https://www.hhai.cc/thread-152-1-1.html

以上是关于利用OpenCV的函数split()和merge()实现通道的分离与合并的主要内容,如果未能解决你的问题,请参考以下文章

opencv学习笔记第六篇:分离颜色通道多通道图像混合和图像对比度亮度值的调整

如何利用openCV函数查看opencv版本

学习 opencv--- 分离颜色通道 && 多通道混合

如何在多个图像上使用 cv2.split 和 cv2.merge?

OpenCV通道的分离和合并

OpenCV 函数学习12-图像通道的合并(cv2.merge)