opencv-mixChannels通道复制

方式一

复制代码
#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;
}
复制代码

 

 

 

 

 

 

 

 

 

posted @   天子骄龙  阅读(160)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
历史上的今天:
2020-11-26 Arduino--单向倾斜开关
2019-11-26 python--AutoPy库
点击右上角即可分享
微信分享提示

目录导航