zoukankan      html  css  js  c++  java
  • opencvmixChannels通道复制

    方式一

    #include<opencv2/opencv.hpp>
    #include<iostream>
    #include  <vector>
    
    
    int main(int argc, char** argv) {
    
        cv::Mat src = cv::imread("D:/bb/tu/3.png");
        std::cerr << src.channels() << std::endl;
        cv::imshow("src", src);
    
        cv::Mat dst(src.rows, src.cols, CV_8UC3);
        std::vector<int> fromTo = { 0,2,1,1,2,0 };//通道对应信息
        //src的0通道复制到dst的2通道,src的1通道复制到dst的1通道,src的2通道复制到dst的0通道
        cv::mixChannels(src, dst, fromTo);//通道复制
    
        cv::imshow("dst", dst);
    
        cv::waitKey(0);
        return 0;
    }

    方式二

    #include<opencv2/opencv.hpp>
    #include<iostream>
    #include  <vector>
    
    
    int main(int argc, char** argv) {
    
        //把一个四通道矩阵,使用mixChannels()函数分割成了一个三通道矩阵和一个单通道矩阵,并且具有对应关系
        cv::Mat bgra(5, 4, CV_8UC4, cv::Scalar(10, 20, 30, 255));
        cv::Mat bgr(bgra.rows, bgra.cols, CV_8UC3);
        cv::Mat alpha(bgra.rows, bgra.cols, CV_8UC1);
    
        cv::Mat out[] = { bgr,alpha }; //通道组合
        int fromTo[] = { 0, 2, 1, 1, 2, 0, 3, 3 };//通道对应信息,从0开始
        cv::mixChannels(&bgra, 1, out, 2, fromTo, 4); //通道复制
        /*
        第一个参数:输入矩阵   const Mat *
        第二个参数:输入矩阵的数量   size_t
        第三个参数:输出矩阵   Mat *
        第四个参数:输出矩阵的数量   size_t
        第五个参数:通道对应信息    const int * 
        第六个参数:复制通道数量
        说明:在这个函数原型中,如果输入矩阵和输出矩阵都写1,那么就跟第一种函数原型是一致的了。
        如果不为1,就可以实现多个矩阵组合并或者一个矩阵拆分为多个复杂矩阵等功能
        */
        
        std::cerr << bgra << std::endl<< std::endl;
        std::cerr << bgr << std::endl << std::endl;
        std::cerr << alpha << std::endl << std::endl;
    
    
        cv::waitKey(0);
        return 0;
    }

  • 相关阅读:
    关于data初始化值
    switch的优化替代写法
    phpstorm安装xdebug
    如何将一个列表封装为一个树形结构
    Win10系统桌面图标距离间距变大的问题
    cnpm无法加载文件的问题
    0、springboot
    1、springboot2新建web项目
    Game游戏分析
    netty学习
  • 原文地址:https://www.cnblogs.com/liming19680104/p/15609565.html
Copyright © 2011-2022 走看看