如何将iPhone相机坐标转换为视图坐标?

时间:2010-12-07 20:21:24

标签: iphone objective-c camera avfoundation

我正在创建一个使用OpenCV来解析iPhone摄像头输出并在屏幕上显示结果的应用程序。我知道iPhone相机以横向方向读取,因此需要在屏幕上显示结果之前进行转换。我想我只需要缩放,旋转-90度然后平移(tx =图像的宽度),但这不起作用。我在网上找到了一些示例代码,如下所示,但是除了横向以外的任何方向都没有。

从相机视图转换为用户视图的正确方法是什么?

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection 
{
    //lock the pixel buffer
    CVImageBufferRef pixelBuffer = CMSampleBufferGetImageBuffer( sampleBuffer );
    CVPixelBufferLockBaseAddress( pixelBuffer, 0 ); 

    //declare variables
    int bufferHeight = CVPixelBufferGetHeight(pixelBuffer);
    int bufferWidth = CVPixelBufferGetWidth(pixelBuffer);

    //a bunch of OpenCV stuff that finds features in an image and
    // returns a cameraRect

    //translate to view coordinates
    float scaleX = 320 / (float)bufferHeight;
    float scaleY = 460 / (float)bufferWidth;
    deviceRect.origin.x  = 320 - ((cameraRect.y + cameraRect.height) * scaleX); 
    deviceRect.origin.y  =       (cameraRect.x * scaleY);

    CVPixelBufferUnlockBaseAddress( pixelBuffer, 0 );
}

//elsewhere
previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;

编辑:如果不工作,我的意思是屏幕上显示的矩形与预览图层中可见的匹配对象不对应。我正在检测面部,并且根据电话设备的方向,屏幕上绘制的每个屏幕都会从预览图层中的面部略微偏离。在左侧横向,deviceRect完美匹配可见面。

0 个答案:

没有答案