日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

GPUImage

發布時間:2025/7/25 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 GPUImage 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

GPUImage

(翻譯自 NSHispter,原文鏈接:http://nshipster.com/gpuimage/)

在 NSHipster,我們一直在研究 Objective-C 不為人知的一面來了解我們每天面對的系統。一般來說,這意味著仔細研究 Apple 的框架和語言特性(畢竟每天要用 Obective-C 工作)。不過,有些時候,看看成堆的第三方庫和框架也蠻好的(而且里面有些真的很好),還可以看一下 Cupertino 外面有什么新東西。

本周我們來看一下你能找到的最厲害的一個開源項目:GPUImage。系好安全帶,NSHipster 們,一不小心你讀完這篇文章就造出一個相機 app 了。


GPUImage 作者是?Brad Larson,以 BSD 協議放出,能夠在圖像、實時攝像頭影像和視頻上使用 GPU 加速的濾鏡和其他效果。

GPU vs. CPU

每只 iPhone 都有兩個處理器:一個?CPU,也就是中央處理器,和一個?GPU,也就是圖形處理器。每個處理器都有它自己的優勢,現代芯片架構(例如 AppleA4)把 CPU 和 GPU 集成在一個物理封裝里。

在 Xcode 里面寫 C 和 Objective-C 的時候,產生的指令絕大部分會被 CPU 執行。相對地,GPU 是一枚專用芯片,專門用來做獨立的小操作,例如圖形渲染。GPU 執行的指令和 CPU 是有很大區別的,因此用特殊的語言來編寫:OpenGL(特別地,在 iPhone 和 iPad 上使用?OpenGL ES)

如果想學習 OpenGL ES 和渲染管線相關的知識,可以參考?Jeff LaMarche's GLProgram OpenGL ES 2.0 book

比較一下 GPU 渲染和 CPU 渲染的性能,區別還是蠻大的:

CPU vs. GPU 幀率對比 (FPS 越高越好) CalculationGPU FPSCPU FPSΔ
Thresholding ? 1 60.00 4.21 14.3?
Thresholding ? 233.632.3614.3?
Thresholding ? 100 1.45 0.05 28.7?

"哦,這貨是 Instagram?"

好吧,我們這么說:

Instagram : GPUImage :: 拍立得 : NASA 空間光學制造中心

換種說法,用 GPUImage 的 API 可以做出數千種相機 app,只需要把濾鏡正確地組合起來,外加一小點想象力。

這張表包含了 GPUImage 內置的 125 種濾鏡:(譯者:你想翻譯死我嗎?)

Color AdjustmentsImage ProcessingBlending ModesVisual Effects
  • Brightness Filter
  • Exposure Filter
  • Contrast Filter
  • Saturation Filter
  • Gamma Filter
  • Levels Filter
  • Color Matrix Filter
  • RGB Filter
  • Hue Filter
  • Tone Curve Filter
  • Highlight Shadow Filter
  • Lookup Filter
  • Amatorka Filter
  • Miss Etikate Filter
  • Soft Elegance Filter
  • Color Invert Filter
  • Grayscale Filter
  • Monochrome Filter
  • False Color Filter
  • Haze Filter
  • Sepia Filter
  • Opacity Filter
  • Solid Color Generator
  • Luminance Threshold Filter
  • Adaptive Threshold Filter
  • Average Luminance Threshold Filter
  • Histogram Filter
  • Histogram Generator
  • Average Color
  • Luminosity
  • Chroma Key Filter
  • Transform Filter
  • Crop Filter
  • Lanczos Resampling Filter
  • Sharpen Filter
  • Unsharp Mask Filter
  • Fast Blur Filter
  • Single Component Fast Blur Filter
  • Gaussian Blur Filter
  • Single Component Gaussian Blur Filter
  • Gaussian Selective Blur Filter
  • Gaussian Blur Position Filter
  • Median Filter
  • Bilateral Filter
  • Tilt Shift Filter
  • Box Blur Filter
  • 3x3 Convolution Filter
  • Sobel Edge Detection Filter
  • Threshold Edge Detection Filter
  • Canny Edge Detection Filter
  • Harris Corner Detection Filter
  • Noble Corner Detection Filter
  • Shi-Tomasi Corner Detection Filter
  • Non Maximum Suppression Filter
  • X/Y Derivative Filter
  • Crosshair Generator
  • Dilation Filter
  • RGB Dilation Filter
  • Erosion Filter
  • RGB Erosion Filter
  • Opening Filter
  • RGB Opening Filter
  • Closing Filter
  • RGB Closing Filter
  • Local Binary Pattern Filter
  • Low Pass Filter
  • High Pass Filter
  • Motion Detector
  • Hough Transform Line Detector
  • Line Generator
  • Motion Blur Filter
  • Zoom Blur Filter
  • Chroma Key Blend Filter
  • Dissolve Blend Filter
  • Multiply Blend Filter
  • Add Blend Filter
  • Subtract Blend Filter
  • Divide Blend Filter
  • Overlay Blend Filter
  • Darken Blend Filter
  • Lighten Blend Filter
  • Color Burn Blend Filter
  • Color Dodge Blend Filter
  • Screen Blend Filter
  • Exclusion Blend Filter
  • Difference Blend Filter
  • Hard Light Blend Filter
  • Soft Light Blend Filter
  • Alpha Blend Filter
  • Source Over Blend Filter
  • Color Burn Blend Filter
  • Color Dodge Blend Filter
  • Normal Blend Filter
  • Color Blend Filter
  • Hue Blend Filter
  • Saturation Blend Filter
  • Luminosity Blend Filter
  • Linear Burn Blend Filter
  • Poisson Blend Filter
  • Mask Filter
  • Pixellate Filter
  • Polar Pixellate Filter
  • Polka Dot Filter
  • Halftone Filter
  • Crosshatch Filter
  • Sketch Filter
  • Threshold Sketch Filter
  • Toon Filter
  • Smooth Toon Filter
  • Emboss Filter
  • Posterize Filter
  • Swirl Filter
  • Bulge Distortion Filter
  • Pinch Distortion Filter
  • Stretch Distortion Filter
  • Sphere Refraction Filter
  • Glass Sphere Filter
  • Vignette Filter
  • Kuwahara Filter
  • Kuwahara Radius 3 Filter
  • Perlin Noise Filter
  • CGAColorspace Filter
  • Mosaic Filter
  • JFAVoronoi Filter
  • Voronoi Consumer Filter

認真說,GPUImage 代碼里帶的這個?濾鏡展示示例 app?能在 AppStore 賣 3.99 刀。要是再加上 twitter 集成和一些聲音效果,賣個 6.99 刀不成問題。

渲染管線

GPUImage 從本質上來說是一個渲染管線的 Objective-C 抽象。從相機、網絡或者磁盤上加載的源圖像,在經過一系列濾鏡處理后,最終輸出到了 view、graphics context 或是數據流中。

例如說,攝像頭中的圖像可以應用一個 Color Levels 濾鏡,來模擬各種色盲效果,然后實時顯示在一個 view 中。

GPUImageVideoCamera *videoCamera = [[GPUImageVideoCamera alloc]initWithSessionPreset:AVCaptureSessionPreset640x480cameraPosition:AVCaptureDevicePositionBack]; videoCamera.outputImageOrientation = UIInterfaceOrientationPortrait;GPUImageFilter *filter = [[GPUImageLevelsFilter alloc] initWithFragmentShaderFromFile:@"CustomShader"]; [filter setRedMin:0.299 gamma:1.0 max:1.0 minOut:0.0 maxOut:1.0]; [filter setGreenMin:0.587 gamma:1.0 max:1.0 minOut:0.0 maxOut:1.0]; [filter setBlueMin:0.114 gamma:1.0 max:1.0 minOut:0.0 maxOut:1.0]; [videoCamera addTarget:filter];GPUImageView *filteredVideoView = [[GPUImageView alloc] initWithFrame:self.view.bounds)]; [filter addTarget:filteredVideoView]; [self.view addSubView:filteredVideoView];[videoCamera startCameraCapture];

或者,結合不同的顏色混合模式,圖像效果和一些調整,你可以把靜止圖像轉變成可以分享給你時髦的朋友們看看的精美圖像(例子來自基于 GPUImage 的FilterKit)。

GPUImageFilterGroup *filter = [[FKGPUFilterGroup alloc] init];GPUImageSaturationFilter *saturationFilter = [[GPUImageSaturationFilter alloc] init]; [saturationFilter setSaturation:0.5];GPUImageMonochromeFilter *monochromeFilter = [[GPUImageMonochromeFilter alloc] init]; [monochromeFilter setColor:(GPUVector4){0.0f, 0.0f, 1.0f, 1.0f}]; [monochromeFilter setIntensity:0.2];GPUImageVignetteFilter *vignetteFilter = [[GPUImageVignetteFilter alloc] init]; [vignetteFilter setVignetteEnd:0.7];GPUImageExposureFilter *exposureFilter = [[GPUImageExposureFilter alloc] init]; [exposureFilter setExposure:0.3];[filter addGPUFilter:exposureFilter]; [filter addGPUFilter:monochromeFilter]; [filter addGPUFilter:saturationFilter]; [filter addGPUFilter:vignetteFilter];

看完了 GPUImage 的功能,一定很興奮吧。GPUImage 非常簡單,可以馬上開始使用(不需要了解 OpenGL),性能上也足夠完成你想要的一切。不止是這樣,它還自帶了非常多的積木一樣的部件 -- 色彩調整,混合模式,你能想到的想不到的一切視覺效果。

GPUImage 是開源社區少有的好東西,我們 Mac 和 iOS 開發者非常幸運的能擁有它。用 GPUImage 做些牛逼的東西,向其他人展示一個嶄新的世界。


譯者吐槽時間

我自己也用過一點 GPUImage,方便是很方便,不光是省掉了 AVFoundation 的許多煩人的 setup 代碼,還內置了許多濾鏡效果。不過它也有不少坑,我遇到的一個就是占用太多內存,一段時間后就 crash 掉了,畢竟是處理視頻,需要不少內存,iPhone 的內存又不太多,就要更加注意。我當時是加了一個 @autoreleasepool 就好多了。

總結

以上是生活随笔為你收集整理的GPUImage的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。