【发布时间】:2017-11-09 13:46:30
【问题描述】:
如何实现 RGB 通道的值
- 浮点数据类型
- 强度范围在0-255之间
我使用 CV_32FC4 作为矩阵类型,因为我将执行浮点数学运算来实现道尔顿化。我期待强度范围与 CV_8UC3 中 RGB 通道的强度范围相同,只是具有不同的数据类型。但是当我打印矩阵时,我注意到通道的强度不在 0-255 范围内。我意识到这是由于浮动matrix type 的范围。
Mat mFrame(height, width, CV_32FC4, (unsigned char *)pNV21FrameData);
for(int y = 0 ; y < height ; y++){
for(int x = 0 ; x < width ; x++){
Vec4f BGRA = mFrame.at<Vec4f>(y,x);
// Algorithm Implementation
mFrame.at<Vec4f>(y,x) = BGRA;
}
}
Mat mResult;
mFrame.convertTo(mResult, CV_8UC4, 1.0/255.0);
我需要像BGRA[0] = BGRA[0] * n; 这样操作像素,然后将其分配回矩阵。
【问题讨论】:
-
浮点矩阵
mFrame的范围是多少? -
当我打印浮点矩阵时,我得到了像 2.3693558e-38 这样的值
-
你的
pNV21FrameData来自哪里,它已经在浮动了吗?或者是其他东西?您可以在 0-255.... 的浮点矩阵中获取数据,然后您不需要执行 1.0/255.0。仅当它在 0-1 的范围内时才需要 -
This 是原始代码。
-
我不确定使用 CV_8UC4 作为矩阵类型,然后转换数据类型(char 到 float),操作像素然后将其转换回来。