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(矢印)

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


WCircle(円)

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



WCone(円柱)

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


WCylinder(円柱)

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


WGrid(グリッド)

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


続く。

1 件のコメント:

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

    返信削除