iOS 视频图像处理中的参照坐标系

本文详述了iOS中视频图像处理时不同环节的参照坐标系及其转换,包括摄像头捕获、视频帧显示、图像旋转、人脸识别过程中的坐标变换,以确保图像在屏幕上正确呈现和人脸识别定位的准确性。
摘要由CSDN通过智能技术生成

在iOS进行视频图像处理的过程中,图像数据通过硬件(摄像头)捕获传入内存,再使用各类软件框架提供的功能对数据进行处理,最后将结果显示在屏幕上。在整个过程中涉及到不同的环节,而这些环节由于各种原因(历史因素、设计因素等)使用的参照坐标系是不相同的。在图像处理过程中,一类重要的数据是与图像相关的位置(position)和尺寸(size)数据,而这类数据与当前的参照坐标系密切相关。这使得在上一环节处理中得到的数据在下一环节中要能正确处理,则必须要根据参照坐标系的不同而作相应的转换,否则得到的是扭曲变形甚至错误的图像结果。初学者在学习视频处理的时候,经常被不同环节过程中参照坐标系的变化弄得迷惑不解,或是错误的处理图像。本文在此详细说明各处理环节中的参照坐标系定义及各环节之间的变换方法。

 

1.视频捕获的图像显示

打开xcode创建新项,选择iOS-Application-SingleView Application,输入项目名称VideoProcess,点击Next-Create完成项目创建。



打开ViewController.swift文件,导入框架

import AVFoundation

添加属性

let captureSession=AVCaptureSession()

在viewDidLoad方法加入以下代码

        captureSession.sessionPreset = AVCaptureSessionPresetPhoto
        let devices = AVCaptureDevice.devices()
        for device in devices {
            if (device.hasMediaType(AVMediaTypeVideo)) {
                //前置摄像头
                if (device.position == AVCaptureDevicePosition.Front) {
                    if let captureDevice=try? AVCaptureDeviceInput(device: device as! AVCaptureDevice) {
                        if captureSession.canAddInput(captureDevice) {
                            captureSession.addInput(captureDevice)
                            setupSessionOutput()
                        }
                    }
                }
            }
        }

以上代码加入前置摄像头作为输入设备。如果添加成功,则调用setupSessionOutput()方法设置会话期的输出设备。

接下来实现setupSessionOutput()方法,代码如下

    func setupSessionOutput() {
        //添加输出设备到session中,这里添加的是AVCaptureVideoDataOutput,表示视频里的每一帧,除此之外,还有AVCaptureMovieFileOutput(完整的视频)、AVCaptureAudioDataOutput(音频)、AVCaptureStillImageOutput(静态图)等
        let output = AVCaptureVideoDataOutput()
        let cameraQueue = dispatch_queue_create("cameraQueue", DISPATCH_QUEUE_SERIAL)
        output.setSampleBufferDelegate(self, queue: cameraQueue)
        //videoSettings指定一个字典,但是目前只支持kCVPixelBufferPixelFormatTypeKey,用它指定像素的输出格式,这个参数直接影响到生成图像的成功与否
        output.videoSettings = [kCVPixelBufferPixelFormatTypeKey: Int(kCVPixelFormatType_32BGRA)]
        if captureSession.canAddOutput(output) {
            captureSession.addOutput(output)
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值