Ovrvision - 映像表示

先週,Oculus Rift用のステレオカメラである,Ovrvisionが手元に届いたので,映像を表示するだけの最低限のプログラムを書いてみました.

環境は,VisualStudio2010, C++版OvrvisionSDK, OpenCV2.4 です.

#include <iostream>
#include <opencv2¥opencv.hpp>
#include <ovrvision.h>
using namespace System;

const int  windows_pos[2]      = {200, 200};
const char left_window_name[]  = "OVRVISION_LEFT";
const char right_window_name[] = "OVRVISION_RIGHT";

OVR::Ovrvision* g_ovr;

int main(array <String ^> ^args)
{
    g_ovr = new OVR::Ovrvision();
    
    if ( g_ovr->Open(0, OVR::OV_CAMVGA_FULL) != 0 ){
        cout << "Failed to detect ovrvision camera..." ;
        exit(-1);
    }
    cv::namedWindow( left_window_name, CV_WINDOW_AUTOSIZE );
    cv::namedWindow( right_window_name, CV_WINDOW_AUTOSIZE );
    
     // Display
    while(1) {
        cv::Mat l_image( 480, 640, CV_8UC3 ), r_image( 480, 640, CV_8UC3 );
        cv::Mat l_image_buf( 480, 640, CV_8UC3 ), r_image_buf( 480, 640, CV_8UC3 );
        
        // Get pixel data. 640*480*3Byte
        //g_ovr->GetCamImage( l_image.data, OVR::OV_CAMEYE_LEFT );
        //g_ovr->GetCamImage( r_image.data, OVR::OV_CAMEYE_RIGHT );
        g_ovr->GetCamImage( l_image_buf.data, OVR::OV_CAMEYE_LEFT );
        g_ovr->GetCamImage( r_image_buf.data, OVR::OV_CAMEYE_RIGHT );
        
        // Undistortion
        g_ovr->ImageUndistort( l_image.data, l_image_buf.data );
        g_ovr->ImageUndistort( r_image.data, r_image_buf.data );
        
        cv::cvtColor( l_image, l_image,  CV_RGB2BGR );
        cv::cvtColor( r_image, r_image, CV_RGB2BGR );
        
        // draw                    
        cv::imshow( left_window_name, l_image );
        cv::moveWindow( left_window_name, windows_pos[0], windows_pos[1] );
        cv::imshow( right_window_name, r_image );
        cv::moveWindow( right_window_name, windows_pos[0] + g_ovr->GetImageWidth() + 8, windows_pos[1] );
        
        if( cv::waitKey(27) >= 0 ) break ;
        // cout << g_ovr->GetImageRate() << endl;
    }
    
    g_ovr->Close();    
    delete g_ovr;
    cv::destroyWindow(left_window_name);
    cv::destroyWindow(right_window_name);
    
    return 0;
}

f:id:melank:20140402003114p:plain

取り敢えずキャプチャしたものが上図.並べてはみたけど,ウィンドウ枠の除去が OpenCVの標準じゃ出来ないみたいなので,表示の方法は変えないといけなさそう.

現状,SDKとして提供されているのは,カメラ画像の取得,魚眼レンズの樽ひずみの補正,各パラメータ用のアクセッサのみで,Oculus使ってARが出来るよって押し出してた割には,公式だけではまだあまり何かが出来る状況ではないような印象.無料でARやるなら,Vuforiaライブラリとか使うことになるのかなー.

14/04/19 追記
4月頭にはAR用の機能をまとめた OvrvisionEx Class が追加されていたようです.SDK単体でマーカ検出ができるようになりました.