gpt4 book ai didi

opencv - 使用 opencv 为灰度图像着色

转载 作者:太空宇宙 更新时间:2023-11-03 20:57:19 27 4
gpt4 key购买 nike

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

这是我的实际代码:

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?

最佳答案

首先,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)

关于opencv - 使用 opencv 为灰度图像着色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10689456/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com