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; }
取り敢えずキャプチャしたものが上図.並べてはみたけど,ウィンドウ枠の除去が OpenCVの標準じゃ出来ないみたいなので,表示の方法は変えないといけなさそう.
現状,SDKとして提供されているのは,カメラ画像の取得,魚眼レンズの樽ひずみの補正,各パラメータ用のアクセッサのみで,Oculus使ってARが出来るよって押し出してた割には,公式だけではまだあまり何かが出来る状況ではないような印象.無料でARやるなら,Vuforiaライブラリとか使うことになるのかなー.
14/04/19 追記
4月頭にはAR用の機能をまとめた OvrvisionEx Class が追加されていたようです.SDK単体でマーカ検出ができるようになりました.