2017-07-07 80 views
-8
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的作業中如何工作?Python數據類型,它是什麼樣的數據結構?

+0

類型是什麼?我只看字典。 – Carcigenicate

+1

「我很困惑」我們也是。 – DeepSpace

+0

你指的是什麼*「it」*?爲什麼要建立一個字典,然後分配它的鍵(整數),但完全忽略它的值(整數元組的元組)?你想做什麼*? – jonrsharpe

回答

0

讓我們來看看這裏...

reshape, crop = { 
1: ((1952, 3264), (1944, 3240)), 
2: ((2480, 4128), (2464, 4100)), 
} 

這這裏定義與鍵12字典。附加到每個鍵是一個元組元組。我相信真正的代碼中有更多的條目,最後一個條目的逗號。但是,這個對象的大部分都會因垃圾收集而丟失。元組分配到reshapecrop將導致只有密鑰被存儲。所以這個東西的結果是一樣的:

reshape = 1 
crop = 2 

有趣的,如果沒用。下一步...

offset = {1: 6404096, 2: 10270208,}[ver] 

所以這這裏定義了密鑰12和與它們相關的長整型值另一個字典。然後它使用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',其值爲12。本詞典的索引值爲camera.exif_tags['IFD0.Model']。假設camera.exif_tags是帶鍵控索引的對象,其中一個索引爲'IFD0.Model',結果值爲'RP_ov5647''RP_imx219'ver將指定爲12

讓1或2將被用於索引我們上面的偏移值產生偏移被分配或者640409610270208

總之,它是所有沒有語法上有效的一羣。感謝分享。

+0

非常感謝。這是我從pi相機文檔無法理解的代碼的一部分。完整的代碼是將標記的原始圖像數據提取爲jpeg輸出的元數據。這些數字用作重整數組的形狀的分辨率。 Ver是版本,w,r,t兩個版本的pi相機。而已。我只是想通過修改它來編寫自己的代碼。來自文檔的代碼對於我的使用有一些限制。 –

+0

非常感謝你btw !!!!!非常感激 !!!!! –

+0

正如其他答案所示,我敢肯定你發佈了一個實際代碼的破損版本。它仍然可用的事實證明了Python的完整混亂。 –

-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] 

所有的在此之後,我們有shapingcrop與該照相機模型的適當的尺寸,並offset在輸入流中合適的像素偏移(I假設)。

這就是你需要的嗎?

+1

......我的措辭不對。 *語法*是有效的,但*語義*幾乎可以肯定*不是*程序員想要的。我會修復我的帖子。 – Prune

+0

非常感謝您的意見! –

+0

它只是從pi相機提取原始圖像的程序的一小部分。原始數據在標準JPEG輸出結束時被標記爲元數據。所以我必須做一個分離。這些數字是重塑陣列的分辨率。我只是無法理解文檔中所寫的內容。 –

相關問題