0

再会!

我似乎无法为我想要在 OpenCV 中完成的工作找到合适的术语。情况如下:

我有一个灰度图像和颜色(BGR)。

我想将颜色“应用”到灰度图像,但保留亮度并在之后保存。

我最初的思考过程是:

  1. 将 BGR 颜色转换为 Luv
  2. 从灰度图像中替换 L
  3. 将最终图像转换为 BGR 并保存

这是我到目前为止所做的:

        cv::Mat pixelColor(1, 1, CV_8UC3, cv::Scalar(0));
        pixelColor.at<cv::Vec3b>(1, 1) = cv::Vec3b(128, 255, 0); // currently hard-coded but it actually comes from another source
        cv::cvtColor(pixelColor, pixelColor, CV_BGR2Luv);
        pixelColor.at<cv::Vec3b>(1, 1)[0] = image.at<unsigned char>(y, x);
        cv::cvtColor(pixelColor, pixelColor, CV_Luv2BGR);

我遍历了我的灰度图像的所有 y 和 x。实际颜色来自其他地方,但保证是 BGR。

我的问题是:(1)这个过程的正确术语是什么?(2)我哪里错了?

4

1 回答 1

0

我想您可以将此过程称为频道交换或频道替换?您不需要显式迭代图像中的像素。

将 LUV 图像 split() 成 Mats 的向量可能是最简单的。

vector<Mat> channels;
cv::split(LUVMAT,channels);

这会在向量中为您提供 3 个单通道 Mats L、U 和 V。

然后使用标准向量操作将向量中的“L”Mat 替换为灰度(单通道)Mat。最后,将结果合并回一个 3 通道 Mat。

Mat newLuma;
cv::merge(temp,newLuma);

然后将“newLuma”转换回BGR。

于 2016-04-18T22:17:38.197 回答