美文网首页
008 通道分离与合并

008 通道分离与合并

作者: 几时见得清梦 | 来源:发表于2019-07-28 23:48 被阅读0次
  • 本节内容:通道分离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()

相关文章

网友评论

      本文标题:008 通道分离与合并

      本文链接:https://www.haomeiwen.com/subject/ybxcrctx.html