获取特定通道后,如何将它们转换回原始的BGR格式?
时间: 2024-11-25 20:13:03 浏览: 3
在 OpenCV 中,当你已经分别提取了 BGR 图像的 R、G 和 B 通道之后,想要组合成原始的 BGR 格式,你需要重新创建一个新的 Mat,并将三个通道按照 BGR 的顺序堆叠起来。以下是一个简单的示例:
```cpp
cv::Mat b_channel, g_channel, r_channel; // 假设已提取到各个通道
// 创建一个新矩阵,维度与原图相同
cv::Mat new_img(height, width, CV_8UC3); // CV_8UC3 表示8位无符号颜色空间,有3个通道
// 将通道数据复制到新的 Mat 中,注意顺序是 BGR
new_img.col(0) = b_channel.reshape(1); // 第0列对应B通道
new_img.col(1) = g_channel.reshape(1); // 第1列对应G通道
new_img.col(2) = r_channel.reshape(1); // 第2列对应R通道
// 或者直接一行行地拼接
for (int i = 0; i < height; ++i)
{
for (int j = 0; j < width; ++j)
{
new_img.at<cv::Vec3b>(i, j) = cv::Vec3b(b_channel.at<uchar>(i, j), g_channel.at<uchar>(i, j), r_channel.at<uchar>(i, j));
}
}
new_img = new_img.clone(); // 如果需要深拷贝防止引用错误
```
这里我们假设 `b_channel`, `g_channel`, 和 `r_channel` 都已经被转换为单通道(uchar 类型,因为它们是从原始的 BGR 图像中提取出来的),而 `new_img` 则是一个全新的 BGR 图像。
阅读全文