• opencv —— mixChannels 通道复制


    mixChannels 主要就是把输入的图像(或图像集)的某些通道拆分复制给对应的输出图像(或图像集)的某些通道中,其中的对应关系由 fromTo 参数制定。

    通道复制:mixChannels 函数

    void mixChannels(const Mat* src, size_t nsrcs, Mat* dst, size_t ndsts, const int* fromTo, size_to npairs);

    • src,输入的图像或图像集,需要有相同的尺寸和深度。
    • nsrcs,输入图像个数。
    • dst,输出图像,所有图像必须被初始化,且大小和深度必须与 src[0] 相同。
    • ndsts,输出图像个数。
    • fromTo,输入图像通道与输出图像通道的对应关系。对于输入图像,第一幅图的通道索引可选范围 [0, src[0].channels() - 1],第二幅图的通道索引可选范围 [src[0].channels(), src[0].channels() + src[1].channels() - 1] 。输出图像亦满足这个规律。举个例子,假设输入和输出图像均为三通道图像,想要将输入图像中第 3 幅图的第 1 个通道放入到输出图像第 2 幅图的第三个通道,则对应关系为 src[2][0] -> dst[1][2] ,在 fromTo 中形式为 6 -> 5。
    • npairs,fromTo 的索引数,即有几个 fromTo。

    代码示例:

    #include<opencv.hpp>
    #include<iostream>
    using namespace std;
    using namespace cv;
    Mat src, hsvImg;
    int main() {
        src = imread("C:/Users/齐明洋/Desktop/证件照/1.jpg");
        imshow("src", src);
    
        //转换为 HSV 通道图像
        cvtColor(src, hsvImg, COLOR_BGR2HSV);
        imshow("hsvImg", hsvImg);
    
        Mat hImg = Mat(src.size(), CV_8UC1);
        Mat sImg = Mat(src.size(), CV_8UC1);
        Mat vImg = Mat(src.size(), CV_8UC1);
    
        Mat dst[] = { hImg,sImg,vImg };
        //hsvImg[0]->hImg[0] hImg 在 dst 中的通道索引为:0
        //hsvImg[1]->sImg[0] sImg 在 dst 中的通道索引为:1
        //hsvImg[2]->vImg[0] vImg 在 dst 中的通道索引为:2
        int fromTo[] = { 0,0,1,1,2,2 };
        mixChannels(&hsvImg, 1, dst, 3, fromTo, 3);
        imshow("hImg", hImg);
        imshow("sImg", sImg);
        imshow("vImg", vImg);
    
        waitKey(0);
    }

    效果演示:

    借鉴博客:https://www.cnblogs.com/ruic/archive/2015/10/31/4926254.html

  • 相关阅读:
    gcc 编译器常用的命令行参数一览
    linux下源代码分析和阅读工具比较
    Linux系统——C/C++开发工具及环境搭建
    GDB调试——经验总结
    gdb调试的艺术——Debug技巧
    命令__cp、scp(Secure Copy)
    常用shell脚本命令
    命令__查找、替换、删除
    UltraEdit 删除空行
    命令__shell数字-字符串比较
  • 原文地址:https://www.cnblogs.com/bjxqmy/p/12453861.html
Copyright © 2020-2023  润新知