Ovrvision用のキャプチャーソフトを書いてみている (その4)

この間書いたコードがちょっと間違っていたので修正した。
ovrvision.libのGetCamImageで得られる画像の形式はRGBでないので、正しく色が出ていなかった。
BGRからRGBに変換(つまりRとBを入れ替える)しなくてはならない。
Flip処理についても上下だけでなく左右も反転しなくてはならなかった。

修正したコードは以下の通り。

#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);
		cvCvtColor(frame1,frame1_copy,CV_RGB2BGR);
		cvCvtColor(frame2,frame2_copy,CV_RGB2BGR);
		cvFlip(frame1_copy,NULL, -1); // flip
		cvFlip(frame2_copy,NULL, -1); // 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;
}


追記

キャプチャー処理で、

g_pOvrvision->GetCamImage(
    (unsigned char *)frame1->imageData,
    OVR::OV_CAMEYE_LEFT);

の部分を

g_pOvrvision->GetCamImage(
    (unsigned char *)frame1->imageData,
    OVR::OV_CAMEYE_LEFT,OVR:::OV_PSQT_NONE);

とすると、ライブラリ内での画像処理無しで高速かつ少し広い範囲の画像を取得するとこができるらしい。
Oculus勉強会関西に行ったときにメーカーの人と話して、そのとき教えて頂いた。




Ovrvision用のキャプチャーソフトを書いてみている (その4)」への2件のフィードバック

  1. 負け犬

    大変申し訳無いのですが Wiiリモコンを自動接続の Wii Remote Connect1 を使わせてもらってます
    windowsタブレットのDG-D08IWBで使わせて頂いてるのですが
    Wii Remote Connect1 を一度でも使うと wiiリモコンのペアリングを削除できない状態になって
    デバイスマネージャーのwiiリモコンのBluetoothデバイスを削除しても自動的にwiiリモコンのデバイスが戻ってしまうのですが  レジストリか何かの部分まで削除しないと 完全に戻せない状態なのでしょうか?

    wiiリモコンをマウスとして使ったりゲームパッドとして使ったりしたいので 他のアプリと合わせて使おうと思ってたのですが Wii Remote Connect1 を使って接続するとwiiリモコンがPCと接続できてない(ペアリング出来てない?)
    と表示されてしまうのでちょっと困ってます

    マウス操作の方は Wii Mice Test1 が大変便利で助かってますが ゲームパッド設定とかと切り替えがないので
    少しさみしいです   でもプログラムを自分で組める方は凄いと思います

    返信

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Time limit is exhausted. Please reload CAPTCHA.

× 8 = 16