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;
    }

  • 相关阅读:
    【转】java正则表达式
    NDK学习笔记-使用现有so动态库
    NDK学习笔记-增量更新
    NDK学习笔记-增量更新
    NDK学习笔记-文件的拆分与合并
    NDK学习笔记-文件的拆分与合并
    NDK学习笔记-NDK开发流程
    NDK学习笔记-NDK开发流程
    NDK学习笔记-JNI的引用
    NDK学习笔记-JNI的引用
  • 原文地址:https://www.cnblogs.com/liming19680104/p/15609565.html
Copyright © 2011-2022 走看看