1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

OpenCV 3.4 contribで導入されたovisを無理やり動かした

Last updated at Posted at 2017-12-24

はじめに

OpenCV 3.4 がでました!!じゃあ、その記事を書くしかないじゃないですか、やったーー!!ということで、OpenCV Advent Calender 26日目 の記事です!

OpenCV 3.4 contribに、ovisというモジュールが増えた。

あれ?何か新しいモジュールが生えている。ということは調査しないとだめですね!

確認したところ、11/3 からですね。

image.png

実装上、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

image.png

ですよねー。じゃ、必要なライブラリを入れてと…

image.png

で、ここまでの問題点。

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

下からソースコードをダウンロード。

https://www.ogre3d.org/download/sdk

image.png

展開して、cmake っと…… 。なぜかこのタイミングで必要なライブラリが入っていないとZZIPだのfreetypeのbuild始めましたね。この時 mkdir build してきれいにやろうとしたら「FreeTypeがない」などといわれたので、もしかすると環境汚れるのを覚悟しないとダメみたいですね。とりあえずトライアルアンドエラーで試してなんとか動かした。

$ cmake .

x11などがないとこういう画面

image.png

Makefileできたのでコンパイルする。

$ make -j 8
$ sudo make install

image.png

どうやら、入ったっぽい。

早速、contribをコンパイルしてみよう(再チャレンジ編)

$ cmake -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules/ ../opencv

これでいけるはず…

image.png

$ make -j 8
$ sudo make install

デモを作ろう

Makefile

a.out : a.cpp
g++ -g a.cpp pkg-config zziplib OGRE opencv --cflags --libs `

で、こうなった。

image.png

ソースコードはこんな感じ。テストデータは、OGREのソースコードの中にあるものを拝借したよ!

a.cpp
#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

image.png

あとで気が付いたが、cmakeしなおすときにキャッシュ削除してなかったため、ダメだったと

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?