原始 CR2 图像旋转并保存未压缩以访问像素 RGB



这是一个有缺陷的问题。我正在投票关闭或删除它。出于我的目的,我应该保持原始(或最小插值(格式。

我需要先将CR2图像旋转几度,然后从特定位置提取像素RGB。这是为了科学,而不是美学,所以我非常关心捕获值是什么。这些照片是用Cannon EOS 5D(约2012年(拍摄的。我知道如何使用枕头图像(但不是原始文件(旋转和处理图像。我想我可以自己在内存中转换像素,但希望不必这样做。

我的计划是首先使用一些原始图像处理模块(如rawpy(来读取RGB像素并将其保存为某种未压缩的格式(.tiff?(,以便它们尽可能接近捕获的内容,然后使用Pillow旋转图像并重新保存。

但是,每当我读取并保存带有rawpy的CR2图像时,它们甚至与Photoshop渲染CR2图像的方式不匹配。两者的匹配也不是同时拍摄的压缩 JPG 版本。例如,太阳的日冕在所有三个方面都是不同的。

以下是我正在做的事情的MWE:

import sys
import argparse
import rawpy
from PIL import Image as Img
def main():
parser = argparse.ArgumentParser(description='', formatter_class=argparse.RawTextHelpFormatter)
parser.add_help = True
parser.add_argument('filepath', help='a raw image file')
args = parser.parse_args()
raw = rawpy.imread(args.filepath)
rgb = raw.postprocess(use_auto_wb=True)
#rgb = raw.postprocess(use_camera_wb=True)
Img.fromarray(rgb).save(args.filepath + '.tiff')
raw.close()
if __name__ == '__main__':
main()

这是原始的CR2图像。
这是几乎同时由同一相机拍摄的JPG版本。
这是原始结果保存到带use_auto_wb的.tiff。
这是原始结果保存到带use_camera_wb的.tiff。

我认为这一切都与"曝光补偿"和"白平衡"有关,但说实话,我不是原始图像的专家。我不知道我是否只是在做一些愚蠢的事情,或者我应该使用不同的管道来完成我想要做的事情。我想要最简单的 Python 管道来打开 CR2 并将 RGB 值转换为未压缩的格式,以便我可以旋转和提取。但是我现在担心CR2文件中的值是什么,并希望以最准确的方法来提取它们。我想正如下面的评论所暗示的那样,没有正确的方法,因为将原始图像渲染为正格式所涉及的所有过程。

Python 3.5.2 枕头 4.3.0 原始 0.13.1
numpy 1.14.2


我知道这些有更新的版本,但我正处于一个为期几年的项目中间,所以宁愿不升级,以免引入微妙的变化。

它不适合评论,但是...

当您制作"原始">照片时,您基本上会记录所有未经处理的信息和图像传感器的原始信息,以便获得尽可能多的信息,以便您以后使用Photoshop或Lightroom等复杂软件在全尺寸,高性能计算机上对图像进行解释。当您录制JPEG时,您放弃了大量信息,并允许相机内芯片对白平衡,色彩空间,曝光,剪切和高光补偿以及从12/14位转换为8位做出任意决定。实际上没有任何正确或准确的版本,或正确准确的RGB信息,这都是主观的。

最新更新