为什么我不能用Jupyter预览我的TIFF图像?为什么我没有用这些TIFF图像制作视频?

问题描述 投票:-1回答:1

我有一个包含很多.tif图像的文件。

第1部分.TIFF图像的预览

当我尝试通过在jupyter文件夹(看起来像这个the Jupyter folder)中点击它们来观看它们时,我得到以下消息:

错误! D:... \ image.tif不是UTF-8编码的

相反,如果我点击Jupyter文件夹中的png,Jupyter会显示图像。

我怎么能修复我的图像,知道我的文件夹中有超过1000个?

但是,如果我写:

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

我得到的图像:image of '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()

但是,我得到的是一个奇怪的视频,而不是获得预期的视频,只有一步:caption of the video。您可以将其与上图进行比较,以检查它是否正常。

我该如何解决这个问题?

python image tiff utf
1个回答
1
投票

将图像中的字节从ASCII转换为UTF-8只比将它们从华氏温度转换为摄氏温度稍微更有意义,或者将它们转换为B♭major。如果你能找到一种技术上的方法,它所能做的就是破坏图像。实际上,这完全是一个红色的鲱鱼,与您的视频转换问题完全无关。

像ASCII和UTF-8这样的文本编码描述了字符在代码点或字形与计算机表示之间的映射方式。图像文件中没有文字;它只是一堆像素。也许还可以看一下2003年开创性的博客文章The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

此外,由于UTF-8与ASCII兼容,因此每个ASCII文件通常都是UTF-8文件。您无法应用任何转换来使其“更多UTF-8”。

另一方面,二进制格式通常具有完全不同的内部结构。对于仅图像,平凡格式可以简单地将每个黑色像素编码为1位并且将每个白色像素编码为0位。 (事实上​​,TIFF的第一个版本正是如此,还有一些额外的装饰。)例如,您可以为每个字节添加一个常量,但这只会将其转换为不再包含有效图片的混乱。检查如果将一个数字添加到63这样的数字中会发生什么,该数字在其二进制表示的下半部分中有很多1位:

 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和谷歌搜索有点比较表明,将0作为fourcc参数传递可能是你的问题的根源。

© www.soinside.com 2019 - 2024. All rights reserved.