c++ - 将两个 RGB 图像组合成一个 6 channel 图像 - openCV

标签 c++ opencv

我正在使用 openCV,我需要将两个三 channel RGB 图像组合成一个 6 channel 图像。我不确定我将如何结合它们。有什么想法吗?

最佳答案

首先,您必须创建一个目标矩阵。
cv::Mat 允许创建最多 CV_CN_MAX 的图像(512) 个 channel 。
例如 cv::Mat(cv::Size(640,480),CV_8UC(6)) 是一个具有六个 8 位 channel 的 640x480 图像。更一般地,给定 s 输入,您可以获得一个自适应目标矩阵:

cv::Mat(s.size(), CV_MAKETYPE(s.depth(), 6))

参见 Data typescv::Mat constructor .

您可能想使用 Mat::convertTo 来确保您的两个输入图像具有相同的格式,然后使用 mixChannels :

mixChannels(const Mat *     src,
    size_t      nsrcs,
    Mat *   dst,
    size_t      ndsts,
    const int *     fromTo,
    size_t      npairs 
)   

需要将 2 个源图像放入容器中(请记住,分配矩阵只会创建一个新的 header ,除非明确要求,否则不会复制图像缓冲区)。

最后要做的是创建一个带有 channel 映射的 from_to vector 。给定 s0 和 s1 输入图像,目标是具有以下映射:

s0 red   -> 1st output channel
s0 green -> 2nd
s0 blue  -> 3rd
s1 red   -> 4th
s1 green -> 5th
s1 blue  -> 6th

最终代码将是:

std::vector<cv::Mat> s;
s.resize(2); //Or `push_back` your 2 input images
s[0] = ...   //1st input image
s[1] = ...   //2nd input image
auto d = cv::Mat(s[0].size(), CV_MAKETYPE(s[0].depth(), 6));

int from_to[] = { 0,0, 1,1, 2,2, 3,3, 4,4, 5,5 };
cv::mixChannels(s.data(), s.size(), &d, 1, from_to, 6);

关于c++ - 将两个 RGB 图像组合成一个 6 channel 图像 - openCV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10575699/

相关文章:

c++ - 好奇的 SIGKILL 错误

c++ - GLFW setUserPointer/getUserPointer 发送/访问类崩溃

opencv - 减去两个图像以使用 OpenCV 去除背景

matlab - 从2D图像获取深度图像

c++ 为什么当前面的步骤抛出异常时,std::shared_ptr 的指针引用会被销毁

c++ - 计算文本文件(C++)中的单词

c++ - Windows 10 上 VS 2015 中 nupengl GLFW 的链接错误

bwmorph 的 Python 等价物

ADT 和 Mac OS (10.8) 中的 Android NDK : Cannot run program "/ndk-build": Unknown reason Error: Program "/ndk-build" is not found in PATH

c++ - 我的应用程序在 KNearest::find_nearest 处崩溃