美文网首页
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