Когда я пишу изображение, оно кажется черным

У меня есть программа, которая возвращает изображение grayscale. Но, когда я пытаюсь записать образ, он выглядит полностью black. Почему это? Как я могу написать образ и получить ожидаемый результат?

Спасибо.


person Simplicity    schedule 13.11.2013    source источник
comment
попробуйте один из них: imshow(img,[]) или imshow(uint8(img)). Если это работает, причина указана в ответе ниже. Ваши значения были слишком низкими для отображения или не соответствовали классу.   -  person Autonomous    schedule 13.11.2013


Ответы (3)


Сначала проверьте тип ваших данных. Вы можете привести тип данных, например, double() или uint16() и т. д. (Проверьте справку по приведению типов). Вот пример того, как вы перемасштабируете свои значения в диапазоне интенсивности uint16, целых чисел без знака с ~ 65k возможных различных значений. Кастинг, конечно, приводит к меньшей точности значений интенсивности.

new_img(:,:) = uint16((new_img(:,:)./max(max(new_img(:,:),[],1)))*65536);

После этого вы сможете записать данные в свой файл.

person Barkel    schedule 13.11.2013
comment
Здесь кажется, что сохраненное изображение будет двоичным? - person Simplicity; 13.11.2013
comment
Чтобы добавить к Баркелю его комментарий: тип файла (расширение: например, * .jpeg), который вы хотите сохранить, имеет значение. Допустим, вы используете функцию imwrite, тогда вы также хотите подумать о типе файла, в котором вы хотите сохранить. Не все типы файлов принимают все типы данных. Для меня простой трюк, который чаще всего работает, — это использовать функцию mat2gray на вашем изображении, прежде чем вы захотите его сохранить. Но помните, что это может привести к нежелательному масштабированию данных. - person Martin; 14.08.2019

Убедитесь, что ваше изображение в градациях серого относится к нужному классу. Кроме того, проверьте значения в сгенерированном изображении. Если они просто слишком низкие, все будет выглядеть черным. Если вы можете предоставить более конкретную информацию, возможно, вы сможете дать более развернутый ответ.

person Martin    schedule 13.11.2013

если вы работаете с двоичным изображением (до преобразования в серый) и собираетесь преобразовать его в оттенки серого, то вы внезапно изменяете диапазон пикселей с [0, 1] на [0, 255]. поэтому значение «1» в двоичном изображении полностью белое, а в изображении в градациях серого почти черное.

попробуй это:

img = imread('image_name.jpg');
imshow(img*50)

это гарантирует, что ваше изображение черное или просто его значения пикселей не подходят.

person Jalal Aghazadeh    schedule 13.11.2013