Хобрук: Ваш путь к мастерству в программировании

Преобразование формата изображения из 32FC1 в 16UC1

Мне нужно закодировать изображение в формате 16UC1, но я получаю сообщение об ошибке: cv_bridge.core.CvBridgeError:кодировка указана как 16UC1, но изображение имеет несовместимый тип 32FC1

Я пытался использовать функцию skimage img_as_uint, но поскольку значения моего изображения не находятся между -1 и 1, это не работает. я также пытался «нормализовать» свои значения, разделив их все на значение, полученное из np.amax, но использование функции skimage возвращает только пустое изображение.

Есть ли способ добиться этого преобразования?

Это исходное изображение 32FC1.


  • Пожалуйста, предоставьте код, чтобы мы могли диагностировать вашу проблему :) 13.12.2019

Ответы:


1

С numpy вы сможете:

import numpy as np
img = np.random.normal(0, 1, (300, 300, 3)).astype(np.float32) # simulated image
uimg = img.astype(np.uint16)

Вы, вероятно, сначала захотите выполнить какую-то нормализацию, если она еще не находится в беззнаковом диапазоне. Вероятно, что-то вроде:

img_normalized = (img-img.min())/(img.max()-img.min())*256**2

Но ваша стратегия нормализации будет зависеть от того, чего вы хотите достичь.


Спасибо, что поделились изображением. Я могу представить себе следующее:

import numpy as np
import matplotlib.pyplot as plt

arr = np.load('32FC1_image.npz')
img = arr['arr_0']
img = np.squeeze(img) # this gets rid of the extra dimensions that are causing matplotlib to not recognize it as an image, the extra dimensions also may be causing your problems
img_normalized = (img-img.min())/(img.max()-img.min())*256**2
img_normalized = img_normalized.astype(np.uint16)
plt.imshow(img_normalized)

Попробуйте использовать нормализованное 16-битное изображение.

13.12.2019
  • Это возвращает черное изображение при использовании cv_bridge 14.12.2019
  • Это неудивительно, это, вероятно, связано с нормализацией, вероятно, означает, что для применяемой палитры выбрасывается большое значение. Можете ли вы предоставить пример изображения? Вы можете сохранить исходный 32FC1 с помощью np.savez('myfile.npz', myimg), а затем загрузить. 14.12.2019
  • У меня есть файл .npz, но я не знаю, как его загрузить 15.12.2019
  • Вы можете попробовать этот сервис и поделиться ссылкой: filedropper.com 16.12.2019
  • я добавил ссылку 17.12.2019
  • Я не могу открыть с помощью np.load('myfile.npz'), вы можете загрузить? 17.12.2019
  • Это работает, просто нужно было добавить plt.show() в конце 21.12.2019
  • Новые материалы

    Учебные заметки JavaScript Object Oriented Labs
    Вот моя седьмая неделя обучения программированию. После ruby ​​и его фреймворка rails я начал изучать самый популярный язык интерфейса — javascript. В отличие от ruby, javascript — это более..

    Разбор строк запроса в vue.js
    Иногда вам нужно получить данные из строк запроса, в этой статье показано, как это сделать. В жизни каждого дизайнера/разработчика наступает момент, когда им необходимо беспрепятственно..

    Предсказание моей следующей любимой книги 📚 Благодаря данным Goodreads и машинному обучению 👨‍💻
    «Если вы не любите читать, значит, вы не нашли нужную книгу». - J.K. Роулинг Эта статья сильно отличается от тех, к которым вы, возможно, привыкли . Мне очень понравилось поработать над..

    Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
    каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

    Как настроить Selenium в проекте Angular
    Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..