Вы загружаете изображение как uint8, но при суммировании float вы получаете float. Чтобы увидеть результат, вам нужно снова привести его к типу int.
Попробуйте это
cv2.imshow('Noisy', fast.astype(np.uint8))
Конечно, вы получите изменение в значении только тогда, когда шум достаточно велик, чтобы значение пикселя переместилось с одного целого на другое.
В качестве альтернативы вы можете работать в диапазоне [0,1] или [-1, 1], используя scikit-image, который часто использует эти другие соглашения.
[Дополнительные разъяснения]
cv2.imshow работает как объяснено в этом потоке переполнения стека -> LINK
Таким образом, вы должны решить, использовать ли плавающие изображения в диапазоне [0, 1] или изображения uint8 в диапазоне [0, 255] или изображения uint16 / uint32 с большим целочисленным диапазоном. Поскольку стохастические функции часто генерируют в небольшом диапазоне с плавающей точкой около 0, я предлагаю вам преобразовать ваше изображение, разделив его на 255,0, чтобы получить его в диапазоне [0, 1] с плавающей точкой и работать оттуда.