2016-11-05 41 views
0

我正在使用GPUImage2進行視頻處理。當應用程序啓動時,我創建一個六角形網格並將其添加到我的cameraView。網格是全屏的,由大約100個六邊形組成。 一般來說,我試圖實現的是GPUImage:如何確定六邊形內的平均顏色?

對於每一幀我想在網格的每個單元格中找到平均顏色(RGB或甚至更好的HSV)。 當確定顏色時,我想根據平均顏色在每個六邊形的中心畫一些東西。

我有一個六邊形數組,每個人都知道它的頂點的座標和中心。 我也有一個包含這些六邊形邊界的UIBezierPaths數組(以防萬一)。

所以我的代碼看起來像這樣

class ViewController: UIViewController { 
    var hexagons = [HKHexagon]() 
    var hexagonsBounds = [UIBezierPath]() 
    let averageColorExtractor = AverageColorExtractor() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     do { 
      camera = try Camera(sessionPreset:AVCaptureSessionPreset1920x1080) 
      camera.delegate = self 
      cameraView.orientation = .landscapeLeft 
      camera --> cameraView 

      camera.startCapture() 
      drawGrid() 
     } catch { 
      fatalError("Could not initialize rendering pipeline: \(error)") 
     } 
    } 
} 

extension ViewController: CameraDelegate { 
    func didCaptureBuffer(_ sampleBuffer: CMSampleBuffer) { 
     for hexagon in hexagons { 

     } 
    } 
} 

我猜didCaptureBuffer()應該是averageColorExtractor適用於每個六邊形的地方,但沒有一個想法,下一步怎麼辦..

我我是iOS開發新手,這是我第一次使用GPUImage2 ...請引導我朝着正確的方向發展。

回答

0

可言,但GPU架構不編碼爲您的平臺允許做這樣的:

  1. 通過圖像紋理
  2. 渲染中心點只爲點
  3. 在片段着色器中計算圍繞實際位置的十六進制的平均顏色 這是最難和最多的要求苛刻的部分。如果計算剛剛刻出的圓圈,很容易,但對於六邊形,需要計算哪個紋理元素在裏面,哪些不是。對於軸對齊的六邊形,您可以將十六進制分爲多個區域(2x矩形,4x三角形),以便旋轉的六邊形需要添加變換矩陣。
  4. 在中心點內計算/渲染輸出。

我不知道你的框架可以爲你做些什麼。如果你渲染的東西比較大,那麼只需要中心點,那麼你需要在你的渲染中使用另一個傳遞,或者使用更大的基元,然後指向#2,但這意味着你將計算每個渲染像素的平均顏色,這會降低速度很多。

看看GLSL着色器使用這種技術(完全不同的任務,但該技術是相同的):

如果這不是適用於您的平臺然後忽略這個答案...