that truncates. it’s literally a double to int32 cast (double because python float literals are double and np.array respects that). such a cast, by whatever requirements (CPU architecture, whatever, I don’t care), is a truncation. numpy is striving to be very predictable with these things.
that does some math in the background. probably even saturating math. OpenCV does “stuff”.
always think about your numerical conversions, decide what behavior you want, and make sure it’s done explicitly.