![](/img/trans.png)
[英]How to temporarily freeze a node in front of the camera using ARKit, SceneKit in Swift
[英]How to implement Live camera filter in ARKit with Swift 4?
我想在我的項目中集成 iPhone 相機濾鏡,我的項目基於 ARKit,我想應用蘋果在相機應用程序中提供的各種濾鏡,特別是VIVID、VIVID WARM 和 VIVID COOL ,
我已經嘗試了我在下面提到的各種可能性。
func session(_ session: ARSession, didUpdate frame: ARFrame) {
guard let currentBackgroundFrameImage = sceneView.session.currentFrame?.capturedImage,
let pixelBufferAddressOfPlane = CVPixelBufferGetBaseAddressOfPlane(currentBackgroundFrameImage, 1) else { return }
let x: size_t = CVPixelBufferGetWidthOfPlane(currentBackgroundFrameImage, 1)
let y: size_t = CVPixelBufferGetHeightOfPlane(currentBackgroundFrameImage, 1)
memset(pixelBufferAddressOfPlane, 128, Int(x * y) * 2) }
我使用上面的代碼得到了黑白相機濾鏡。
func session(_ session: ARSession, didUpdate frame: ARFrame) {
let bg = session.currentFrame?.capturedImage
if (bg != nil) {
let image = CIImage(cvPixelBuffer: bg!)
let filter:CIFilter = CIFilter(name: "CIPixellate")!
filter.setDefaults()
filter.setValue(image, forKey: kCIInputImageKey)
//let filteredImageData = filter.value(forKey: kCIOutputImageKey) as! CIImage
let context = CIContext()
//if let result = filter.outputImage,
if let result = filter.value(forKey: kCIOutputImageKey) ,
let cgImage = context.createCGImage(result as! CIImage, from: (result as! CIImage).extent) {
let imageForUser = UIImage(cgImage: cgImage)
sceneView.scene.background.contents = imageForUser
sceneView.scene.background.contentsTransform = SCNMatrix4MakeRotation(.pi / 2, 0, 0, 1)
}
}
}
使用上述代碼,相機卡住並且渲染速度非常慢,有時由於 memory 問題導致應用程序崩潰。 (在 iPhone XR 中測試)
請幫助我獲得實時相機濾鏡功能。 如果你能提供任何 ARKit 相機濾鏡的代碼,那就太好了。 謝謝你。
func session(_ session: ARSession, didUpdate frame: ARFrame) {
let image = CIImage(cvPixelBuffer: frame.capturedImage)
let filter = CIFilter(name: "CIPixellate")!
filter.setValue(image, forKey: kCIInputImageKey)
let result = filter.outputImage!
sceneView.scene.background.contents = context.createCGImage(result, from: image.extent)
sceneView.scene.background.contentsTransform = SCNMatrix4MakeRotation(.pi / 2, 0, 0, 1) // fixes orientation
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.