我正在使用GPUImage2进行视频处理。当应用程序启动时,我创建一个六边形网格并将其添加到我的cameraView。网格是全屏的,由大约100个六边形组成。 一般来说,我想要实现的是
对于每个帧,我想在网格的每个单元格中找到平均颜色(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 :(得分:0)
根本不编码您的平台,但 GPU 架构允许这样做:
我不知道你的框架可以为你做什么。如果渲染的东西比中心点大,那么你需要在渲染中使用另一个传递或使用更大的原语然后指向#2 ,但这意味着你将计算每个渲染像素的平均颜色这会减慢很多事情。
看一下使用这种技术的 GLSL 着色器(完全不同的任务,但技术是相同的):
如果这不适合您的平台,请忽略此答案......