LeapMotion v2.1に更新したofxLeapMotionでCamera Imagesを使ってステレオ復元
(編集中)
ofxCvを導入しておく。
testApp.cppをちょっと編集。
if(on_distortion){
leap.getRectifiedImages();cv::Mat left, right;
left = ofxCv::toCv(leap.distortion[0]);
right = ofxCv::toCv(leap.distortion[1]);stereo(left,right);
}
ステレオ用のテスト関数を追加。
void stereo(cv::Mat& img1, cv::Mat& img2)
{
// Load Images and initialize parameters.
Mat g1, g2;
Mat disp, disp8;
cvtColor(img1, g1, CV_BGR2GRAY);
cvtColor(img2, g2, CV_BGR2GRAY);// StereoBM
StereoBM sbm;
sbm.state->SADWindowSize = 7;
sbm.state->numberOfDisparities = 128;
sbm.state->preFilterSize = 5;
sbm.state->preFilterCap = 61;
sbm.state->minDisparity = -64;
sbm.state->textureThreshold = 12;
sbm.state->uniquenessRatio = 10;
sbm.state->speckleWindowSize = 50;
sbm.state->speckleRange = 16;
sbm.state->disp12MaxDiff = 10;sbm(g1, g2, disp);
normalize(disp, disp8, 0, 255, CV_MINMAX, CV_8U);imshow("left", img1);
imshow("right", img2);
imshow("disp", disp8);}
ディスパリティを取るまでは簡単ですね。
これをXYZに変換するにはどうすればいいんだろう・・・?
[1] http://www.jayrambhia.com/blog/disparity-maps/
[2] https://community.leapmotion.com/t/sdk-2-1-raw-data-get-pixel-position-xyz/1604
[3] Use of Distortion() to get an OpenCV usable calibration map - Leap Motion Community