核心圖像的基礎(chǔ)知識介紹

核心圖像是一個圖像處理及分析的框架,使用于iOS和OS X。它提供了開發(fā)者一個簡單的應(yīng)用程序接口在基于一個互相協(xié)調(diào)到應(yīng)用的效果更為寬廣的范圍。
從圖像編輯和目錄生成到應(yīng)用實時效果給游戲和實時的視頻,核心圖像有令人欽佩的幅度。自從iOS9之后,核心圖像對于iOS已經(jīng)達(dá)到用它的OS X同意義的貼近奇偶校驗,這意味著iOS開發(fā)者現(xiàn)在可以進(jìn)入完整的一套濾鏡-多達(dá)170種濾鏡并且可以用CIKernel去寫自定義濾鏡。此外自從iOS9后,許多iOS的濾鏡超越了OS X上的有更多的優(yōu)點。在OS X中它們通過Apple的metal性能陰影返回并且對于通常的圖像處理任務(wù)有驚人的性能 例如模糊和回旋。
核心圖像濾鏡
或許核心圖像的大多數(shù)及時的部分是圖像處理濾鏡的一套。從簡單的模糊和通過技術(shù)顏色處理到合成的失真的顏色控制,這些濾鏡能被獨特的使用或鏈在一起去生成獨特和令人吃驚的效果。
從簡單的鏈或許帶一個蒙拉麗莎的圖像,轉(zhuǎn)換它到單色,然后用淺藍(lán)色去著色,最后申請一個小插圖。如圖所示

屏幕快照 2016-04-21 下午6.43.32.png

鏈一起的濾鏡盡力充分利用,用這樣的方式-個別的濾鏡的圖像處理代碼是鏈接一起去創(chuàng)建一個單一的程序。這意味著,無論哪里可能,都沒有中間的緩沖區(qū)或使得合成濾鏡集合的處理非常快的圖片。
核心圖像濾鏡是非常輕量級的對象,真實的濾鏡工作是延遲的知道最后的結(jié)果被請求。核心圖像隱藏了技術(shù)實現(xiàn),因此無論一個濾鏡是否執(zhí)行在GPU或CPU上,并且一個基于濾鏡的GPU使用Metal 或不會從開發(fā)者隱藏。
人臉偵測和形狀
核心圖像提供了能一直分析和移動圖像,查詢?nèi)四樅?長方形,文本區(qū)域和快速響應(yīng)碼的CIDetector對象的一個范圍。人臉偵測在一個活動的視頻內(nèi)實時工作。
1,核心圖像基本原理
對于渲染核心圖像輸出的基本原理的類是Core image Context,CIContext。它負(fù)責(zé)編譯和運行這些濾鏡然后描述畫面的目的地要么是CPU 要么GPU
一個核心的圖像shang上下文能花時間去例示并且應(yīng)該產(chǎn)生一次然后重用。一旦創(chuàng)建則是不可計算的。因此是線程安全的,因此相同的上下文能在不同的線程共用。
在一個最簡單的格式內(nèi),一個上下文能不帶參數(shù)創(chuàng)建
let context = CIContext()
在這個事件中,我們創(chuàng)建了一個返回緩慢比基于上下文的GPU的基于上下文的CPU。這或許對于靜態(tài)的圖片是比較好的,但是對于處理帶有快速變化的參數(shù)的活動的視頻或濾鏡,它不足夠快。然而,基于上下文的CPU能在背景線程執(zhí)行-或許會朝著節(jié)制它更緩慢的速度去提升。
為了更好的提升性能,我們可以從一個EAGL 上下文去創(chuàng)建一個核心圖像上下文的GPU。這保持所有的核心圖片處理在GPU(通過使用GLKit),運行核心圖像去直接繪制到根本沒有包含CPU的一個視圖的畫面緩存區(qū)
let eaglContext = EAGLContext(API:.OpenGLES2)
let context = CIContext(EAGLContext:eaglContext)
為了更長遠(yuǎn)的增加性能,我們能明顯地關(guān)掉顏色管理-通過設(shè)置kCIContextWorkingColorSpace 為NULL在選項中
let context = CIContext(EAGLContext:eaglContext,options:[kCIContextWorkingColorSpace:NSNull()])
2,核心圖像濾鏡
核心圖像濾鏡是CIFiter的實例,代表性要么申請可視化效果給圖像要么生成一個圖像(例如隨機的噪點或著色的條紋),而不是子類化CIFilter進(jìn)入多個濾鏡類,濾鏡通過名字創(chuàng)建:例如
let blurFilter = CIFilter(name:”CIGaussianBlur”)!
一旦濾鏡創(chuàng)建,則它的屬性用setValue()設(shè)置,在這里我們定義了模糊濾鏡的輸出圖片作為CIImage名為ciImage,它的模糊半徑為25像素
blurFilter.setValue(ciImage,forKey:kCIInputImageKey)
blurFilter.setValue(25,forKey:kCIInputRadiusKey)
自從濾鏡名和它的鍵是字符串并且它的屬性的值是AnyObject?這創(chuàng)建濾鏡和設(shè)置參數(shù)值缺少安全。為了幫助使其緩和,核心圖像提供了一系列的函數(shù)去在變化的濾鏡和它們的屬性和類型之間詢問。一個濾鏡的數(shù)據(jù)能以二種方式存取。
要么通過查詢?yōu)V鏡的輸出圖像的值要么他的輸出圖像屬性
let result = blurFilter.valueForKey(kCIOutputImageKey)
這會返回一個AnyObject的類型的對象-代表性地被轉(zhuǎn)換作為一個CIImage,存取輸出圖像的速記方式是輸出圖像屬性
let result = blurFilter.outputImage
上面的方法會返回一個可選的CIImage。這沒有什么因為直到返回的CIImage變?yōu)殇秩镜母袷剑駝t查詢?yōu)V鏡結(jié)果是不執(zhí)行這個濾鏡。
核心圖像的強大來自于在前面的-當(dāng)多個濾鏡鏈接在一起。因此我們能攜帶那個模糊的輸出并且設(shè)置它作為輸出到子序列順化調(diào)整。例如,寧愿設(shè)置它的屬性用setValue,它們在濾鏡的構(gòu)造器內(nèi)被設(shè)置
let hueAdjust = CIFilter(name:”CIHueAdjust”,withInputParameters:[kCIInputAngleKey:3.14,kCIOutputImageKey:blurFilter.outputImage!])
因為核心圖像濾鏡是計算的,因為它不是線程安全的。
3,核心圖像圖像
核心圖像有它自己的圖像數(shù)據(jù)格式 CIImage,然而一個CIImage不包含你所期望的位圖,相當(dāng)它對于如何創(chuàng)建一個圖像包含秘訣
核心圖像濾鏡接受核心圖像圖像作為輸入輸出,當(dāng)輸出轉(zhuǎn)換為渲染格式時(UIImage,在此期間主要做上下文創(chuàng)建和執(zhí)行濾鏡)它是獨一無二的。因此一個CIImage能被考慮為一個許諾。
核心圖像的圖像能從其他格式創(chuàng)建例如UIImage 或從一個核心視頻像素緩沖區(qū)。生成一個CIImage通過一個已經(jīng)存在的UIImage然后init(image:)構(gòu)造器被使用
let uiImage = UIImage (name:”sunflower.jpg”)
let ciImage = CIImage(image:uiImage!)
以下是通過實時的視頻供給去生成一個核心圖像通過一個像素緩沖區(qū),然后通過init構(gòu)造器使用
let pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)
let ciImage = CIImage(CVPixelBuffer:pixelBuffer!)
相反地,核心圖像的圖像能被作為一個可顯示的UIImage的資源
let uiImage = UIImage(CIImage:ciImage)
盡管我們明確的生成一個CIContext,核心圖像生成了一個單一使用的上下文去實現(xiàn)它的轉(zhuǎn)換并且那在性能上有一定的效果。
我們生成一個CIImage包含一個可靠的顏色用init構(gòu)造器
let brownImage = CIImage(color:CIColor(red:0.7,green:0.4,blue:0.1))
這值得提醒-一個用這個技術(shù)創(chuàng)建的CIImage有無窮大的空間。自從它對于如何創(chuàng)建一個圖形而言是一個訣竅,無窮大并不意味著用盡內(nèi)存的每一個可用的字節(jié)。上面的brownImage簡單地包含了指令通知無論將渲染什么,它必須用一個棕色去填充每一個像素
CIImage也有一個便利的方法集合去創(chuàng)建一個新的圖像-通過申請濾鏡但是速記法必須創(chuàng)建單獨的濾鏡
let filter = CIFilter(name:”CISepiaTone”,withInputPrameters:[kCIInputImageKey:image ,kCIInputIntensityKey:0.5])])
let filteredImage = filter?.outputImage
然而有捷徑去寫上面的代碼通過使用imageByApplyingFilter():
let filterImage = image.imageByApplyingFilter(“CISepiaTone”,withInputParameters:[kCIInputIntensityKey:0.5])
同樣的方式,我們可以生成一個CICrop濾鏡
let rect = CGRect(x:0,y:0,width:640,height:480)
let croppedImage = image.imageByCroppingToRect(rect)
這也有一些捷徑給組合的圖像通過互相使用,保存和生成一個新的CISourceOverComposition濾鏡,以下是通過背景圖像去合成一個前景圖像
let result = foregroundImage.imageByCompositionOverImage(backgroundImage)
5, 核心圖像的核心
一個核心代表程序,核心圖像的背景語言-執(zhí)行一個濾除的操作。所有的核心圖像濾鏡包含至少一個核心,一些或許包含二個或多個
核心被分為三個主要的分類:
5.1顏色核心-對于簡單的更改獨特的像素顏色要盡力最佳化使用,例如一個濾鏡去控制圖像的曝光就是基于這個核心
5.2 彎曲核心-更改一個圖像的幾何學(xué)最佳化使用。例如放大和裁剪,圓形化鏡頭失真等高級濾鏡
5.3 通常的核心-取樣多個像素在一個圖像上,一些事顏色核心不能做。它們被用在濾鏡中例如模糊和銳化濾鏡

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,702評論 6 534
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,615評論 3 419
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,606評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,044評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 71,826評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,227評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,307評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,447評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,992評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,807評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,001評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,550評論 5 361
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,243評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,667評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,930評論 1 287
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,709評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 47,996評論 2 374

推薦閱讀更多精彩內(nèi)容