2016-11-05 6 views
0

私はGPUImage2でビデオ処理をしています。アプリケーションが起動すると、六角形のグリッドを作成し、カメラビューに追加します。グリッドはフルスクリーンで、約100個の六角形で構成されています。 一般的には、私が達成しようとしているのはGPUImage:六角形内の平均色を決定する方法は?

グリッドの各セル内の平均的な色(RGBまたはより良いHSV)を探したいと思います。 色が決まったら、平均色に応じて各六角形の中央に何かを描きたいと思います。

私は六角形の配列を持っていますが、それぞれ頂点の座標と中心を知っています。 私はまた、これらの六角形の境界を含むUIBezierPathsを持つ配列を持っています。

だから私のコードは、私はdidCaptureBuffer()はそれぞれの六角形にaverageColorExtractorを適用する場所でなければなりませんが、次に何を行うにアイデアを持っていないと思います。この

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 { 

     } 
    } 
} 

のように見えます。..

私はiOS開発の初心者です。初めてGPUImage2を使用しています...正しい方向に案内してください。

答えて

0

すべてが、GPUアーキテクチャは、このようにそれを行うことができますでご使用のプラットフォーム用のコーディングなし:

  1. が唯一のポイント
  2. として中心点を描画テクスチャとして画像を渡します
  3. フラグメントシェーダでは、実際の位置を中心とした16進数の平均色を計算します。 これは最も難しく、面倒な要求部分。内接円を計算するのは簡単ですが、六角形の場合は、どのテクセルが内側にあり、どのテクセルが内側にあるかを計算する必要があります。軸が整列した六角形の場合、ヘクスを回転させるためにhexを2つの矩形(4x三角形)に分割することができます。
  4. 出力を中心点内で計算/レンダリングします。

あなたのフレームワークがこれからあなたにできることはわかりません。あなたがレンダリングしたものが中央ポイントだけ大きい場合、レンダリングに別のパスを使用するか、より大きなプリミティブを使用してから#2のポイントを使用する必要がありますが、レンダリングされたピクセルごとに平均色を計算しますたくさん。

(完全に異なるタスクのためではなく、技術が同じである)、この技術を使用していますGLSLシェーダを見てみましょう:これは、お使いのプラットフォームに適応されていない場合

をこの回答を無視してください...

関連する問題