首页 > 解决方案 > iOS:将 CMSampleBuffer 转换为 UIImage 以错误的方向和比例返回图像

问题描述

我正在尝试使用 AVCaptureVideoDataOutputSampleBufferDelegate 中的函数处理来自 iPhone 相机的实时视频。

视频被剪辑过,但视频的方向改变了,视频的比例很奇怪。

我使用以下代码来编辑视频。

 override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
    guard let captureDevice = AVCaptureDevice.default(for: .video) else { return }
    guard let input = try? AVCaptureDeviceInput(device: captureDevice) else { return }
    captureSession.addInput(input)
    let dataOutput = AVCaptureVideoDataOutput()
    dataOutput.setSampleBufferDelegate(self, queue: DispatchQueue(label: "videoQueue"))
    captureSession.addOutput(dataOutput)
    let preview = AVCaptureVideoPreviewLayer(session: captureSession)
    preview.frame = cview.frame
    cview.layer.addSublayer(preview) 
    captureSession.startRunning()

}

func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {

            let imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)
            let cameraImage = CIImage(cvPixelBuffer: imageBuffer!)
            let comicEffect = CIFilter(name: "CIComicEffect")

            comicEffect!.setValue(cameraImage, forKey: kCIInputImageKey)

            let filteredImage = UIImage(ciImage: comicEffect!.value(forKey: kCIOutputImageKey) as! CIImage!)

            DispatchQueue.main.async {
                self.image.image = filteredImage
            }

}

它返回以下输出:

图像输出

为了让图片更容易比较,我去掉了comicEffect: 没有漫画效果的图像

正确的比例应该是这样的:

比例正确的图片

我可以知道我应该如何解决这个问题吗?

标签: iosswiftvideocameravision

解决方案


推荐阅读