Как записать картинку float32 в видео файл в OpenCV2? - PullRequest
0 голосов
/ 16 января 2019

У меня здесь странная проблема. Я получаю обратно изображение из моей нейронной сети, оно имеет тип dtype float32 . Я добавляю фоновую картинку, которую я взял из интернета, конвертирую ее в float32 из uint8, а затем добавляю свой вывод поверх фоновой картинки. Теперь я хочу сохранить его, но cv2.VideoWriter.write (blahblah) принимает только uint8 . Я думал, что для конвертации float32 в uint8 нужно было бы просто сделать * 255 , но это, вероятно, неправильно, потому что я испытываю некоторые странные блики (мое изображение можно найти здесь: Изображение OpenCV показывает странные блики после не нормализуется с * 255 ), вероятно, из-за классических ошибок с плавающей точкой или тому подобного. Итак, как мне безопасно конвертировать float32 в uint8? Или как мне написать float32 в файл?

Если честно, я очень озадачен некоторыми вещами. Я знаю, что uint8 - это [0, 255], а float32 - [0, 1], и я знаю, что cv2.videowriter.write принимает uint8, вот и все. Что касается примечания, похоже, что решение состоит в том, чтобы изменить все на .astype (uint8) с самого начала, но я выкладываю float32 из моей нейронной сети, поэтому мне приходится с этим работать.

1 Ответ

0 голосов
/ 16 января 2019

Float32 не устанавливает от 0 до 1, что чаще всего выполняется вашей нейронной сетью (softmax или сигмоид как последняя функция активации). Чтобы установить что-то в другой диапазон, это может быть использовано:

normalized_array = (array - np.min(array))/(np.max(array) - np.min(array)) # this set the range from 0 till 1
img_array = (normalized_array * 255).astype(np.uint8) # set is to a range from 0 till 255
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...