11丛塌、管理感光度 ISO
11.1妒茬、什么是感光度 ISO
在數(shù)碼相機(jī)中 ISO 表示感光元件的感光的速度。感光度 ISO 數(shù)值越高就說明該感光元器件的感光能力越強(qiáng)蚊锹,對曝光量的要求就越少熙暴。一般情況下闺属,ISO 值越低慌盯,相片的質(zhì)量越高周霉,相片的細(xì)節(jié)表現(xiàn)的得越細(xì)膩;ISO 值越高亚皂,相片的亮度就越高俱箱,而相片的質(zhì)量會隨著 ISO值的升高而降低,噪點會變得越來越嚴(yán)重灭必,但高 ISO 值可以彌補光線的不足狞谱。
11.2、獲取AVCaptureDevice
的感光度ISO
@property(nonatomic, readonly) float ISO;
當(dāng)前曝光的感光度 ISO
值禁漓。此屬性通過應(yīng)用于信號的增益值返回傳感器對光的靈敏度跟衅。
僅支持minISO
和maxISO
之間的ISO
值;值越高播歼,圖像越嘈雜伶跷。
無論曝光模式如何,都可以隨時讀取屬性值秘狞,但只能使用-setExposureModeCustomWithDuration:ISO:completionHandler:
方法進(jìn)行設(shè)置叭莫。
常量const float AVCaptureISOCurrent;
表示調(diào)用者不希望為 ISO
屬性指定值,而是應(yīng)將其設(shè)置為其當(dāng)前值烁试。
12雇初、曝光設(shè)置
12.1、關(guān)于相機(jī)的一些概念
12.1.1减响、光圈
光圈是一個用來控制光線透過鏡頭靖诗,進(jìn)入機(jī)身內(nèi)感光面的光量的裝置郭怪;它通常是在鏡頭內(nèi)。
表達(dá)光圈大小我們是用F值:光圈F值 = 鏡頭的焦距/鏡頭口徑的直徑刊橘;從以上的公式可知要達(dá)到相同的光圈F值移盆,長焦距鏡頭的口徑要比短焦距鏡頭的口徑大。當(dāng)光圈物理孔徑不變時伤为,鏡頭中心與感光器件距離愈遠(yuǎn)咒循,F(xiàn)數(shù)愈大,反之绞愚,鏡頭中心與感光器件距離愈近叙甸,通過光孔到達(dá)感光器件的光密度愈高,F(xiàn)數(shù)就愈小位衩。
完整的光圈值系列如下: F1裆蒸, F1.4, F2糖驴, F2.8僚祷, F4, F5.6贮缕, F8辙谜, F11, F16感昼, F22装哆, F32, F44定嗓, F64蜕琴。
光圈F值愈小,在同一單位時間內(nèi)的進(jìn)光量便愈多宵溅,而且上一級的進(jìn)光量剛是下一級的一倍凌简,例如光圈從F8調(diào)整到F5.6,進(jìn)光量便多一倍恃逻,我們也說光圈開大了一級雏搂。
12.1.2、快門
快門是照相機(jī)用來控制感光片有效曝光時間的裝置辛块。是照相機(jī)的一個重要組成部分畔派,它的結(jié)構(gòu)、形式及功能是衡量照相機(jī)檔次的一個重要因素润绵。一般而言快門的時間范圍越大越好线椰。秒數(shù)低適合拍運動中的物體,某款相機(jī)就強(qiáng)調(diào)快門最快能到1/16000秒尘盼,可輕松抓住急速移動的目標(biāo)憨愉。不過當(dāng)你要拍的是夜晚的車水馬龍烦绳,快門時間就要拉長,常見照片中絲絹般的水流效果也要用慢速快門才能拍出來配紫。
快門速度單位是“秒”径密。專業(yè)135相機(jī)的最高快門速度達(dá)到1/16000秒。常見的快門速度有:1 1/2 1/4 1/8 1/15 1/30 1/60 1/125 1/250 1/500 1/1000 1/2000等躺孝。相鄰兩級的快門速度的曝光量相差一倍享扔,我們常說相差一級。如1/60秒比1/125秒的曝光量多一倍植袍,即1/60秒比1/125秒速度慢一級或稱低一級惧眠。
12.1.3、曝光
曝光:是指當(dāng)你按相機(jī)快門按鈕的時候于个,快門(鏡頭外的世界和機(jī)身內(nèi)部感光元件之間的門)會打開氛魁,過一段時間再關(guān)上;就在這一小段時間之內(nèi)厅篓,光線會從鏡頭鉆進(jìn)來秀存,照在長方形的感光元件上邊,感光元件上幾千萬的感光點就會記錄照到它上邊的光的色彩羽氮;于是或链,就得到一張照片了。
曝光就是 光圈乏苦、快門 和 感光度ISO 的組合株扛。
曝光值 是由快門速度值和光圈值組合表示攝影鏡頭通光能力的一個數(shù)值尤筐。
可以這樣認(rèn)為:光圈值大小其實就是那個小圓窗戶開多大汇荐;快門(速度)就是窗戶打開多久。
假設(shè)窗戶只打開1/4盆繁,時間為4秒鐘可以正確曝光的話掀淘,很顯然,窗戶打開一半油昂,時間2秒鐘也能讓底片正確曝光革娄,因為 1/44 = 1/22 = 1,進(jìn)光量都是一樣多冕碟。同樣的拦惋,如果窗戶全開,曝光時間就只需要1秒了安寺。
假若一個鏡頭光圈全開為 F4厕妖,用攝影行話來說,光圈 F4 快門速度 1 秒為正確曝光值挑庶,那 F5.6 和 2 秒以及 F8 和 4 秒也同樣能得到準(zhǔn)確曝光的圖片言秸。
一張正確曝光的圖片可以有N種不同的光圈和快門速度組合软能。
12.1.4、曝光的興趣點
興趣點举畸,又被稱為點特征查排,指的是圖像中具有特殊性質(zhì)的像素點,是圖像的重要特征抄沮。它具有旋轉(zhuǎn)不變性和不隨光照條件變化的優(yōu)點跋核。這類點被大量用于解決物體識別,圖像匹配叛买,視覺跟蹤了罪,三維重建等問題。
12.2聪全、曝光的一些屬性
屬性 | 類型 | 描述 |
---|---|---|
exposureDuration |
CMTime |
一個只讀屬性泊藕,表示曝光時間;僅支持minExposureDuration 和maxExposureDuration 之間的曝光持續(xù)時間值难礼。無論曝光模式如何娃圆,都可以隨時讀取曝光時間。 |
exposureTargetOffset |
float |
一個只讀屬性蛾茉,表示當(dāng)前場景的計量曝光水平與目標(biāo)曝光值之間的差異讼呢;以EV為單位。 |
exposureTargetBias |
float |
一個只讀屬性谦炬,以EV單位應(yīng)用于目標(biāo)暴露值的偏差悦屏。當(dāng)曝光模式為AVCaptureExposureModeAutoExpose 或AVCaptureExposureModeLocked 時,偏差將影響測光(exposureTargetOffset )和實際曝光等級:曝光時間exposureDuration 和感光度ISO 键思。 當(dāng)曝光模式為AVCaptureExposureModeCustom 時础爬,它只會影響測光。 |
minExposureTargetBias |
float |
一個只讀屬性吼鳞,EV單位支持的最小曝光偏差看蚜。 |
maxExposureTargetBias |
float |
一個只讀屬性,以EV為單位的最大支持曝光偏差赔桌。 |
activeMaxExposureDuration |
CMTime |
自動曝光算法中定義的最長曝光持續(xù)時間(以秒為單位)供炎。 |
adjustingExposure |
BOOL |
一個只讀屬性,指示設(shè)備當(dāng)前是否正在調(diào)整其曝光設(shè)置疾党。 |
exposureMode |
AVCaptureExposureMode |
設(shè)備的曝光模式音诫。在更改此屬性的值之前,必須調(diào)用-lockForConfiguration: 以鎖定AVCaptureDevice 雪位;否則竭钝,設(shè)置此屬性的值會引發(fā)異常。完成配置設(shè)備后,請調(diào)用-unlockForConfiguration 以釋放鎖定并允許其他設(shè)備配置設(shè)置蜓氨。 |
exposurePointOfInterestSupported |
BOOL |
一個只讀屬性聋袋,指示設(shè)備是否支持曝光的興趣點。 |
exposurePointOfInterest |
CGPoint |
曝光的興趣點穴吹。 |
12.2.1幽勒、關(guān)于activeMaxExposureDuration
屬性
在AVCaptureSession
設(shè)置sessionPreset
或在AVCaptureDevice
上選擇其他activeFormat
時,可以查詢或觀察對activeMaxExposureDuration
的更改港令。
可以隨時覆蓋此屬性啥容,以及activeFormat
屬性的minExposureDuration
和maxExposureDuration
范圍中的任何值。會話運行時會立即反映更改顷霹,而不會重建圖形咪惠。
還可以將屬性設(shè)置為kCMTimeInvalid
以返回默認(rèn)值。例如淋淀,如果想要比幀速率更短的曝光遥昧,則可以覆蓋自動曝光算法的最大曝光持續(xù)時間。 如果需要通過暴露1/40秒但仍然每秒捕獲30幀來凍結(jié)運動朵纷,則需要手動覆蓋炭臭。
12.2.2、關(guān)于曝光模式AVCaptureExposureMode
AVCaptureExposureMode 用于指定AVCaptureDevice
曝光模式的枚舉袍辞。
枚舉值 | 描述 |
---|---|
AVCaptureExposureModeLocked |
曝光設(shè)置已鎖定鞋仍。 |
AVCaptureExposureModeAutoExpose |
設(shè)備會自動調(diào)整曝光一次,然后將曝光模式更改為AVCaptureExposureModeLocked
|
AVCaptureExposureModeContinuousAutoExposure |
設(shè)備會持續(xù)監(jiān)控曝光量并在必要時自動曝光搅吁。 |
AVCaptureExposureModeCustom |
設(shè)備應(yīng)僅根據(jù)用戶提供的感光度 ISO 和曝光時間exposureDuration 屬性值調(diào)整曝光威创。 |
我們可以利用下述方法獲得設(shè)備是否支持給定的曝光模式:
- (BOOL)isExposureModeSupported:(AVCaptureExposureMode)exposureMode;
12.2.3、關(guān)于曝光的興趣點exposurePointOfInterest
為此屬性設(shè)置值不會啟動曝光重新平衡操作谎懦。要使用興趣點設(shè)置曝光肚豺,首先設(shè)置此屬性的值,然后將exposureMode
屬性設(shè)置為AVCaptureExposureModeAutoExpose
或AVCaptureExposureModeContinuousAutoExposure
党瓮。
此屬性的CGPoint
值使用坐標(biāo)系详炬,其中{0,0}
是圖片區(qū)域的左上角,{1,1}
是右下角寞奸。無論實際的設(shè)備方向如何,此坐標(biāo)系始終相對于橫向設(shè)備方向在跳,主頁按鈕位于右側(cè)枪萄。可以使用AVCaptureVideoPreviewLayer
方法在此坐標(biāo)系和視圖坐標(biāo)之間進(jìn)行轉(zhuǎn)換猫妙。
在更改此屬性的值之前瓷翻,必須調(diào)用-lockForConfiguration:
以鎖定AVCaptureDevice
;否則,設(shè)置此屬性的值會引發(fā)異常齐帚。完成配置設(shè)備后妒牙,請調(diào)用-unlockForConfiguration
以釋放鎖定并允許其他設(shè)備配置設(shè)置。
12.3对妄、設(shè)置曝光時間和感光度
我們在上文已經(jīng)了解了如何獲取曝光時間和感光度的屬性湘今,但是它們都是只讀屬性,我們能且唯一可用的就是使用下述方法修改曝光時間與感光度
- (void)setExposureModeCustomWithDuration:(CMTime)duration ISO:(float)ISO completionHandler:(void (^)(CMTime syncTime))handler;
該方法將曝光時間和感光度 ISO 鎖定在指定值剪菱;有三個參數(shù):
參數(shù)
CMTime duration
:表示曝光時間摩瞎。表示當(dāng)前曝光時間的特殊常量AVCaptureExposureDurationCurrent
將曝光時間鎖定為其當(dāng)前值,即禁用自動曝光孝常。注意旗们,對此屬性的更改可能會導(dǎo)致activeVideoMinFrameDuration
或activeVideoMaxFrameDuration
發(fā)生更改。參數(shù)
float ISO
: 表示感光度构灸。常量AVCaptureISOCurrent
的值可用于指示調(diào)用者不希望為ISO指定值上渴,而是應(yīng)將其設(shè)置為其當(dāng)前值。參數(shù)
handler
:當(dāng)曝光時間exposureDuration
和感光度ISO
都已設(shè)置為指定值且曝光模式exposureMode
為AVCaptureExposureModeCustom
時的回調(diào)喜颁。該塊接收與已應(yīng)用所有設(shè)置的第一個緩沖區(qū)匹配的時間戳驰贷。 時間戳與設(shè)備時鐘同步,因此必須先轉(zhuǎn)換為主時鐘洛巢,然后再與通過AVCaptureVideoDataOutput
實例傳送的緩沖區(qū)的時間戳進(jìn)行比較括袒。如果不需要知道操作的完成,則為處理程序參數(shù)傳遞nil稿茉。
該方法是設(shè)置曝光時間 exposureDuration
和感光度 ISO
的唯一方法锹锰。
如果將曝光時間exposureDuration
或感光度ISO
設(shè)置為不支持的級別,則此方法將拋出NSInvalidArgumentException
異常漓库。
如果在沒有調(diào)用-lockForConfiguration:
鎖定 AVCaptureDevice
的情況下調(diào)用此方法恃慧,則拋出NSGenericException
異常。
12.4渺蒿、設(shè)置曝光偏差
- (void)setExposureTargetBias:(float)bias completionHandler:(void (^)(CMTime syncTime))handler;
該方法用于設(shè)置要應(yīng)用于目標(biāo)曝光值的偏差痢士。有兩個參數(shù):
- 參數(shù)
bias
: 要應(yīng)用于曝光目標(biāo)值的偏差。表示當(dāng)前曝光偏差值的特殊常量AVCaptureExposureTargetBiasCurrent
將曝光偏差鎖定為其當(dāng)前值茂装,即禁用自動曝光怠蹂。 - 參數(shù)
handler
: 將exposureTargetBias
屬性設(shè)置為指定值時的回調(diào)。該塊接收時間戳少态,該時間戳與已應(yīng)用該設(shè)置的第一緩沖區(qū)的時間戳匹配城侧。 時間戳與設(shè)備時鐘同步,因此必須先轉(zhuǎn)換為主時鐘彼妻,然后再與通過AVCaptureVideoDataOutput
實例傳送的緩沖區(qū)的時間戳進(jìn)行比較嫌佑。如果不需要知道操作的完成豆茫,則客戶端可以為處理程序參數(shù)傳遞nil。
此方法是設(shè)置exposureTargetBias
屬性的唯一方法屋摇。
如果exposureTargetBias
設(shè)置為不支持的級別揩魂,則此方法拋出NSInvalidArgumentException
異常。
如果在沒有調(diào)用-lockForConfiguration:
鎖定 AVCaptureDevice
的情況下調(diào)用此方法炮温,則拋出NSGenericException
異常火脉。
13、管理低亮度設(shè)置
屬性 | 類型 | 描述 |
---|---|---|
lowLightBoostSupported |
BOOL |
指示AVCaptureDevice 是否支持在低光照條件下提升圖像的布爾值茅特。只有在此屬性為YES時忘分,才能設(shè)置AVCaptureDevice 對象的automaticEnablesLowLightBoostWhenAvailable 屬性。 |
lowLightBoostEnabled |
BOOL |
指示是否啟用AVCaptureDevice 的低光增強(qiáng)功能的布爾值白修。當(dāng)該屬性為“是”時妒峦,AVCaptureDevice 已切換到特殊模式,在該模式中可以在圖像中感知到更多光兵睛。 |
automaticallyEnablesLowLightBoostWhenAvailable |
BOOL |
指示AVCaptureDevice 是否應(yīng)在必要時自動切換到低光增強(qiáng)模式的布爾值肯骇;默認(rèn)值為NO。 |
在lowLightBoostSupported
為YES的AVCaptureDevice
對象上祖很,可以使用特殊的低光增強(qiáng)模式來提高圖像質(zhì)量笛丙。當(dāng)automaticEnablesLowLightBoostWhenAvailable
屬性設(shè)置為YES時,AVCaptureDevice
會在低光照條件下自行切換到特殊的升壓模式假颇。當(dāng)場景變得充足時胚鸯,設(shè)備切換回正常操作。支持此功能的AVCaptureDevice
可能僅針對某些源格式或分辨率使用升壓模式笨鸡。
如果lowLightBoostSupported
為NO姜钳,則設(shè)置automaticEnablesLowLightBoostWhenAvailable
會拋出NSInvalidArgumentException
。
如果在沒有調(diào)用-lockForConfiguration:
鎖定 AVCaptureDevice
的情況下設(shè)置automaticEnablesLowLightBoostWhenAvailable
形耗,則拋出NSGenericException
異常哥桥。
客戶端可以使用鍵值觀察來觀察對lowLightBoostEnabled
屬性的更改,以了解升壓模式何時啟用激涤。正常操作和低光增強(qiáng)模式之間的切換可能會丟失一個或多個視頻幀拟糕。
14、管理幀率設(shè)置
14.1倦踢、什么幀率送滞?
工業(yè)相機(jī)的主要參數(shù)包括:分辨率、幀率硼一、像素累澡、像元尺寸、光譜響應(yīng)特性等般贼。
幀率(Frame rate)是用于測量顯示幀數(shù)的量度。所謂的測量單位為每秒顯示幀數(shù)(Frames per Second),簡稱:FPS或“赫茲”(Hz)哼蛆。
由于人類眼睛的特殊生理結(jié)構(gòu)蕊梧,如果所看畫面之幀率高于16fps的時候,就會認(rèn)為是連貫的腮介,此現(xiàn)象稱之為視覺暫留肥矢。這也就是為什么電影膠片是一格一格拍攝出來,然后快速播放的叠洗。
每秒的幀數(shù)(fps)或者說幀率表示圖形處理器處理場時每秒鐘能夠更新的次數(shù)甘改。高的幀率可以得到更流暢、更逼真的動畫灭抑。一般來說30fps就是可以接受的十艾,但是將性能提升至60fps則可以明顯提升交互感和逼真感,但是一般來說超過75fps一般就不容易察覺到有明顯的流暢度提升了腾节。如果幀率超過屏幕刷新率只會浪費圖形處理的能力忘嫉,因為監(jiān)視器不能以這么快的速度更新,這樣超過刷新率的幀率就浪費掉了案腺。
最大幀率(Frame Rate)/行頻(Line Rate):即相機(jī)采集傳輸圖像的速率庆冕,對于面陣相機(jī)一般為每秒采集的幀數(shù)(Frames/Sec.),對于線陣相機(jī)為每秒采集的行數(shù)(Hz)劈榨。
相機(jī)上的圖像采集過程包括兩個截然不同的部分访递。第一部分是曝光。曝光完成后同辣,進(jìn)行第二部分Readout過程即從傳感器的寄存器中讀出數(shù)據(jù)并傳送出去(Readout過程)拷姿。
14.2、最小幀率
@property(nonatomic) CMTime activeVideoMinFrameDuration;
當(dāng)前有效的最小幀持續(xù)時間邑闺。
設(shè)備的最小幀持續(xù)時間是其最大幀速率的倒數(shù)跌前。可以設(shè)置此屬性的值以限制捕獲會話期間的最大幀速率陡舅。AVCaptureDevice
根據(jù)其活動格式activeFormat
自動選擇默認(rèn)的最小幀持續(xù)時間抵乓。更改此屬性的值后,可以通過將此屬性的值設(shè)置為kCMTimeInvalid
來返回默認(rèn)的最小幀持續(xù)時間靶衍。為 AVCaptureSession
設(shè)置sessionPreset
也會將此屬性重置為其默認(rèn)值灾炭。
嘗試將此屬性設(shè)置為活動格式的videoSupportedFrameRateRanges
數(shù)組中未找到的值會引發(fā)異常NSInvalidArgumentException
。
如果在沒有調(diào)用-lockForConfiguration:
鎖定 AVCaptureDevice
的情況下設(shè)置activeVideoMinFrameDuration
颅眶,則拋出NSGenericException
異常蜈出。
14.3、最大幀率
@property(nonatomic) CMTime activeVideoMaxFrameDuration;
設(shè)備的最大幀持續(xù)時間是其最小幀速率的倒數(shù)涛酗。
可以設(shè)置此屬性的值以限制捕獲會話期間的最小幀速率铡原。AVCaptureDevice
根據(jù)其活動格式activeFormat
自動選擇默認(rèn)的最大幀持續(xù)時間偷厦。更改此屬性的值后,可以通過將此屬性的值設(shè)置為kCMTimeInvalid
來返回默認(rèn)的最大幀持續(xù)時間燕刻。為AVCaptureSession
設(shè)置sessionPreset
也會將此屬性重置為其默認(rèn)值只泼。
嘗試將此屬性設(shè)置為活動格式的videoSupportedFrameRateRanges
數(shù)組中未找到的值會引發(fā)異常NSInvalidArgumentException
。
如果在沒有調(diào)用-lockForConfiguration:
鎖定 AVCaptureDevice
的情況下設(shè)置activeVideoMaxFrameDuration
卵洗,則拋出NSGenericException
異常请唱。
下面的代碼示例演示了如何選擇iOS設(shè)備的最高幀率:
- (void)configureCameraForHighestFrameRate:(AVCaptureDevice *)device
{
AVCaptureDeviceFormat *bestFormat = nil;
AVFrameRateRange *bestFrameRateRange = nil;
for ( AVCaptureDeviceFormat *format in [device formats] ) {
for ( AVFrameRateRange *range in format.videoSupportedFrameRateRanges ) {
if ( range.maxFrameRate > bestFrameRateRange.maxFrameRate ) {
bestFormat = format;
bestFrameRateRange = range;
}
}
}
if ( bestFormat ) {
if ( [device lockForConfiguration:NULL] == YES ) {
device.activeFormat = bestFormat;
device.activeVideoMinFrameDuration = bestFrameRateRange.minFrameDuration;
device.activeVideoMaxFrameDuration = bestFrameRateRange.minFrameDuration;
[device unlockForConfiguration];
}
}
}
15、傳輸管理控制
屬性 | 類型 | 描述 |
---|---|---|
transportControls Supported |
BOOL |
指示設(shè)備是否支持傳輸控制命令过蹂。對于具有傳輸控件的設(shè)備十绑,例如基于AVC磁帶的攝像機(jī)或具有RS422卡座控制的專業(yè)捕獲設(shè)備,此屬性的值為YES酷勺。 如果不支持傳輸控制本橙,則接收器上沒有相關(guān)的傳輸控制方法和屬性。 |
transportControls PlaybackMode |
AVCaptureDevice TransportControls PlaybackMode |
當(dāng)前的播放模式鸥印;此屬性僅對支持傳輸控制的設(shè)備有效勋功。 |
transportControlsSpeed |
AVCaptureDevice TransportControls Speed |
目前的播放速度。 |
AVCaptureDeviceTransportControlsPlaybackMode 表示傳輸控件當(dāng)前播放模式的枚舉库说。
枚舉值 | 描述 |
---|---|
AVCaptureDeviceTransportControlsNotPlayingMode |
表示磁帶傳輸沒有穿過播放頭狂鞋。 |
AVCaptureDeviceTransportControlsPlayingMode |
表示磁帶傳輸穿過播放頭。 |
AVCaptureDeviceTransportControlsSpeed typedef
修飾的用于表示播放速度的類別潜的。該值的含義示例:
值 | 含義 |
---|---|
0.0 |
停止 |
1.0 |
以正常速度前進(jìn)骚揍。 |
-1.0 |
以正常速度反轉(zhuǎn)。 |
2.0 |
以2x正常速度前進(jìn)啰挪。 |
設(shè)置播放模式和速度
下述方法用于設(shè)置傳輸控件的播放模式和速度:
- (void)setTransportControlsPlaybackMode:(AVCaptureDeviceTransportControlsPlaybackMode)mode
speed:(AVCaptureDeviceTransportControlsSpeed)speed;
該方法有兩個參數(shù):
- 參數(shù)
mode
:AVCaptureDeviceTransportControlsPlaybackMode
常量信不,指示是否應(yīng)將牌組置于播放模式。 - 參數(shù)
speed
:AVCaptureDeviceTransportControlsSpeed
值亡呵,指示卷繞或播放磁帶的速度抽活。
如果在沒有調(diào)用-lockForConfiguration:
鎖定 AVCaptureDevice
的情況下調(diào)用此方法,則拋出NSGenericException
異常锰什。
16大莫、監(jiān)測主題領(lǐng)域變化
16.1休雌、監(jiān)視更改
@property(nonatomic, getter=isSubjectAreaChangeMonitoringEnabled) BOOL subjectAreaChangeMonitoringEnabled;
此屬性的值指示接收器是否應(yīng)監(jiān)視視頻主題區(qū)域的更改,例如照明更改误辑,實質(zhì)移動等忘蟹。
如果啟用了主題區(qū)域更改監(jiān)視季春,則捕獲設(shè)備對象會在檢測到主題區(qū)域發(fā)生更改時發(fā)送AVCaptureDeviceSubjectAreaDidChangeNotification
蜻牢,此時感興趣的客戶端可能希望重新聚焦狭郑,調(diào)整曝光,白平衡等铸题。
在更改此屬性的值之前铡恕,必須調(diào)用-lockForConfiguration:
以獲得對設(shè)備配置屬性的訪問權(quán)琢感,否則,設(shè)置此屬性的值將引發(fā)異常没咙;完成設(shè)備配置后猩谊,調(diào)用-unlockForConfiguration
釋放鎖并允許其他設(shè)備配置設(shè)置
16.2千劈、更改時的通知
NSString *const AVCaptureDeviceSubjectAreaDidChangeNotification;
當(dāng)AVCaptureDevice
實例檢測到視頻主題區(qū)域發(fā)生重大變化時發(fā)送通知祭刚。
客戶端可以觀察AVCaptureDeviceSubjectAreaDidChangeNotification
以了解AVCaptureDevice
的實例何時檢測到視頻主題區(qū)域的實質(zhì)性變化。
僅當(dāng)subjectAreaChangeMonitoringEnabled
為YES
時才會發(fā)送此通知墙牌。
17涡驮、管理白平衡
17.1、什么是白平衡喜滨?
白平衡捉捅,字面上的理解是白色的平衡。通過它可以解決色彩還原和色調(diào)處理的一系列問題虽风。它是實現(xiàn)攝像機(jī)圖像能精確反映被攝物的色彩狀況棒口,有手動白平衡和自動白平衡等方式。許多人在使用數(shù)碼攝像機(jī)拍攝的時候都會遇到這樣的問題:在日光燈的房間里拍攝的影像會顯得發(fā)綠辜膝,在室內(nèi)鎢絲燈光下拍攝出來的景物就會偏黃无牵,而在日光陰影處拍攝到的照片則莫名其妙地偏藍(lán),其原因就在于白平衡的設(shè)置上厂抖。
我們可以使用以下屬性獲取AVCaptureDevice
當(dāng)前是否正在調(diào)整白平衡:
@property(nonatomic, readonly, getter=isAdjustingWhiteBalance) BOOL adjustingWhiteBalance;
17.2茎毁、白平衡模式AVCaptureWhiteBalanceMode
@property(nonatomic) AVCaptureWhiteBalanceMode whiteBalanceMode;
我們可以使用該屬性獲取或者設(shè)置目前的白平衡模式;在更改此屬性的值之前忱辅,必須調(diào)用-lockForConfiguration:
以獲得對設(shè)備配置屬性的訪問權(quán)七蜘。
AVCaptureWhiteBalanceMode 用于指定捕獲設(shè)備的白平衡模式的枚舉。
枚舉 | 描述 |
---|---|
AVCaptureWhiteBalanceModeLocked |
白平衡設(shè)置已鎖定墙懂。 |
AVCaptureWhiteBalanceModeAutoWhiteBalance |
設(shè)備現(xiàn)在執(zhí)行自動白平衡操作橡卤。 |
AVCaptureWhiteBalanceModeContinuousAutoWhiteBalance |
該設(shè)備可持續(xù)監(jiān)控白平衡并在必要時進(jìn)行調(diào)整。 |
當(dāng)然损搬,我們在設(shè)置白平衡模式AVCaptureWhiteBalanceMode
時碧库,需要確定設(shè)備是否支持指定的模式
- (BOOL)isWhiteBalanceModeSupported:(AVCaptureWhiteBalanceMode)whiteBalanceMode;
該方法返回一個布爾值,指示是否支持給定的白平衡模式场躯。如果支持whiteBalanceMode
谈为,則為YES,否則為NO踢关。
17.3伞鲫、白平衡增益AVCaptureWhiteBalanceGains
@property(nonatomic, readonly) float maxWhiteBalanceGain;
一個只讀屬性,最大的白平衡增益签舞;該值在對象的生命周期內(nèi)不會更改秕脓。
typedef struct {
float redGain; //白平衡值的紅色增益分量柒瓣。
float greenGain; //白平衡值的綠色增益分量。
float blueGain; //白平衡值的藍(lán)色增益分量吠架。
} AVCaptureWhiteBalanceGains
包含RGB白平衡增益值的結(jié)構(gòu)芙贫,對于該結(jié)構(gòu)中的每個成員,僅支持1.0
和maxWhiteBalanceGain
之間的值傍药。如果結(jié)構(gòu)成員設(shè)置為不受支持的值磺平,則此方法拋出NSInvalidArgumentException
異常。
@property(nonatomic, readonly) AVCaptureWhiteBalanceGains deviceWhiteBalanceGains;
獲取白平衡增益拐辽。這些值可用于調(diào)整給定場景的色偏拣挪。無論白平衡模式如何,都可以隨時讀取該值俱诸。
我們可以使用下述方利用指定的deviceWhiteBalanceGains
值將白平衡設(shè)置為鎖定模式菠劝。
- (void)setWhiteBalanceModeLockedWithDeviceWhiteBalanceGains:(AVCaptureWhiteBalanceGains)whiteBalanceGains
completionHandler:(void (^)(CMTime syncTime))handler;
該方法有兩個參數(shù):
- 參數(shù)
whiteBalanceGains
: 白平衡增加到設(shè)定。表示當(dāng)前白平衡設(shè)置的結(jié)構(gòu)常量AVCaptureWhiteBalanceGainsCurrent
將白平衡增益鎖定為其當(dāng)前值睁搭,即禁用自動白平衡赶诊。如果將whiteBalanceGains
設(shè)置為不支持的級別,則此方法拋出異常NSInvalidArgumentException
园骆。 - 參數(shù)
handler
:當(dāng)白平衡增益已設(shè)置為指定值且whiteBalanceMode
屬性為AVCaptureWhiteBalanceModeLocked
時要調(diào)用的塊舔痪。 該塊接收與已應(yīng)用所有設(shè)置的第一個緩沖區(qū)匹配的時間戳。 時間戳與設(shè)備時鐘同步遇伞,因此必須先轉(zhuǎn)換為主時鐘辙喂,然后再與通過AVCaptureVideoDataOutput
實例傳送的緩沖區(qū)的時間戳進(jìn)行比較。如果不需要同步鸠珠,則此參數(shù)可以為nil
巍耗。
調(diào)用該方法時,如果lockingWhiteBalanceWithCustomDeviceGainsSupported
屬性為NO渐排,使用除AVCaptureWhiteBalanceGainsCurrent
之外的白平衡增益值會引發(fā)異常炬太。
在調(diào)用此方法之前,必須調(diào)用-lockForConfiguration:
以獲得對設(shè)備配置屬性的訪問權(quán)驯耻。
@property(nonatomic, readonly, getter=isLockingWhiteBalanceWithCustomDeviceGainsSupported) BOOL lockingWhiteBalanceWithCustomDeviceGainsSupported;
指示設(shè)備是否支持將白平衡鎖定到特定增益值的布爾值亲族。
@property(nonatomic, readonly) AVCaptureWhiteBalanceGains grayWorldDeviceWhiteBalanceGains;
中性灰色白點所需的當(dāng)前設(shè)備特定白平衡值。該屬性指定從當(dāng)前場景派生的當(dāng)前紅色可缚,綠色和藍(lán)色增益值霎迫,以提供白平衡的中性(或灰色世界)白點。
灰色世界值假定中間主體(例如灰卡)已放置在主題區(qū)域的中間并填充幀的中心50%帘靡。 客戶端可以使用-setWhiteBalanceModeLockedWithDeviceWhiteBalanceGains:completionHandler:
讀取這些值并將其應(yīng)用于設(shè)備知给。
17.4、CIE 1931色度坐標(biāo)系
包含CIE 1931色度坐標(biāo)的結(jié)構(gòu):
typedef struct {
float x;//表示與紅色有關(guān)的相對量值,值范圍介于0到0.8之間涩赢。
float y;//表示與綠色有關(guān)的相對量值戈次,值范圍介于0和0.85之間。
} AVCaptureWhiteBalanceChromaticityValues
使用下述方法將白平衡增益AVCaptureWhiteBalanceGains
轉(zhuǎn)換為 CIE 1931色度坐標(biāo)系筒扒,進(jìn)行白平衡色度調(diào)節(jié)
- (AVCaptureWhiteBalanceChromaticityValues)chromaticityValuesForDeviceWhiteBalanceGains:(AVCaptureWhiteBalanceGains)whiteBalanceGains;
該方法的參數(shù)與返回值:
- 參數(shù)
whiteBalanceGains
:白平衡增益值怯邪。 可能不使用AVCaptureWhiteBalanceGainsCurrent
的值。 - 返回值:包含CIE 1931色度坐標(biāo)的結(jié)構(gòu)
使用下述方法將 CIE 1931色度坐標(biāo)系轉(zhuǎn)換為白平衡增益AVCaptureWhiteBalanceGains
:
- (AVCaptureWhiteBalanceGains)deviceWhiteBalanceGainsForChromaticityValues:(AVCaptureWhiteBalanceChromaticityValues)chromaticityValues;
注意:某些 chromaticityValues
字段組合產(chǎn)生超出范圍的設(shè)備RGB值花墩,如果直接傳遞給 -setWhiteBalanceModeLockedWithDeviceWhiteBalanceGains:completionHandler:
將導(dǎo)致拋出異常悬秉。務(wù)必檢查紅色,綠色和藍(lán)色增益值是否在 [1.0 - maxWhiteBalanceGain]
的范圍內(nèi)观游。
17.5搂捧、溫度和色彩度的白平衡調(diào)節(jié)
含有與白平衡色相關(guān)的溫度和色彩值的結(jié)構(gòu)
typedef struct {
float temperature; //以開爾文表示的白平衡色相關(guān)溫度。
float tint; //白平衡色彩值在-150.0到+150.0之間懂缕。
} AVCaptureWhiteBalanceTemperatureAndTintValues
我們可以調(diào)用下述方法獲取當(dāng)前白平衡增益AVCaptureWhiteBalanceGains
下的溫度和色彩度
- (AVCaptureWhiteBalanceTemperatureAndTintValues)temperatureAndTintValuesForDeviceWhiteBalanceGains:(AVCaptureWhiteBalanceGains)whiteBalanceGains;
該方法的參數(shù)與返回值:
參數(shù) whiteBalanceGains
:包含RGB白平衡增益值的結(jié)構(gòu);可以不使用AVCaptureWhiteBalanceGainsCurrent
的值王凑。
返回值: 返回一個含有與白平衡色相關(guān)的溫度和色彩值的結(jié)構(gòu)
18搪柑、管理高動態(tài)范圍視頻
屬性 | 類型 | 描述 |
---|---|---|
automaticallyAdjustsVideoHDREnabled |
BOOL |
指示是否允許AVCaptureDevice 打開或關(guān)閉高動態(tài)范圍流,默認(rèn)值為YES。 |
videoHDREnabled |
BOOL |
指示是否允許接收器打開或關(guān)閉高動態(tài)范圍流,默認(rèn)值為YES索烹。 |
默認(rèn)情況下工碾,當(dāng)客戶端使用activeFormat
屬性設(shè)置新格式時,AVCaptureDevice
始終將videoHDREnabled
設(shè)置為NO百姓。
當(dāng)客戶端使用AVCaptureSession
屬性sessionPreset
時渊额,AVCaptureDevice
會自動打開視頻HDR,如果它非常適合預(yù)設(shè)垒拢⊙#客戶端可以使用videoHDREnabled
屬性的鍵值觀察來了解接收器何時自動更改了值。
如果在沒有調(diào)用-lockForConfiguration:
鎖定 AVCaptureDevice
的情況下設(shè)置此屬性求类,則拋出NSGenericException
異常奔垦。
19、管理顏色空間
@property(nonatomic) AVCaptureColorSpace activeColorSpace;
管理色彩空間尸疆,當(dāng)前活動的色彩空間用于捕獲椿猎。
所有設(shè)備和格式都支持sRGB色彩空間中的捕獲。某些設(shè)備和格式也可以在P3色彩空間中捕捉寿弱,其中包括比sRGB色彩空間寬得多的色域犯眠。默認(rèn)情況下,AVCaptureSession
會自動為受支持的設(shè)備捕獲寬色域捕獲并捕獲工作流症革;
為獲得最佳效果筐咧,請在AVCaptureSession
上調(diào)用-startRunning
之前選擇一個顏色空間。在AVCaptureSession
運行時更改此屬性需要對捕獲渲染管道進(jìn)行破壞性重新配置地沮,正在進(jìn)行的影片捕獲將立即結(jié)束嗜浮,未實現(xiàn)的照片請求將中止羡亩,并且視頻預(yù)覽將暫時凍結(jié)。
如果在沒有調(diào)用-lockForConfiguration:
鎖定 AVCaptureDevice
的情況下設(shè)置此屬性危融,則拋出NSGenericException
異常畏铆。
AVCaptureColorSpace用于指定用于圖像和視頻捕獲的色域和格式的枚舉,與activeColorSpace屬性一起使用吉殃。默認(rèn)情況下辞居,AVCaptureSession
類自動為受支持的設(shè)備和捕獲工作流啟用寬色域捕獲。
枚舉值 | 描述 |
---|---|
AVCaptureColorSpace_sRGB |
標(biāo)準(zhǔn)RGB色彩空間蛋勺。 |
AVCaptureColorSpace_P3_D65 |
數(shù)字影院標(biāo)準(zhǔn)DCI-P3色彩空間瓦灶,帶有CIE D65標(biāo)準(zhǔn)白點。 |
20抱完、處理系統(tǒng)壓力變化
20.1贼陶、狀態(tài)信息systemPressureState
@property(nonatomic, readonly) AVCaptureSystemPressureState *systemPressureState;
影響捕獲系統(tǒng)性能和可用性的操作系統(tǒng)和硬件狀態(tài)的當(dāng)前狀態(tài)。當(dāng)前的操作系統(tǒng)和硬件狀態(tài)影響捕獲系統(tǒng)的性能和可用性巧娱。
AVCaptureSystemPressureState 有關(guān)影響捕獲系統(tǒng)性能和可用性的OS和硬件狀態(tài)的信息碉怔。
iOS 設(shè)備上的攝像頭捕獲系統(tǒng)的性能和可用性受到多種外部因素的影響,例如電源使用和設(shè)備溫度禁添。如果在捕獲會話期間總系統(tǒng)壓力達(dá)到過高水平撮胧,則捕獲系統(tǒng)會自動關(guān)閉老翘,從而導(dǎo)致會話中斷芹啥。在較輕的壓力下,系統(tǒng)可以自動降低捕獲質(zhì)量墓怀。
要避免此類中斷啤呼,需要使用KVO來監(jiān)視AVCaptureDevice
上systemPressureState
屬性的值呢袱,并在系統(tǒng)壓力增加時采取措施降低捕獲會話的性能影響羞福;例如惕蹄,通過降低捕獲幀速率。
20.2、總體水平level
@property(atomic, readonly) AVCaptureSystemPressureLevel level;
捕獲系統(tǒng)性能約束的整體表征卖陵。操作系統(tǒng)和硬件狀態(tài)的幾個方面會影響捕獲系統(tǒng)的性能和可用性遭顶。整體系統(tǒng)壓力水平代表最關(guān)鍵的潛在因素。
typedef NSString *AVCaptureSystemPressureLevel;
表示系統(tǒng)壓力水平的結(jié)構(gòu)
值 | 描述 |
---|---|
AVCaptureSystemPressureLevelNominal |
系統(tǒng)壓力水平正常(未加壓)泪蔫。 |
AVCaptureSystemPressureLevelFair |
系統(tǒng)壓力略有升高棒旗。 |
AVCaptureSystemPressureLevelSerious |
系統(tǒng)壓力大大提高。 捕獲性能可能會受到影響撩荣。 建議采用幀率限制铣揉。 |
AVCaptureSystemPressureLevelCritical |
系統(tǒng)壓力嚴(yán)重升高。 捕獲質(zhì)量和性能受到顯著影響餐曹。 強(qiáng)烈建議使用幀速率限制逛拱。 |
AVCaptureSystemPressureLevelShutdown |
系統(tǒng)壓力超出臨界值,因此捕獲系統(tǒng)已關(guān)閉台猴。當(dāng)系統(tǒng)壓力達(dá)到此水平時朽合,捕獲系統(tǒng)會自動關(guān)閉,從而導(dǎo)致會話中斷卿吐。在中斷通知的userInfo 字典中使用AVCaptureSessionInterruptionSystemPressureStateKey 來查找導(dǎo)致中斷的系統(tǒng)壓力因素的詳細(xì)信息旁舰。 |
20.3、影響因素
@property(atomic, readonly) AVCaptureSystemPressureFactors factors;
系統(tǒng)壓力水平的一系列根本原因嗡官。系統(tǒng)壓力水平較高時,可以使用此信息選擇如何緩解問題毯焕。
例如衍腥,在多鏡頭設(shè)備上由于AVCaptureSystemPressureFactorDepthModuleTemperature
導(dǎo)致的高系統(tǒng)壓力可以通過限制深度捕獲幀速率來減少。
AVCaptureSystemPressureFactors
影響捕獲系統(tǒng)性能的一組因素纳猫。如果系統(tǒng)壓力級別為AVCaptureSystemPressureLevelNominal
(即捕獲系統(tǒng)性能不受其他OS和硬件因素的影響)婆咸,則此值為空集。
值 | 描述 |
---|---|
AVCaptureSystemPressureFactorNone |
系統(tǒng)壓力目前是標(biāo)稱值芜辕。 |
AVCaptureSystemPressureFactorSystemTemperature |
整個系統(tǒng)的熱負(fù)荷都很高尚骄。 |
AVCaptureSystemPressureFactorPeakPower |
系統(tǒng)的峰值功率要求超過了電池的當(dāng)前容量。具有化學(xué)老化電池的設(shè)備不太能夠響應(yīng)總功率使用(CPU和GPU使用侵续,I/O倔丈,相機(jī)系統(tǒng),無線電等)的快速增加状蜗。當(dāng)設(shè)備檢測到這種情況時需五,可能會限制捕獲系統(tǒng)性能,以防止意外的設(shè)備關(guān)閉轧坎。 |
AVCaptureSystemPressureFactorDepthModuleTemperature |
捕獲深度信息的模塊在升高的溫度下操作宏邮。隨著系統(tǒng)壓力的增加,深度質(zhì)量可能會降低。要從此因素降低系統(tǒng)壓力蜜氨,需要降低深度捕獲幀速率械筛。此因素僅適用于多鏡頭設(shè)備。 |