我使用 OpenCV 和 C++ 设计了一个水平一维向量形式的过滤器。该向量由浮点数据组成。灰度图像的原始uchar数据乘以这个浮点向量作为一维窗口得到结果。但是,我没有得到正确的结果。
当向量元素与图像像素值相乘时,超出了 0-255 的范围,我认为这会导致问题。
有没有办法将此浮点数据类型转换为 uchar 以获得正确的结果?
我现在正在使用Img.at<uchar> = (uchar)(floatVector)
。
谢谢
我使用 OpenCV 和 C++ 设计了一个水平一维向量形式的过滤器。该向量由浮点数据组成。灰度图像的原始uchar数据乘以这个浮点向量作为一维窗口得到结果。但是,我没有得到正确的结果。
当向量元素与图像像素值相乘时,超出了 0-255 的范围,我认为这会导致问题。
有没有办法将此浮点数据类型转换为 uchar 以获得正确的结果?
我现在正在使用Img.at<uchar> = (uchar)(floatVector)
。
谢谢
我会建议您在乘以之后输入 cast...所以将您的uchar
图像矩阵转换为CV_32FC1
(因为您说它的灰度图像所以通道 = 1)...用您的过滤器对图像进行卷积然后输入 cast 值用于uchar
显示可能是..
您希望在浮点类型中执行乘法运算,并且仅在最后转换回无符号字符。不要忘记也将您的浮点向量归一化(所有值加起来为 1)
所以基本上你想要
Data.at(坐标) = (unsigned char) (floatVector(0)*(Data.at(coord0) + ... + FloatVector(last)*Data.at(coordLast))