2018年6月21日木曜日

OpenCV Viz の Widgetのサンプル(その1)

OpenCVのVizにはどんなWidgetがあるのか?確認してみる。
3Dスキャナーで計算した3次元の点をOpenCVのVizで表示するための下準備。
チュートリアルにないものを抜粋。
ここを見れば良い。
https://docs.opencv.org/3.4.1/d1/d19/group__viz.html

全3回

WAllow(矢印)

始点、終点、太さを指定する。
 auto arrow = cv::viz::WArrow(cv::Point3d(1, 0, 0),        // 始点
                               cv::Point3d(1, 1, 0),        // 終点
                               0.01,                         // 太さ
                               cv::viz::Color::amethyst());  // 色
  myWindow.showWidget("Arrow", arrow);↲         


WCircle(円)

半径、中心座標、平面の法線、太さを指定する。
塗りつぶしたいときは、半径を半分にして、太さを半径と同じ値にする。
  auto circle = cv::viz::WCircle(1.0,                         // 半径
                                 cv::Point3d(0.0 ,0.0, 0.0),  // 中心
                                 cv::Vec3b(1.0, 0.0, 0.0),    // 平面の法線
                                 0.01,                        // 太さ
                                 cv::viz::Color::celestial_blue());
  myWindow.showWidget("Circle", circle);



WCone(円柱)

長さ、中心座標、先端座標、円の解像度を指定。
  auto cone = cv::viz::WCone(0.5,                     // 長さ
                             cv::Point3d(-1, -1, -1), // 中心
                             cv::Point3d(-2, -2, -2), // 先端
                             12,                           // 円の解像度(何角型か)
                             cv::viz::Color::chartreuse());
  myWindow.showWidget("Cone", cone);


WCylinder(円柱)

始点、終点、半径、円の解像度を指定。
両端は閉じていないので、WCricleを描画してあげる必要がある。
   auto cylinder = cv::viz::WCylinder(cv::Point3d(2.0, 2.0, 2.0),  // 始点
                                     cv::Point3d(3.0, 2.0, 2.0),  // 終点
                                     1.0, // 半径
                                     30,  // 円の解像度(何角型か)
                                     cv::viz::Color::maroon());
  myWindow.showWidget("Cylinder", cylinder);


WGrid(グリッド)

グリッドの平面を描画。
中心座標、平面の法線、Y軸の方向、グリットのマス目、グリット間の距離を指定。
  auto grid = cv::viz::WGrid(cv::Point3d(0.0, 0.0, 0.0),  // 中心座標
                             cv::Vec3d(-1.0, 1.0, 0.0),   // 平面の法線
                             cv::Vec3d(0.0, 1.0, 0.0),    // Y軸の方向
                             cv::Vec2i(10, 10),           // グリッドのマス目
                             cv::Vec2d(0.2, 0.2),         // グリッド間の距離
                             cv::viz::Color::lime());
  myWindow.showWidget("Grid", grid);


続く。

1 件のコメント:

  1. 上で紹介頂いたプログラムを実行すると識別子 "myWindow" が定義されていませんと言われてしまいます。
    Mat myWindow;と書いてもだめでした。アドバイスのほど宜しくお願い致します。

    返信削除