除cv::merge外,是否有更简便方法给cv::imread读取的cv::Mat加alpha通道?
给cv::Mat添加alpha通道的简便方法
当然有更简洁的方式,不用绕split和merge那一大圈。给你两种更直接的写法:
方法一:转BGRA后直接设置alpha通道
这是最省事的,先把BGR图像转成BGRA格式,然后直接给alpha通道赋值全255:
cv::Mat inputImage = cv::imread("img_name.jpg", cv::IMREAD_COLOR); cv::Mat bgraImage; // 转成带alpha通道的BGRA格式 cv::cvtColor(inputImage, bgraImage, cv::COLOR_BGR2BGRA); // 获取alpha通道的引用并设置为255 bgraImage.colRange(3, 4).setTo(cv::Scalar(255));
方法二:用insertChannel插入alpha通道
如果需要单独控制alpha通道的内容(比如不是全255),可以用这个方法:
cv::Mat inputImage = cv::imread("img_name.jpg", cv::IMREAD_COLOR); cv::Mat bgraImage; // 先转成BGRA格式(初始alpha为0) cv::cvtColor(inputImage, bgraImage, cv::COLOR_BGR2BGRA); // 创建自定义的alpha通道(这里是全255) cv::Mat alpha(inputImage.size(), CV_8UC1, cv::Scalar(255)); // 将alpha通道插入到BGRA图像的第4个通道(索引从0开始) cv::insertChannel(alpha, bgraImage, 3);
对比你原来的代码,这两种方法都省去了拆分和合并通道的步骤,代码更简洁,执行效率也和原方案持平(底层都是内存操作)。
内容的提问来源于stack exchange,提问作者yonutix
相关产品推荐
相关产品推荐

