【问题标题】:color a grayscale image with opencv用opencv为灰度图像着色
【发布时间】:2012-05-28 04:50:33
【问题描述】:

我在一些带有 kinect 传感器的项目中使用 openNI。我想用深度图给用户像素上色。现在我有从白色到黑色的像素,但我想要从红色到黑色。我已经尝试过 alpha 混合,但我的结果只是我的像素从粉红色到黑色,因为我添加(使用 addWeight)红色+白色 = 粉红色。

这是我的实际代码:

layers = device.getDepth().clone();
cvtColor(layers, layers, CV_GRAY2BGR);

Mat red = Mat(240,320, CV_8UC3, Scalar(255,0,0));
Mat red_body; // = Mat::zeros(240,320, CV_8UC3);
red.copyTo(red_body, device.getUserMask());

addWeighted(red_body, 0.8, layers, 0.5, 0.0, layers);

其中 device.getDepth() 返回带有深度图的 cv::Mat,而 device.getUserMask() 返回带有用户像素(仅白色像素)的 cv::Mat

一些建议?

编辑: 还有一件事: 感谢sammy answer 我已经做到了。但实际上我没有从 0 到 255 的值,而是从(例如)123-220 的值。

我将通过一个简单的 for 循环找到最小值和最大值(有更好的方法吗?),我如何将我的值从 min-max 映射到 0-255?

【问题讨论】:

  • 您是否 -unselect- Sammy 的答案?这是一个非常好的答案。我不明白你想如何为你的灰度图像着色。 Mul 是一个不错的解决方案。我认为在您的问题中添加另一部分,取消选择以前正确的答案并等待更多是非常不礼貌的。更不用说 max-min 和 scaling 很容易在参考资料中查找。

标签: opencv colors kinect


【解决方案1】:

首先,OpenCV 的默认颜色格式是 BGR 而不是 RGB。所以,你创建红色图像的代码应该是

Mat red = Mat(240,320, CV_8UC3, Scalar(0,0,255));

对于红色到黑色的颜色映射,您可以使用元素乘法而不是 alpha 混合

Mat out = red_body.mul(layers, 1.0/255);

您可以使用

找到矩阵 M 的最小值和最大值
double minVal, maxVal;
minMaxLoc(M, &minVal, &maxVal, 0, 0);

然后您可以减去 minValue 并使用一个因子进行缩放

double factor = 255.0/(maxVal - minVal);    
 M = factor*(M -minValue)

【讨论】:

  • 我也想知道那个 BGR。但 nkint 说结果是粉红色的。去图吧。
  • 是的,我正在使用 cv::Mat,但我将它们包裹在 gl 纹理中进行绘图.. 好吧.. 实际上我使用的框架就是这样做的
【解决方案2】:

有点笨拙和缓慢,但可能会拆分图层,将 red_body(使其成为单通道 Mat,而不是 3)复制到红色通道,将它们合并回图层?

使用 reshape 获得相同的效果,但速度更快(就地):

layers = device.getDepth().clone();
cvtColor(layers, layers, CV_GRAY2BGR);

Mat red = Mat(240,320, CV_8UC1, Scalar(255)); // One channel
Mat red_body; 
red.copyTo(red_body, device.getUserMask());

Mat flatLayer = layers.reshape(1,240*320); // presumed dimensions of layer
red_body.reshape(0,240*320).copyTo(flatLayer.col(0));

// layers now has the red from red_body

【讨论】:

    猜你喜欢
    • 2011-11-23
    • 1970-01-01
    • 2017-07-31
    • 1970-01-01
    • 2010-12-22
    • 2023-02-22
    • 2023-03-26
    • 2012-12-12
    相关资源
    最近更新 更多