python读取图片的exif信息
python讀取圖片的exif信息
- 圖片的exif信息
- exifread第三方庫
- 相機的內參矩陣
- 讀取圖片exif信息的代碼
圖片的exif信息
圖片信息也是存在元數據的,網上官方稱之為exif(exchange image file format),中文意思是交換圖像文件格式。
每張圖片都包含EXIF信息,它是可交換圖像文件的縮寫,是專門為數碼相機的照片設定的,可以記錄數碼照片的屬性信息和拍攝數據。
要注意的是有些圖片是沒有元數據的,比如壓縮過的圖片,元數據被破壞,無法探測,所以圖片一定要是原圖。
EXIF可以附加于JPEG、TIFF、RIFF等文件之中,為其增加有關數碼相機拍攝信息的內容和索引圖或圖像處理軟件的版本信息。總結來說EXIF信息包含著該照片的拍照基本信息。
exifread第三方庫
在進行三維重建軟件的使用過程中,這里我使用的是OpenMVG+PMVS/CMVS的開源軟件。
當軟件配置好后,使用實例圖片立馬就完成了稠密重建。
如果換用自己手機拍攝的圖片,也可以完成三維重建。
但是當用電腦截取的一個物體的多視角圖片的時候,卻不能完成三維重建。會報以下錯誤:
Traceback (most recent call last):
File “/home/program.py”, line 74, in import_images
info = self.get_image_exif(file_path)
File “/home/program.py”, line 94, in get_image_exif
‘Image Model’:tags.get(‘Image Model’, ‘0’).values
AttributeError: ‘str’ object has no attribute 'values’
根據代碼,程序在執行過程中,會讀取圖片的exif信息,之后在CAMERA_SENSOR_WIDTH_DIRECTORY中去找尋對應的相機信息,用手機拍攝的圖片可以成功進行三維重建,是因為相機信息中,已經有了對應的相機參數,相機內參是確定的,但是用電腦截圖的數據,是缺少exif數據的,所以程序在執行時,不能找到確定的相機內參。
相機的內參矩陣
相機的內參矩陣為K,在百度中都可以找到詳細的定義。
對于圖像處理問題來說,相機內參的數據是比較好獲得的。其中矩陣中的Cx和Cy都是像素中心的坐標,可以直接按照圖像寬和高的1/2去設置,剩下的參數就是焦距了。
內參矩陣的焦距不是相機焦距f而是像元焦距,即fx=f/dx,y方向上同理,dx與dy都是相機的像元尺寸,一般是相等的,但其實也有不相等的,也有有誤差的情況,是制造相機過程中保證的。
一般在程序中,焦距都是一個幾千的數字,這時,這個焦距就是指的像元焦距,是沒有單位不帶量綱的。
而我們截圖過程中的焦距是不知道的,查找到一個公式f=1.2*max(H,W),即,焦距(這里為像元焦距)可以取圖像高和寬中最大值的1.2倍,這時,焦距就有了一個參考值。
后面三維重建的問題,就是生成截圖數據的exif文件,并將內參寫進相機參數文件中就行,或者直接在程序中寫死內參,不去查詢相機參數文件。
讀取圖片exif信息的代碼
下面這段代碼是用第三方庫exifread讀取exif信息的代碼,大家可以在這個基礎上更改。
import exifread # 專門用來讀圖片exif信息的庫 import osfile_path = "/home/images" # 輸入文件夾def get_image_exif(path):f = open(path, 'rb')tags = exifread.process_file(f)info = {'Image Model': tags.get('Image Model', '0').values}f.close()return infofor filename in os.listdir(file_path): # 遍歷輸入路徑,得到圖片名if filename.endswith(('.jpg', '.jpeg', 'JPG')):print(filename)file_name_path = file_path + '/' + filenameprint(file_name_path)info = get_image_exif(file_name_path)print(info)總結
以上是生活随笔為你收集整理的python读取图片的exif信息的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 北大青鸟昌平校区 | 学网络运维与安全就
- 下一篇: python暑假培训成都