如何在Swift中应用MPSImageGuidedFilter

问题描述 投票:-1回答:1

我已成功地在Python中为我的项目应用了openCVguidedFilter,现在我必须将此功能带到我的IOS应用程序中。我搜索了Apple开发人员网站,发现了一个名为MPSImageGuidedFilter的过滤器。我想它的工作方式与OpencVguidedFilter相似。但是,我在IOS编程方面的有限知识并不能让我弄清楚如何使用它。不幸的是,我也无法在网络上找到示例代码。有人使用过此过滤器吗?我非常感谢您的帮助。或者在MPS下使用任何过滤器的示例代码将有助于找出。过滤器的链接为:https://developer.apple.com/documentation/metalperformanceshaders/mpsimageguidedfilter

谢谢

ios swift filter metal
1个回答
0
投票

[经过几天的努力,我设法制作了MPSImageGUidedFilter。请在下面查看要处理的代码:

import UIKit

导入MetalPerformanceShaders导入MetalKit

类ViewController:UIViewController {

public var texIn: MTLTexture!

public var coefficient: MTLTexture!

public var context: CIContext!

let device = MTLCreateSystemDefaultDevice()!
var queue: MTLCommandQueue!
var Metalview: MTKView { return view as! MTKView }


override func viewDidLoad() {

    super.viewDidLoad()

    Metalview.drawableSize.height = 412
    Metalview.drawableSize.width = 326
    Metalview.framebufferOnly = false
    Metalview.device = device

    Metalview.delegate = self

    queue = device.makeCommandQueue()
    let textureLoader = MTKTextureLoader(device: device)

    let urlCoeff = Bundle.main.url(forResource: "mask", withExtension: "png")
    do {
        coefficient = try textureLoader.newTexture(URL: urlCoeff!, options: [:])

    } catch  {
        fatalError("coefficient file not uploaded")
    }


    let url = Bundle.main.url(forResource: "guide", withExtension: "png")
    do {
        texIn = try textureLoader.newTexture(URL: url!, options: [:])

    } catch  {
        fatalError("resource file not uploaded")
    }

}

}

扩展名ViewController:MTKViewDelegate {

func mtkView(_ view: MTKView, drawableSizeWillChange size: CGSize) {}

func draw(in view: MTKView) {

    guard  let commandBuffer = queue.makeCommandBuffer(),
           let drawable = view.currentDrawable else {
        return
    }


    let shader = MPSImageGuidedFilter(device: device, kernelDiameter: 5)
    shader.epsilon = 0.001

//让着色器= MPSImageGaussianBlur(device:device,sigma:3)

//让shader = MPSImageSobel(设备:设备)//让shader = MPSImageAreaMax(device:device,kernelWidth:3,kernelHeight:3)//让shader = MPSImageAreaMin(设备:设备,内核宽度:5,内核高度:5)//让shader = MPSImageMedian(设备:device,kernelDiameter:3)//让shader = MPSImageBox(设备:设备,内核宽度:9,内核高度:9)//让shader = MPSImageTent(设备:设备,kernelWidth:9,kernelHeight:9)

    let textOut = drawable.texture

    shader.encodeReconstruction(to: commandBuffer, guidanceTexture: texIn, coefficientsTexture: coefficient, destinationTexture: textOut)

// shader.encode(commandBuffer:commandBuffer,sourceTexture:texIn,destinationTexture:textOut)commandBuffer.present(drawable)commandBuffer.commit()

}

}

© www.soinside.com 2019 - 2024. All rights reserved.