Почему я не могу предварительно просмотреть изображения в формате TIFF с помощью Jupyter?И почему я не могу сделать видео из этих изображений TIFF? - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть файл с большим количеством изображений .tif.

Часть 1. Предварительный просмотр изображений TIFF

Когда я пытаюсь просмотреть их, нажимая на нихв папке jupyter (которая выглядит как эта папка Jupyter ) я получаю следующее сообщение:

Ошибка!D: ... \ image.tif не в кодировке UTF-8

Напротив, если я нажимаю png в папке Jupyter, Jupyter отображает изображение.

Как я могу исправить свои изображения, зная, что в моей папке их более 1000?

Тем не менее, если я напишу:

sph = cv2.imread('A1.tif',-1)
plt.imshow(sph)
plt.show()

, я получу изображение: изображение 'A1.tif' .

Теперь я тоже проверил:

import chardet
chardet.detect('A1.det')
--> {'confidence': 1.0, 'encoding': 'ascii', 'language': ''}  # result

Так что видимо я закодирован в ascii.Это так же, как utf-8 или я должен конвертировать их?

Редактировать: Ответ: В одном из комментариев @FabienP отвечает, что «Согласно официальной документации, лаборатория Jupyter не поддерживает формат TIFF для предварительного просмотра изображений (на данный момент)», чтоотвечает на этот вопрос.

Часть 2: написание видео из изображений TIFF

У меня есть еще один вопрос, и я не знаю, связаны ли оба вопроса.

Я хочу сделать из них видео.

import cv2
import os
image_folder = 'A549_A1'
video_name = 'video.avi'

images = [img for img in os.listdir(image_folder) if img.endswith(".tif")]
frame = cv2.imread(os.path.join(image_folder, images[0]))
height, width, layers = frame.shape

video = cv2.VideoWriter(video_name, 0, 1, (width,height))

for image in images:
     video.write(cv2.imread(os.path.join(image_folder, image)))

cv2.destroyAllWindows()
video.release()

Но вместо того, чтобы получить ожидаемое видео, я получаю странное изображение со множеством изображений за один шаг: заголовок видео.Вы можете сравнить его с изображением выше, чтобы убедиться, что это не нормально.

Как я могу это исправить?

1 Ответ

0 голосов
/ 27 февраля 2019

Преобразование байтов в изображении из ASCII в UTF-8 имеет лишь немного больший смысл, чем преобразование их из Фаренгейта в Цельсий или их перенос в мажор.Если вы можете найти способ сделать это технически, все, что он сделает, это разрушит изображение.Действительно, это полностью красная сельдь, и она абсолютно не связана с вашей проблемой преобразования видео.

Текстовые кодировки, такие как ASCII и UTF-8, описывают, как символы отображаются между кодовыми точками или глифами и компьютерными представлениями.В файле изображения нет текста;это просто куча пикселей.Возможно, смотрите также оригинальный блог 2003 года Абсолютный минимум Каждый разработчик программного обеспечения Абсолютно, положительно должен знать о Unicode и наборах символов (без оправданий!)

Более того, потому чтоUTF-8 совместим с ASCII, каждый файл ASCII уже тривиально является файлом UTF-8.Нет преобразования, которое вы можете применить, чтобы сделать его «более UTF-8».

Двоичные форматы, с другой стороны, обычно имеют внутреннюю структуру, которая совершенно иная.Для простого изображения тривиальный формат может просто кодировать каждый черный пиксель как 1 бит, а каждый белый пиксель - как 0 бит.(Фактически, самая первая версия TIFF сделала именно это, с несколькими дополнительными наворотами.) Например, вы можете добавить константу к каждому байту, но это просто превратит ее в беспорядок, который небольше содержит действительную картинку.Изучите, что произойдет, если вы добавите единицу к числу, подобному 63, у которого много двоичных разрядов в младшей половине в его двоичном представлении:

 63    0011 1111      ..XX XXXX  <- sequence of black pixels
+ 1  + 0000 0001      .... ...X
---- -----------     ----------
 64    0100 0000      .X.. ....  <- one black pixel, lots of white

Современные двоичные форматы немного более сложны и часто содержатПоследовательности заголовков, которые указывают, сколько байтов данных следует или где искать конкретную функцию для заполнения структуры данных в памяти.Замена этих значений другими значениями почти наверняка создаст поток, который просто поврежден, если вы точно не знаете, что делаете.


Сравнение с https://stackoverflow.com/a/34555939/874188 и поиск в Google немного предполагает, что передача0 как параметр fourcc может быть источником ваших проблем.

...