昨日書いたソフトのキャプチャー部分をOvrvision SDKを使って書き直してみた。
Ovrvision SDKのexampleソースコードをビルドして動かしてみたり、ソースコードの中身を眺めたりしている。wizapplyというライブラリがアプリ作りに使われているけど、OculusやOvrvisionには関係なさそうだ。SDKの使い方が逆に分かりにくい感じだった。
なんとかSDKのリファレンスと一緒に眺めて、なんとなくはSDKの使い方が理解できたようだ。
ソースコードはこのようになった。
#include <stdio.h> #include <stdlib.h> #include "ovrvision.h" #pragma comment( lib, "ovrvision.lib") #include "opencv2/opencv.hpp" #pragma comment( lib, "lib/opencv_core242.lib") #pragma comment( lib, "lib/opencv_highgui242.lib") #pragma comment( lib, "lib/opencv_imgproc242.lib") OVR::Ovrvision* g_pOvrvision; int main() { IplImage *image,*frame1,*frame2,*frame1_copy,*frame2_copy; CvRect rect1s,rect2s,rect1d,rect2d; int w,h,adj; g_pOvrvision = new OVR::Ovrvision(); if (g_pOvrvision->Open(0,OVR::OV_CAMVGA_FULL)!=OV_RESULT_OK) { printf("Ovrvision camera not found.\n"); getchar(); return -1; } w = g_pOvrvision->GetImageWidth(); h = g_pOvrvision->GetImageHeight(); frame1 = cvCreateImage(cvSize(w,h), 8, 3); frame2 = cvCreateImage(cvSize(w,h), 8, 3); frame1_copy = cvCreateImage(cvSize(w,h), 8, 3); frame2_copy = cvCreateImage(cvSize(w,h), 8, 3); image = cvCreateImage(cvSize(w,h), 8, 3); adj = w/32; rect1s = cvRect(w/4+adj,0, w/2,h); rect2s = cvRect(w/4-adj,0, w/2,h); rect1d = cvRect(w/2,0, w/2,h); rect2d = cvRect(0 ,0, w/2,h); cvNamedWindow("image", 0); cvSetWindowProperty("image",CV_WND_PROP_FULLSCREEN,CV_WINDOW_FULLSCREEN); // fullscreen // main loop while(1) { if(cvWaitKey( 1 ) >= 0) { break; } // any key to quit // get image g_pOvrvision->PreStoreCamData(); g_pOvrvision->GetCamImage((unsigned char *)frame1->imageData,OVR::OV_CAMEYE_LEFT); g_pOvrvision->GetCamImage((unsigned char *)frame2->imageData,OVR::OV_CAMEYE_RIGHT); cvFlip(frame1, frame1_copy); // flip cvFlip(frame2, frame2_copy); // flip cvSetImageROI(frame1_copy,rect1s); cvSetImageROI(image,rect1d); cvCopy(frame1_copy, image); cvSetImageROI(frame2_copy,rect2s); cvSetImageROI(image,rect2d); cvCopy(frame2_copy, image); cvResetImageROI(image); cvResetImageROI(frame1_copy); cvResetImageROI(frame2_copy); cvShowImage("image", image); // display } g_pOvrvision->Close(); cvDestroyAllWindows(); return 0; }
–
追記
Ovrvision以外のカメラが存在していてもちゃんとOvrvisionをOpenできるようだ。
—
追記2
カメラの左右がおかしいし、色も変だ。
OpenCVの画像形式とGetCamImageで得られる画像とは互換性がないのだろうか?
→ なおした