我必须将图像的RBG保持在3个不同的向量中(每种颜色一个)。然后,对于所有向量,我计算在它们中找到的[0; 255]区间中每个像素的表面数。我必须将此[0; 255](像素范围)区间分成N个区间,并使每个区间的总和,使用以下公式:
[x * 256 / N; x * 256 / N + 256 / N)
x< = N
N大于等于16。 到目前为止,我的代码适用于除以256的N,其余的我得到"索引超出范围" 。 我认为公式实现在某种程度上是错误的。但我不知道如何解决它。
答案 0 :(得分:1)
你得到的索引超出范围'因为int16(256/N)
中的四舍五入。
N = 16 ... int16(256/N) = 16 (no rounding)
N = 19 ... int16(256/N) = 13 (13.47 is rounded to 13)
N = 20 ... int16(256/N) = 13 (12.80 is rounded to 13)
有时候结果会四舍五入到下一个较小的值,有时会变为下一个更大的值(即超出界限时)。
解决方案:使用floor(256/N)
代替int16(256/N)
。