簡體   English   中英

如何將實時視頻輸入從iPhone相機轉換為灰度?

[英]How do I convert the live video feed from the iPhone camera to grayscale?

我如何從iPhone相機中獲取實時幀,將它們轉換為灰度,然后在我的應用程序中將它們顯示在屏幕上?

你需要使用iOS 4.0,它允許你 - 最后 - 只是啟動相機並在它們准備就緒時接收幀作為原始數據。 然后,您可以根據需要處理幀,並根據需要將它們放在屏幕上。

做最好的事情是在登錄后搶WWDC會話409(“使用與AV基金會相機”) 在這里 ,它應該讓你盡可能能夠產生對你的UIImagePickerController自己的變種。

要從RGB轉換為亮度,您可能需要快速公式:

brightness = (0.257 * R) + (0.504 * G) + (0.098 * B) + 16;

它來自標准的RGB到YUV轉換公式,如此處所述 根據您將圖像設置為屏幕的方式,您可以直接存儲這些值(例如,如果您要使用OpenGL - 只需上傳為亮度紋理)或將R,G和B存儲為:

1.164(brightness - 16)

(來自同一來源)

不要進行任何類型的轉換,而是使用kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange('420v')並獲取Y-Plane(Luma)數據 - 這只是8位:25%將在OpenGLES中上傳到紋理的數據量的25%你是用BGRA的。 無需進行任何類型的RGB-> YUV轉換,它可以在OpenGLES 1.1和2.0中工作,而無需進行混合或着色效果。

為了擴展Tommy所說的內容,你需要在iOS 4.0中使用AVFoundation來捕獲實時相機幀。 但是,我建議直接使用OpenGL進行圖像處理,否則你將無法在當前硬件上實現實時結果。

對於OpenGL ES 1.1設備,我將使用Apple的GLImageProcessing示例應用程序作為基礎(其中包含一個OpenGL灰度過濾器)並通過它運行您的實時視頻幀。

對於OpenGL ES 2.0,您可能希望使用可編程着色器來實現此效果。 我將展示如何使用着色器通過 此示例應用程序中的各種過濾器處理實時iPhone相機數據,並在 此處詳細說明

\n

在我的基准測試中,iPhone 4可以使用可編程着色器以60 FPS進行此處理,但如果依靠CPU綁定代碼執行此操作,則只能獲得大約4 FPS。

自從我編寫以上內容之后,我現在創建了一個開源框架 ,它封裝了這個OpenGL ES 2.0視頻處理,並且它有一個內置的灰度過濾器,您可以使用它。 您可以使用應用於視頻源的GPUImageGrayscaleFilter快速轉換為黑白,或使用GPUImageSaturationFilter以受控量選擇性地對此視頻進行去飽和處理。 查看SimpleVideoFilter示例,了解如何將其應用於實時視頻源,然后將其記錄到磁盤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM