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);
長さ、中心座標、先端座標、円の解像度を指定。
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);
続く。
上で紹介頂いたプログラムを実行すると識別子 "myWindow" が定義されていませんと言われてしまいます。
返信削除Mat myWindow;と書いてもだめでした。アドバイスのほど宜しくお願い致します。