1.Exif

可交换图像文件格式(英语:Exchangeable image file format,官方简称Exif),是专门为数码相机的照片设定的文件格式,可以记录数码照片的属性信息和拍摄数据。EXIF可以附加于JPEG、TIFF、RIFF等文件之中,为其增加有关数码相机拍摄信息的内容和索引图或图像处理软件的版本信息[1]。

xif标准最初由日本电子工业发展协会(JEIDA - Japan Electronic Industry Development Association)制订,目前的最新版本是发布于2010年04月的 Exif 2.3 版,该版本曾在2012年12月以及2013年5月有所修正 ,并已经应用到各个厂商的新影像设备中。2

Exif 文件实际是JPEG文件的一种,遵从JPEG标准,只是在文件头信息中增加了有关拍摄信息的内容和索引图。所以你可以使用任何支持JPEG格式的图像工具软件观看 Exif 文件,但图像一旦被修改,Exif 信息可能会永久丢失,故编辑 Exif 必须使用专门的软件。所有的JPEG图像以字符串“0xFFD8”开头,并以字符串“0xFFD9”结束。0xFFE0 – 0xFFEF之间的标识符称为“应用标记”,没有被常规JPEG文件利用,Exif正是利用这些信息串记录拍摄信息如快门速度、光圈值等,甚至可以包括全球定位信息。3

标签号 Exif 定义名 中文定义名 备注
0x010E ImageDescription 图像描述
0x013B Artist 作者
0x010F Make 生产商
0x0110 Model 型号 相机型号
0x0112 Orientation 方向
0x011A XResolution 水平方向分辨率
0x011B YResolution 垂直方向分辨率
0x0128 ResolutionUnit 分辨率单位
0x0131 Software 软件 固件Firmware版本或者编辑软件
0x0132 DateTime 日期和时间 照片最后修改时间
0x0213 YCbCrPositioning YCbCr定位
0x8769 ExifOffset Exif子IFD偏移量
0x829A ExposureTime 曝光时间 快门速度
0x829D FNumber 光圈系数 光圈的F值
0x8822 ExposureProgram 曝光程序 自动曝光、光圈优先、快门优先、M档等
0x8827 ISOSpeedRatings ISO感光度
0x9000 ExifVersion Exif 版本
0x9003 DateTimeOriginal 拍摄时间 照片拍摄时间
0x9004 DateTimeDigitized 数字化时间 照片被写入时间
0x9204 ExposureBiasValue 曝光补偿
0x9205 MaxApertureValue 最大光圈
0x9207 MeteringMode 测光模式 平均测光、中央重点测光、点测光
0x9208 Lightsource 光源 一般记录白平衡
0x9209 Flash 闪光灯 闪光灯状态
0x920A FocalLength 镜头焦距 镜头物理焦距
0x927C MakerNote 厂商注释
0x9286 UserComment 用户注释
0xA000 FlashPixVersion FlashPix版本
ColorSpace 色彩空间 AdobeRGB、sRGB等
ExifImageWidth 图像宽度
0xA003 ExifImageLength 图像高度
0xA433 LensMake 镜头生产商
0xA434 LensModel 镜头型号

通过以上可知,Exif信息是可以修改的,包含部分隐私数据,发送原图时很有可能会附带Exif信息。

2.对计算机视觉模型的影响

在使用手机或相机拍照时,有时候会横握设备有时候又竖握设备,手持方向发生变化,设备内部的重力感应器件会告诉设备,照片究竟哪个边是向上的。然而,实际图像的像素数据不会旋转,因为图像传感器是对连续的像素信息流进行逐行读取的,因此无论纵向和横向握持相机,图像都是按照一个方向进行存储,拍照设备和电脑之所以能够按照正确的方向显示图片,正是因为照片中保存的Exif信息。下图参考自4

图片阅读器之所以能够将横向排列的图像数据显示为正常图像,是因为根据Exif中的orientation参数对展示图像进行了处理,如果图片处理程序不处理Exif信息,那么图像将横向展示如下图:

一些图像处理程序不会去解析Exif信息,如NumPy、SciPy,TensorFlow,Keras等,当使用这些工具导入图像时,都将获得原始的未旋转图像数据,如横竖上下颠倒等,将如此数据输入视觉模型中时,会影响模型的分类检测分割效果

PIL库中,Exif的编码可通过如下方式获取

from PIL.ExifTags import TAGS
print(TAGS)
{11: 'ProcessingSoftware',254: 'NewSubfileType',255: 'SubfileType',256: 'ImageWidth',257: 'ImageLength',258: 'BitsPerSample',259: 'Compression',262: 'PhotometricInterpretation',263: 'Thresholding',264: 'CellWidth',265: 'CellLength',266: 'FillOrder',269: 'DocumentName',270: 'ImageDescription',271: 'Make',272: 'Model',273: 'StripOffsets',274: 'Orientation',277: 'SamplesPerPixel',278: 'RowsPerStrip',279: 'StripByteCounts',280: 'MinSampleValue',281: 'MaxSampleValue',282: 'XResolution',283: 'YResolution',284: 'PlanarConfiguration',285: 'PageName',288: 'FreeOffsets',289: 'FreeByteCounts',290: 'GrayResponseUnit',291: 'GrayResponseCurve',292: 'T4Options',293: 'T6Options',296: 'ResolutionUnit',297: 'PageNumber',301: 'TransferFunction',305: 'Software',306: 'DateTime',315: 'Artist',316: 'HostComputer',317: 'Predictor',318: 'WhitePoint',319: 'PrimaryChromaticities',320: 'ColorMap',321: 'HalftoneHints',322: 'TileWidth',323: 'TileLength',324: 'TileOffsets',325: 'TileByteCounts',330: 'SubIFDs',332: 'InkSet',333: 'InkNames',334: 'NumberOfInks',336: 'DotRange',337: 'TargetPrinter',338: 'ExtraSamples',339: 'SampleFormat',340: 'SMinSampleValue',341: 'SMaxSampleValue',342: 'TransferRange',343: 'ClipPath',344: 'XClipPathUnits',345: 'YClipPathUnits',346: 'Indexed',347: 'JPEGTables',351: 'OPIProxy',512: 'JPEGProc',513: 'JpegIFOffset',514: 'JpegIFByteCount',515: 'JpegRestartInterval',517: 'JpegLosslessPredictors',518: 'JpegPointTransforms',519: 'JpegQTables',520: 'JpegDCTables',521: 'JpegACTables',529: 'YCbCrCoefficients',530: 'YCbCrSubSampling',531: 'YCbCrPositioning',532: 'ReferenceBlackWhite',700: 'XMLPacket',4096: 'RelatedImageFileFormat',4097: 'RelatedImageWidth',4098: 'RelatedImageLength',18246: 'Rating',18249: 'RatingPercent',32781: 'ImageID',33421: 'CFARepeatPatternDim',33422: 'CFAPattern',33423: 'BatteryLevel',33432: 'Copyright',33434: 'ExposureTime',33437: 'FNumber',33723: 'IPTCNAA',34377: 'ImageResources',34665: 'ExifOffset',34675: 'InterColorProfile',34850: 'ExposureProgram',34852: 'SpectralSensitivity',34853: 'GPSInfo',34855: 'ISOSpeedRatings',34856: 'OECF',34857: 'Interlace',34858: 'TimeZoneOffset',34859: 'SelfTimerMode',36864: 'ExifVersion',36867: 'DateTimeOriginal',36868: 'DateTimeDigitized',37121: 'ComponentsConfiguration',37122: 'CompressedBitsPerPixel',37377: 'ShutterSpeedValue',37378: 'ApertureValue',37379: 'BrightnessValue',37380: 'ExposureBiasValue',37381: 'MaxApertureValue',37382: 'SubjectDistance',37383: 'MeteringMode',37384: 'LightSource',37385: 'Flash',37386: 'FocalLength',37387: 'FlashEnergy',37388: 'SpatialFrequencyResponse',37389: 'Noise',37393: 'ImageNumber',37394: 'SecurityClassification',37395: 'ImageHistory',37396: 'SubjectLocation',37397: 'ExposureIndex',37398: 'TIFF/EPStandardID',37500: 'MakerNote',37510: 'UserComment',37520: 'SubsecTime',37521: 'SubsecTimeOriginal',37522: 'SubsecTimeDigitized',37888: 'AmbientTemperature',37889: 'Humidity',37890: 'Pressure',37891: 'WaterDepth',37892: 'Acceleration',37893: 'CameraElevationAngle',40091: 'XPTitle',40092: 'XPComment',40093: 'XPAuthor',40094: 'XPKeywords',40095: 'XPSubject',40960: 'FlashPixVersion',40961: 'ColorSpace',40962: 'ExifImageWidth',40963: 'ExifImageHeight',40964: 'RelatedSoundFile',40965: 'ExifInteroperabilityOffset',41483: 'FlashEnergy',41484: 'SpatialFrequencyResponse',41486: 'FocalPlaneXResolution',41487: 'FocalPlaneYResolution',41488: 'FocalPlaneResolutionUnit',41492: 'SubjectLocation',41493: 'ExposureIndex',41495: 'SensingMethod',41728: 'FileSource',41729: 'SceneType',41730: 'CFAPattern',41985: 'CustomRendered',41986: 'ExposureMode',41987: 'WhiteBalance',41988: 'DigitalZoomRatio',41989: 'FocalLengthIn35mmFilm',41990: 'SceneCaptureType',41991: 'GainControl',41992: 'Contrast',41993: 'Saturation',41994: 'Sharpness',41995: 'DeviceSettingDescription',41996: 'SubjectDistanceRange',42016: 'ImageUniqueID',42032: 'CameraOwnerName',42033: 'BodySerialNumber',42034: 'LensSpecification',42035: 'LensMake',42036: 'LensModel',42037: 'LensSerialNumber',42240: 'Gamma',50341: 'PrintImageMatching',50706: 'DNGVersion',50707: 'DNGBackwardVersion',50708: 'UniqueCameraModel',50709: 'LocalizedCameraModel',50710: 'CFAPlaneColor',50711: 'CFALayout',50712: 'LinearizationTable',50713: 'BlackLevelRepeatDim',50714: 'BlackLevel',50715: 'BlackLevelDeltaH',50716: 'BlackLevelDeltaV',50717: 'WhiteLevel',50718: 'DefaultScale',50719: 'DefaultCropOrigin',50720: 'DefaultCropSize',50721: 'ColorMatrix1',50722: 'ColorMatrix2',50723: 'CameraCalibration1',50724: 'CameraCalibration2',50725: 'ReductionMatrix1',50726: 'ReductionMatrix2',50727: 'AnalogBalance',50728: 'AsShotNeutral',50729: 'AsShotWhiteXY',50730: 'BaselineExposure',50731: 'BaselineNoise',50732: 'BaselineSharpness',50733: 'BayerGreenSplit',50734: 'LinearResponseLimit',50735: 'CameraSerialNumber',50736: 'LensInfo',50737: 'ChromaBlurRadius',50738: 'AntiAliasStrength',50739: 'ShadowScale',50740: 'DNGPrivateData',50741: 'MakerNoteSafety',50778: 'CalibrationIlluminant1',50779: 'CalibrationIlluminant2',50780: 'BestQualityScale',50781: 'RawDataUniqueID',50827: 'OriginalRawFileName',50828: 'OriginalRawFileData',50829: 'ActiveArea',50830: 'MaskedAreas',50831: 'AsShotICCProfile',50832: 'AsShotPreProfileMatrix',50833: 'CurrentICCProfile',50834: 'CurrentPreProfileMatrix',50879: 'ColorimetricReference',50931: 'CameraCalibrationSignature',50932: 'ProfileCalibrationSignature',50934: 'AsShotProfileName',50935: 'NoiseReductionApplied',50936: 'ProfileName',50937: 'ProfileHueSatMapDims',50938: 'ProfileHueSatMapData1',50939: 'ProfileHueSatMapData2',50940: 'ProfileToneCurve',50941: 'ProfileEmbedPolicy',50942: 'ProfileCopyright',50964: 'ForwardMatrix1',50965: 'ForwardMatrix2',50966: 'PreviewApplicationName',50967: 'PreviewApplicationVersion',50968: 'PreviewSettingsName',50969: 'PreviewSettingsDigest',50970: 'PreviewColorSpace',50971: 'PreviewDateTime',50972: 'RawImageDigest',50973: 'OriginalRawFileDigest',50974: 'SubTileBlockSize',50975: 'RowInterleaveFactor',50981: 'ProfileLookTableDims',50982: 'ProfileLookTableData',51008: 'OpcodeList1',51009: 'OpcodeList2',51022: 'OpcodeList3',51041: 'NoiseProfile'
}

使用PIL库时,一幅图像数据Exif信息的获取可通过getexif方法获得。

from PIL import Image
img = Image.open("./m.jpg")
print(img.getexif())
{34665: 290,36864: b '0210',37121: b '\x01\x02\x03\x00',37377: 29.8973,36867: '2020:09:02 23:02:43',36868: '2020:09:02 23:02:43',37378: 2.52,37379: 0.0,37380: 0.0,37383: 5,37384: 1,37385: 24,37386: 3.38,40961: 1,40962: 2448,40965: 8434,41990: 0,37520: '438870',37521: '438870',37522: '438870',40963: 3264,41996: 0,41495: 2,41728: b '\x03',33434: 0.04,33437: 2.4,41729: b '\x01',34850: 2,41985: 1,34855: 250,41986: 0,40960: b '0100',41987: 0,41988: 1.0,41989: 26,41991: 0,41992: 0,41993: 0,41994: 0,37500: b 'Auto\x00',296: 2,282: 72.0,256: 2448,257: 3264,258: (8, 8, 8),34853: {0: b '\x02\x02\x00\x00',1: 'N',2: (22.0, 38.0, 54.697723),3: 'E',4: (114.0, 3.0, 35.029907),5: b '\x01',6: 0.0,7: (15.0, 2.0, 42.0),27: 'CELLID',29: '2020:09:02'},41995: b 'ipp\x00',270: 'bty',271: 'HUAWEI',272: 'KNT-UL10',305: 'KNT-UL10 8.0.0.556(C00)',274: 0,306: '2020:09:02 23:02:43',531: 1,283: 72.0
}

譬如274表示orientation。其处理可参考5。

参考:
1.https://zh.wikipedia.org/wiki/Exif
2.https://zhuanlan.zhihu.com/p/366726838
3.https://baike.baidu.com/item/EXIF%E4%BF%A1%E6%81%AF/3297493
4.https://mp.weixin.qq.com/s?__biz=MzAxNTc4MTc1Ng==&mid=2649395978&idx=2&sn=9d19517b41e30069787c6998924fb850&chksm=83e0e919b497600fb7a630b0474f9b4a25866f997b6c4eca359c70cee8a6bf9aeead22a4f589&mpshare=1&scene=1&srcid=1008W3nbLinwcMZgf49emKar&sharer_sharetime=1633664055894&sharer_shareid=715337ab6f6483872d17f37de2f7e4bf&notreplace=true&exportkey=A0i5QEYtCX3RYqAQLZ%2B%2FfNg%3D&pass_ticket=evQ%2BD4tN43xMZl5Nol%2BrBPpJxKHbPr9OuEQIL6mbg3eRRC%2F%2BbEwUDklPhQa8gB4M&wx_header=0#rd
5.https://github.com/ageitgey/image_to_numpy

图像中的Exif信息及其处理相关推荐

  1. R语言ggplot2可视化在图像中添加脚注信息(footnote)实战:自定义脚注信息的位置、对齐形式、图的脚注、整个网格的脚注

    R语言ggplot2可视化在图像中添加脚注信息(footnote caption)实战:自定义脚注信息的位置.对齐形式.图的脚注.整个网格的脚注 目录

  2. 合成孔径雷达图像中的地物信息

    概述 单通道或者多通道成像合成孔径雷达提供一个或者多个二维复数矩阵数据,称为单极化或者多极化SAR图像,每个像素的幅度和相位取决于合成孔径雷达分辨单元内所有目标给出的后向散射波的总和.合成孔径雷达图像 ...

  3. java 修改图片dpi_如何在图像中设置DPI信息?

    我在我的项目中将这段代码用于tiff文件,并且效果很好. import java.awt.image.BufferedImage; import java.awt.image.RenderedImag ...

  4. 图像中目标的绝对位置信息(2)--Global Pooling, More than Meets the Eye: Position Information is Encoded Channel-

    关于偶数卷积核和padding的副作用可以参考这个博客. 首先,本文是翻译了 ICCV 2021的一篇文章:Global Pooling, More than Meets the Eye: Posit ...

  5. 【图像取证篇】图像的Exif信息及相关术语

    图像的Exif信息及相关术语 ​ -[suy] 文章目录 图像的Exif信息及相关术语 1.什么是图像的Exif信息? 2.图像的Exif信息包括哪些? 3.所有图像都有Exif信息吗? EXIF 标 ...

  6. jpg中读取GPS信息

    需要读取EXIF信息,自己阅读了一些资料,现在共享一下 需要注意的是,由于EXIF是一种可交换的文件格式,所以可以用在Intel系列和Motorola系列的CPU上(至于两者CPU的区别,大家可以到网 ...

  7. 理解图像中卷积操作的含义

    原文地址:https://blog.csdn.net/chaipp0607/article/details/72236892?locationNum=9&fps=1 上文用生动的例子来解释卷积 ...

  8. 在图像中隐藏数据:用 Python 来实现图像隐写术

    什么是"隐写术"? 隐写术是将机密信息隐藏在更大的信息中,使别人无法知道隐藏信息的存在以及隐藏信息内容的过程.隐写术的目的是保证双方之间的机密交流.与隐藏机密信息内容的密码学不同, ...

  9. 使用imageIO获取和修改图片的exif信息

    看到这篇文章.喜欢的不得了-转来分享给大家! 一幅图片除了包含我们能看见的像素信息,背后还包含了拍摄时间,光圈大小,曝光等信息.UIImage类将这些细节信息都隐藏了起来,只提供我们关心的图片尺寸,图 ...

  10. 计算机视觉学习(三):仿射变换将一幅图像放置到另一幅图像中

    本例子为通过仿射扭曲变换将图像放置到另一幅图像中,使得它们能够和指定的区域或者标记物对齐. 运行的代码如下: # test.py from PCV.geometry import warp, homo ...

最新文章

  1. ffmpeg avformat_open_input always returns “Protocol not found”
  2. ajax不能设置哪些header
  3. OpenCV实现幻灯片模糊slides blur的实例(附完整代码)
  4. 使用SQL进行递归查询
  5. hive几种执行sql的方式总结
  6. 正则 8-18位长度,数字,字母,字符 任意两种,不含中文测试通过
  7. linux下devel包的作用
  8. 使用第三方Markdown编辑器编辑为知笔记
  9. linux 常用操作指令(随时更新)
  10. Linux 内核如何描述一个进程?
  11. 【OpenGL4.0】GLSL-使用Uniform Block实现着色器的数据共享
  12. 图像处理中小波变换的学习笔记
  13. 通过AccessKey调用阿里云CDN接口刷新CDN资源案例
  14. NexentaStor iSCSI/ NAS 存储服务器软件图解教程(3)——NMV快速上手指南Part2
  15. 网站服务器建立数据库连接时出错,修复Wordpress博客网站“建立数据库连接时出错”错误记录 | 科技爱好者博客 -专注于树莓派(Raspberry Pi)...
  16. 【流程向】模型复原与Unity渲染
  17. Ubuntu(乌班图)修改阿里云镜像源详细步骤及安装gcc编译器
  18. 如何解决谷歌Chrome浏览器空白页的问题
  19. 前端知识点整理(待续)
  20. Android HDMI audio设备插拔事件

热门文章

  1. (新)最新抖音无水印解析原理再分析过程,柳暗花明又一村
  2. 宝塔面板FTP存储空间无法连接的问题
  3. java 百亿计算器,百万换算成亿(百万换算成亿计算器)
  4. 解决appium中Error: The port #8100 is occupied by an other process的问题
  5. excel函数去重_excel去掉重复值的函数用法
  6. QQ音乐解析API,支持搜索、歌单、单曲、专辑、MV解析、多音质切换
  7. 教你如何使用Excel中的INT函数
  8. EasyClick 易点云测自动化测试入门到精通
  9. 几何平均数与AG不等式
  10. python求几何平均_算术平均、几何平均、调和平均、平方平均和移动平均