008 通道分离与合并

  • 本节内容:通道分离split;通道合并merge
  • OpenCV使用imread加载图像后,通道顺序为BGR。
对彩色图像进行通道分离,并分别转为灰度图
  • 三个通道转为灰度图后,亮度不同,这说明三个通道的值是不同的,所以三个通道混合后有不同颜色。
代码执行结果

C++

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

using namespace cv;
using namespace std;

int main(int argc, const char *argv[])
{
    Mat src = imread("D:/vcprojects/images/flower.png");
    if (src.empty()) {
        printf("could not load image...\n");
        return -1;
    }
    namedWindow("input", WINDOW_AUTOSIZE);
    imshow("input", src);

    vector<Mat> mv; //定义一个vector,vector是c++的标准容器,可以理解为list或数组
    Mat dst1, dst2, dst3;
    // 蓝色通道为零
    split(src, mv); //split输入两个参数,(原图,分离出的通道图);mv是一张灰度图,因为它是单通道
    mv[0] = Scalar(0);
    merge(mv, dst1);
    imshow("output1", dst1); //dst1是黄色图像

    // 绿色通道为零
    split(src, mv);
    mv[1] = Scalar(0);
    merge(mv, dst2);
    imshow("output2", dst2);

    // 红色通道为零
    split(src, mv);
    mv[2] = Scalar(0);
    merge(mv, dst3);
    imshow("output3", dst3);

    waitKey(0);
    return 0;
}

Python

import cv2 as cv

src = cv.imread("D:/vcprojects/images/flower.png")
cv.namedWindow("input", cv.WINDOW_AUTOSIZE)
cv.imshow("input", src)

# 蓝色通道为零
mv = cv.split(src) //通道分离
mv[0][:, :] = 0 //将0通道即蓝色通道的像素全部置零
dst1 = cv.merge(mv)
cv.imshow("output1", dst1)

# 绿色通道为零
mv = cv.split(src)
mv[1][:, :] = 0
dst2 = cv.merge(mv)
cv.imshow("output2", dst2)

# 红色通道为零
mv = cv.split(src)
mv[2][:, :] = 0
dst3 = cv.merge(mv)
cv.imshow("output3", dst3)

cv.mixChannels(src, dst3, [2, 0])
cv.imshow("output4", dst3)

cv.waitKey(0)
cv.destroyAllWindows()
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容