はじめに
OpenCV 3.4 がでました!!じゃあ、その記事を書くしかないじゃないですか、やったーー!!ということで、OpenCV Advent Calender 26日目 の記事です!
OpenCV 3.4 contribに、ovisというモジュールが増えた。
あれ?何か新しいモジュールが生えている。ということは調査しないとだめですね!
確認したところ、11/3 からですね。
実装上、OpenGL3がRenderSystem固定になっているので、それが使える環境じゃないとだめですよー。
ovis とは?
ovis moduleのREADMEより
allows you to render 3D data using the OGRE 3D engine and obtain the rendering as cv::Mat
つまり、3DデータをOGRE 3Dエンジンでcv::Matへレンダリングすることができる、っていう話ですね。
OGRE 3Dエンジンとは?
OGRE (Object-Oriented Graphics Rendering Engine) は、シーン指向の柔軟な3次元レンダリングエンジンで、ハードウェアアクセラレーションを活用した3Dグラフィックスのアプリケーションを容易に開発できるよう設計されC++で書かれている。
何ができるようになるのか?
3Dモデルを画像に浮かばせられるので、ARがやりやすくなりますね!サンプルコードは、arucoとの連携をやってますね!
早速、contribをコンパイルしてみよう(失敗編)
Ubuntu 17.04 環境
libreoffice 抹消
$ sudo apt install git
$ git clone (OpenCVとcontrib)
$ sudo apt install cmake
ですよねー。じゃ、必要なライブラリを入れてと…
で、ここまでの問題点。
OGRE 1.10が必要なのに、Ubuntu 17.04だと、OGREが1.9までしかリリースされていない。ということは、、、OGREのインストールかrあやってみよー
OGREをインストールしましょう
(最終的にはいろいろ入れていますので…)
$ sudo apt install freetype
$ sudo apt install freeglut3-dev libglew1.5-dev
$ sudo apt install libzzip-dev
$ sudo apt install libxaw7-dev
下からソースコードをダウンロード。
展開して、cmake っと…… 。なぜかこのタイミングで必要なライブラリが入っていないとZZIPだのfreetypeのbuild始めましたね。この時 mkdir build してきれいにやろうとしたら「FreeTypeがない」などといわれたので、もしかすると環境汚れるのを覚悟しないとダメみたいですね。とりあえずトライアルアンドエラーで試してなんとか動かした。
$ cmake .
x11などがないとこういう画面
Makefileできたのでコンパイルする。
$ make -j 8
$ sudo make install
どうやら、入ったっぽい。
早速、contribをコンパイルしてみよう(再チャレンジ編)
$ cmake -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules/ ../opencv
これでいけるはず…
$ make -j 8
$ sudo make install
デモを作ろう
Makefile
a.out : a.cpp
g++ -g a.cpppkg-config zziplib OGRE opencv --cflags --libs
`
で、こうなった。
ソースコードはこんな感じ。テストデータは、OGREのソースコードの中にあるものを拝借したよ!
#include <cv.hpp>
#include <opencv2/ovis.hpp>
int main()
{
cv::ovis::addResourceLocation("packs/Sinbad.zip");
// camera intrinsics
cv::Size imsize (800, 600);
cv::Mat K = (cv::Mat_<double>(3,3) << 1200, 0, 0,
0, 900, 0,
0, 0, 1);
// observer scene
cv::Mat tvec = (cv::Mat_<double>(3,1) << 0 , 0 , 0 );
cv::Mat rot = (cv::Mat_<double>(3,3) << 1.57 , 0 , 0 , 0 , 0, 0, 0, 0 ,0 );
cv::Mat tvec2 = (cv::Mat_<double>(3,1) << 30 , 0 , -100 );
cv::Mat tvec3 = (cv::Mat_<double>(3,1) << 0 , 0 , -150 );
cv::Ptr<cv::ovis::WindowScene> owin = cv::ovis::createWindow("VR", imsize);
cv::ovis::createGridMesh("ground",
cv::Size(10.0f, 10.0f), cv::Size(10, 10));
owin->createEntity("ground", "ground", tvec,rot );
owin->createCameraEntity("cam", K, imsize, 3.0);
owin->createEntity("figure", "Sinbad.mesh", tvec2 );
// externally defined mesh
owin->createLightEntity("sun", tvec3 );
// interaction scene
cv::Ptr<cv::ovis::WindowScene> iwin = cv::ovis::createWindow("AR", imsize,
cv::ovis::SCENE_SEPERATE | cv::ovis::SCENE_INTERACTIVE);
iwin->createEntity("figure", "Sinbad.mesh", tvec2 );
iwin->createLightEntity("sun", tvec3 );
iwin->setCameraIntrinsics(K, imsize);
while ( cv::ovis::renderOneFrame() )
{
cv::Mat R;
cv::Mat t;
iwin->getCameraPose(R, t);
owin->updateEntityPose("cam", t, R);
}
return 0;
}
以上で、OpenCV Advent Calendar 2017は終了となります!年末の忙しい折にも関わらず、投稿いただいた皆様、閲覧いただいた皆様、ありがとうございました!それでは、来年もよい一年になりますように!!
デモを動かそう(失敗編)
デモを動かすのに必要になりそうなライブラリを一式インストール
ダメぽ……というか、python有効じゃない?
$ sudo apt install python-numpy
$ sudo apt install python3-numpy
$ sudo apt install python3-dev
あとで気が付いたが、cmakeしなおすときにキャッシュ削除してなかったため、ダメだったと