reshape, crop = {
1: ((1952, 3264), (1944, 3240)),
2: ((2480, 4128), (2464, 4100)),
}
offset = {1: 6404096, 2: 10270208,}[ver]
#where ver is defined as a dictionary
ver = {
'RP_ov5647': 1,
'RP_imx219': 2,
}[camera.exif_tags['IFD0.Model']]
这些是什么结构? ver
报告为int类型。我糊涂了。
[ver]在offset
的作业中如何运作?
答案 0 :(得分:0)
让我们看看......
1
这里定义了一个包含密钥2
和reshape
的字典。附在每个键上的是一个元组元组。我相信真实代码中有更多条目,最后一项是逗号。但是,大多数此对象都会丢失到垃圾回收中。对crop
和reshape = 1
crop = 2
的元组分配将导致仅存储密钥。所以这件事的结果与:
offset = {1: 6404096, 2: 10270208,}[ver]
有趣,如果没用。下一步...
1
所以这里定义了另一个带有键2
和ver
的字典以及与它们相关联的长整数值。然后,它使用offset
将此字典编入索引,并将此索引处的值指定为ver
。由于尚未定义#where ver is defined as a dictionary
ver = {
'RP_ov5647': 1,
'RP_imx219': 2,
}[camera.exif_tags['IFD0.Model']]
,这实际上会导致异常。假设在前一个代码之前给出了以下代码:
'RP_ov5647'
这里我们还有另一本字典。这次密钥为'RP_imx219'
和1
,其值为2
和camera.exif_tags['IFD0.Model']
。此字典的索引值为camera.exif_tags
。假设'IFD0.Model'
是具有键控索引的对象,其中一个索引为'RP_ov5647'
,结果值为'RP_imx219'
或ver
,1
将被分配2
或6404096
。
因此,1或2将用于索引我们的上述偏移值,从而导致偏移分配为10270208
或bytes
简而言之,它完全是语法上有效的一堆。谢谢分享。
答案 1 :(得分:-1)
首先,你的初始陈述不会做你想要的(我认为):你在作业的左边有两个变量,但只有一个值 - 一个字典 - 在对。我认为你最后会遗漏[ver]
。如上所述,该语句将构建字典,提取键(1,2),并将它们分配给变量,忽略维度元组。
上面的变量ver
是您在字典中查找的整数。
此代码似乎旨在从模型名称开始,并根据该模型查找适当的参数。让我们按照正确的顺序查看代码,并使用几个中间变量。
# Dictionary to look up version number (1 or 2),
# given the model name.
model_to_version = {
'RP_ov5647': 1,
'RP_imx219': 2,
}
# Get the model name from the camera info object.
# Here on Stack Overflow, we have no idea of the structure,
# but merely have to trust that this works.
model_name = camera.exif_tags['IFD0.Model']
# Now, get the version number we're using as an internal key.
# This will return 1 or 2.
version = model_to_version[model_name]
# The offset look-up is unchanged.
offset = {1: 6404096, 2: 10270208}[version]
# Dictionary to look up sizing information (shape & crop).
# Each entry is a pair of x-y dimension pairs.
size_info = {
1: ((1952, 3264), (1944, 3240)),
2: ((2480, 4128), (2464, 4100)),
}
# Finally, look up the proper set of sizes:
shaping, crop = size_info[ver]
完成所有这些操作后,我们为shaping
和crop
提供了此相机模型的相应尺寸,并且offset
在输入流中具有相应的像素偏移(我假设)
这就是你需要的吗?