【OpenCV】将单通道的Mat对象转换为三通道的Mat

本文介绍了在项目中遇到需要将单通道二值化图像转换为三通道彩色图像的问题,通过分析发现可以通过复制单通道图像并merge成三份来实现。实验证明这种方法可行。

在项目中遇到一个问题,调用别人编好的库需要传入三通道的彩色图像。但是我的图像经过处理后已经是二值化的图像了,所以得想想办法了。
分析:三通道的彩色图像就是R,G,B三个通道,那么将我的单通道黑白图复制三份merge一下,不就是一张三通道图像了嘛,只不过有颜色只有黑白,实验了一下果然可以用了。
废话不多说,上代码:

/*************************************************
//  Method:    convertTo3Channels
//  Description: 将单通道图像转为三通道图像
//  Returns:   cv::Mat 
//  Parameter: binImg 单通道图像对象
***********************************
OpenCV中,将单通道的`Mat`对象转换为`vector`进行保存,可以通过以下几种方式实现: ### 方法一:按行遍历 ```cpp #include <opencv2/opencv.hpp> #include <iostream> #include <vector> int main() { cv::Mat singleChannelMat = cv::imread("single_channel_image.jpg", cv::IMREAD_GRAYSCALE); std::vector<uchar> data; for (int i = 0; i < singleChannelMat.rows; ++i) { for (int j = 0; j < singleChannelMat.cols; ++j) { data.push_back(singleChannelMat.at<uchar>(i, j)); } } std::cout << "Vector size: " << data.size() << std::endl; return 0; } ``` ### 方法二:使用指针访问 ```cpp #include <opencv2/opencv.hpp> #include <iostream> #include <vector> int main() { cv::Mat singleChannelMat = cv::imread("single_channel_image.jpg", cv::IMREAD_GRAYSCALE); std::vector<uchar> data; data.reserve(singleChannelMat.rows * singleChannelMat.cols); for (int i = 0; i < singleChannelMat.rows; ++i) { uchar* rowPtr = singleChannelMat.ptr<uchar>(i); for (int j = 0; j < singleChannelMat.cols; ++j) { data.push_back(rowPtr[j]); } } std::cout << "Vector size: " << data.size() << std::endl; return 0; } ``` ### 方法三:使用`data`指针 ```cpp #include <opencv2/opencv.hpp> #include <iostream> #include <vector> int main() { cv::Mat singleChannelMat = cv::imread("single_channel_image.jpg", cv::IMREAD_GRAYSCALE); std::vector<uchar> data(singleChannelMat.data, singleChannelMat.data + singleChannelMat.total()); std::cout << "Vector size: " << data.size() << std::endl; return 0; } ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值