由于表达式的结果可能超出的有效范围uchar
,即[0,255]
,最好始终使用saturate_cast
。
在您的情况下,表达式:的结果alpha*(image.at
是双精度型,因此使用它来更saturate_cast
正确地钳位值更安全。
同样,由于可以很容易地看出您想要uchar
表达式之外,因此可以提高可读性。
如果不使用saturate_cast
,则可能会有意外的值:
uchar u1 = 257; // u1 = 1, why a very bright value is set to almost black? uchar u2 = saturate_cast(257); // u2 = 255, a very bright value is set to white