2010-12-07 468 views
2

我正在製作一個應用程序,它使用OpenCV解析iPhone攝像頭的輸出並在屏幕上顯示結果。我知道iPhone相機橫向讀取,所以需要在屏幕上顯示結果之前進行轉換。我想我只需要縮放,旋轉-90度然後平移(tx =圖像寬度),但那不起作用。我在網上發現了一些示例代碼,下面是示例代碼,但對於左側以外的任何方向都不起作用。如何將iPhone攝像頭座標轉換爲視圖座標?

什麼是從攝像機視圖轉換爲用戶視圖的正確方法?

- (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的方向與預覽圖層中的臉部有關或很少。在橫向左側,deviceRect與可見面完全匹配。

+0

你說它不起作用 - 你能提供一些它不工作的細節嗎? – Greg 2010-12-07 20:25:09

回答

0
CGRectMake((640-puntos[1])*480/640-135, puntos[0]*320/480+25,5, 5); 

我正在做這個轉換,它正在或多或少的工作。

相關問題