ios – 如何从AVFoundation获得光照值?

ios – 如何从AVFoundation获得光照值?,第1张

概述我使用 Swift 3并使用相机AVFoundation 谁知道有没有办法知道光的容量? 我知道其中一种方法是使用环境光传感器,但它不鼓励,最终应用程序不允许在市场上 我发现问题非常接近我需要的问题 detecting if iPhone is in a dark room 那个人解释说我可以使用ImageIO框架,读取视频源的每一帧进来的元数据 - (void)captureOutput:(AV 我使用 Swift 3并使用相机AVFoundation

谁知道有没有办法知道光的容量?

我知道其中一种方法是使用环境光传感器,但它不鼓励,最终应用程序不允许在市场上

我发现问题非常接近我需要的问题

detecting if iPhone is in a dark room

那个人解释说我可以使用ImageIO框架,读取视频源的每一帧进来的元数据

- (voID)captureOutput:(AVCaptureOutput *)captureOutput dIDOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection {  CFDictionaryRef MetadataDict = CMcopyDictionaryOfAttachments(NulL,sampleBuffer,kCMAttachmentMode_ShouldPropagate);  NSDictionary *Metadata = [[NSMutableDictionary alloc] initWithDictionary:(__brIDge NSDictionary*)MetadataDict];  CFRelease(MetadataDict);  NSDictionary *exifMetadata = [[Metadata objectForKey:(Nsstring *)kCGImagePropertyExifDictionary] mutablecopy];  float brightnessValue = [[exifMetadata objectForKey:(Nsstring *)kCGImagePropertyExifBrightnessValue]  floatValue];}

但我是iOS的新手,不知道如何在Swift中转换这段代码

提前致谢!

解决方法 以下代码实现在Swift 3.x中

可以使用相机的EXIF数据获得近似光度值(以单位勒克斯为单位).请参考以下链接. Using a camera as a lux meter

这里AVFoundation中captureOutput方法的sampleBuffer值用于从相机帧中提取EXIF数据.

func captureOutput(_ captureOutput: AVCaptureOutput!,dIDOutputSampleBuffer sampleBuffer: CMSampleBuffer!,from connection: AVCaptureConnection!) {    //RetrIEving EXIF data of camara frame buffer    let rawMetadata = CMcopyDictionaryOfAttachments(nil,CMAttachmentMode(kCMAttachmentMode_ShouldPropagate))    let Metadata = CFDictionaryCreateMutablecopy(nil,rawMetadata) as NSMutableDictionary    let exifData = Metadata.value(forKey: "{Exif}") as? NSMutableDictionary    let FNumber : Double = exifData?["FNumber"] as! Double    let ExposureTime : Double = exifData?["ExposureTime"] as! Double    let ISOSpeedratingsArray = exifData!["ISOSpeedratings"] as? NSArray    let ISOSpeedratings : Double = ISOSpeedratingsArray![0] as! Double    let CalibrationConstant : Double = 50     //Calculating the luminosity    let luminosity : Double = (CalibrationConstant * FNumber * FNumber ) / ( ExposureTime * ISOSpeedratings )      print(luminosity)}

请注意,CalibrationConstant的值可以根据应用进行校准,如参考文献中所述.

总结

以上是内存溢出为你收集整理的ios – 如何从AVFoundation获得光照值?全部内容,希望文章能够帮你解决ios – 如何从AVFoundation获得光照值?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/web/1209533.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存