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

发布于 2025-01-12 05:09:11 字数 817 浏览 0 评论 0原文

我正在研究分析细胞旋转的项目。该信息存储在包含细胞图像的 .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-species.pdf

这是 .dat 的示例文件:

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

颜色模式为灰度

相机特性

I am working on project to analyze the rotation of cells. The information is stored in a .dat file that contains an image of a cell. I have to convert it to a tiff file then concatenate all the images to have an avi video.
The problem is that I didn't find documentation about dat and tiff files.
and when I try to open a .dat file using Python I get this error message :

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x9f in position 1: invalid start byte

The camera is Andor Neo5.5 scmos(https://andor.oxinst.com/assets/uploads/products/andor/documents/andor-neo-scmos-specifications.pdf)

and this is an example of a .dat file :

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

Color mode is GrayScale

Characteristics of the camera

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

高跟鞋的旋律 2025-01-19 05:09:11

根据 AndorSDK 和一些逆向工程,38.dat 文件包含一个 4 字节整数,指定后面的数据长度,后面是 Mono12Packed 编码的帧数据和一些附加元数据,全部采用小端字节顺序。

.DAT 文件序列中的帧数据可以解码并写入多页 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
        )

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

According to the AndorSDK and some reverse engineering, the 38.dat file contains a 4 byte integer, specifying the length of the data to follow, followed by the Mono12Packed encoded frame data and some additional metadata, all in little-endian byte order.

The frame data from a sequence of .DAT files can be decoded and written to a multi-page TIFF file without precision loss. Some metadata from the DAT files is lost:

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
        )

Depending on the total size of the frame data, use compression and/or the BigTIFF format. When saving the frame data as AVI, some data will be lost.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文