我有一个管道,它记录一个覆盆子π上的图像,通过dcraw将它们转换为tiff,然后估计这三个通道的平均强度(RGB)。
由于转换到tiff是瓶颈,我想知道我是否可以跳过它。更具体而言:
可以直接从原始图像中提取三个通道的平均强度吗?
下面是我正在尝试处理的一幅图像的示例(注意:它的曝光和分辨率都很差,所以不要期望看到任何有趣的东西):https://drive.google.com/file/d/1FNFGuIAw-948c0loj5y4aZTRJK0TpoWB/view?usp=sharing它被收集为:
raspiraw -md 7 -t 1000 -ts /dev/shm/tstamps.csv -hd0 /dev/shm/hd0.32k -h 32 -w 32 --vinc 1F --fps 1 -sr 1 -o /dev/shm/out.%06d.raw到目前为止,我尝试了以下三种选择:
PIL,但抛出UnidentifiedImageError:from PIL import Image
Image.open('image.raw')numpy。这给了我很大的整数;不确定它们如何映射到RGB映像。>> np.fromfile('image.raw', dtype=np.uint16)
array([4112, 4112, 4184, ..., 0, 0, 0], dtype=uint16)raspiraw,但不幸的是,与更新版本的Libraw存在兼容性问题(如0.20.2)。from rawkit.raw import Raw
raw_image = Raw('image.raw')
buffered_image = np.array(raw_image.to_buffer())
Image.frombytes('RGB', (raw_image.metadata.width, raw_image.metadata.height), buffered_image)发布于 2022-05-07 17:45:47
我本人也没有使用过raspiraw,但我认为基于文档这里的方法存在一些根本问题。
首先,PIL不会对原始图像有任何线索,所以您可以忘记您的方法1)。而且,即使您可以使用Numpy读取数据,它也不知道一般的图像处理--尤其是原始图像的显示。所以你还有第三种方法..。
上面我链接到的文档中说,在每个图像上写入Broadcom头会大大降低速度,所以您需要从/dev/shm/hd0.32k中获取一次性的标头,并将其放在任何帧的开头。因此,实际上您需要这样做:
cat /dev/shm/hd0.32k /dev/shm/out.000001.raw > frame1.raw然后尝试选项3代码读取合并的文件frame1.raw。你似乎也知道一些不相容之处,但出于某种原因,你选择不去找出这些知识的来源,所以没有人能帮上忙。
https://stackoverflow.com/questions/72136276
复制相似问题