将一堆 .dat 文件(图像)转换为 avi 文件?

Converting a bunch of .dat files(images) to an avi file?

我正在研究分析细胞旋转的项目。信息存储在包含细胞图像的 .dat 文件中。我必须将其转换为 tiff 文件,然后将所有图像连接起来以获得 avi 视频。 问题是我没有找到有关 dat 和 tiff 文件的文档。 当我尝试使用 Python 打开 .dat 文件时,我收到此错误消息:

UnicodeDecodeError:'utf-8'编解码器无法解码位置 1 中的字节 0x9f:起始字节无效

相机是Andor Neo5.5 scmos(https://andor.oxinst.com/assets/uploads/products/andor/documents/andor-neo-scmos-specifications.pdf)

这是 .dat 文件的示例:

https://drive.google.com/file/d/180VuU7XO9suUK0v8G1mlQu_ZGRdUHD0z/view?usp=sharing

颜色模式为灰度

Characteristics of the camera

根据AndorSDK和一些逆向工程,38.dat文件包含一个4字节的整数,指定要跟随的数据长度,后面是Mono12Packed编码的帧数据和一些额外的元数据,全部按 little-endian 字节顺序排列。

来自一系列 .DAT 文件的帧数据可以被解码并写入 multi-page TIFF 文件,而不会丢失精度。 DAT 文件中的一些元数据丢失:

import glob
import numpy
import tifffile

width = 2560
height = 2160

datfiles = glob.glob('*.dat')

with tifffile.TiffWriter('datfiles.tif', bigtiff=False) as tif:
    for datfile in datfiles:
        data = numpy.fromfile(
            datfile,
            count=width * height * 3 // 2,  # 12 bit packed
            offset=4,  # 4 byte integer header
            dtype=numpy.uint8,
        ).astype(numpy.uint16)
        image = numpy.zeros(width * height, numpy.uint16)
        image[0::2] = (data[1::3] & 15) | (data[0::3] << 4)
        image[1::2] = (data[1::3] >> 4) | (data[2::3] << 4)
        image.shape = height, width
        tif.write(
            image, photometric='minisblack', compression=None, metadata=None
        )

根据帧数据的总大小,使用压缩and/orBigTIFF格式。将帧数据保存为AVI时,会丢失部分数据