1

我使用 OpenCV 和 C++ 设计了一个水平一维向量形式的过滤器。该向量由浮点数据组成。灰度图像的原始uchar数据乘以这个浮点向量作为一维窗口得到结果。但是,我没有得到正确的结果。

当向量元素与图像像素值相乘时,超出了 0-255 的范围,我认为这会导致问题。

有没有办法将此浮点数据类型转换为 uchar 以获得正确的结果?

我现在正在使用Img.at<uchar> = (uchar)(floatVector)

谢谢

4

2 回答 2

1

我会建议您在乘以之后输入 cast...所以将您的uchar图像矩阵转换为CV_32FC1(因为您说它的灰度图像所以通道 = 1)...用您的过滤器对图像进行卷积然后输入 cast 值用于uchar显示可能是..

于 2013-01-13T15:40:56.087 回答
0

您希望在浮点类型中执行乘法运算,并且仅在最后转换回无符号字符。不要忘记也将您的浮点向量归一化(所有值加起来为 1)

所以基本上你想要

Data.at(坐标) = (unsigned char) (floatVector(0)*(Data.at(coord0) + ... + FloatVector(last)*Data.at(coordLast))

于 2013-01-13T18:57:43.713 回答