2018年6月22日金曜日

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

OpenCVのVizにはどんなWidgetがあるのか?確認してみる。

全3回

WImage3D(画像)


cv::imreadで読み出しが画像を描画する。
vizの座標系はx軸が下なので、画像を180度回転して上げる必要がある(キャプチャはしていない)。

  auto im = cv::imread("./lena.jpg");
  auto image_3d = cv::viz::WImage3D(im, cv::Size2d(40, 40));
  myWindow.showWidget("Image3D", image_3d);




WImageOverlay(画像のオーバーレイ)

画像を3次元空間描画するのでなく、2次元の平面に描画。
視点をグリグリしても、位置は変わらない。
座標をcv::Rectで指定する(左下が原点になるので注意!)。

  auto im = cv::imread("./lena.jpg");
  auto image_overlay = cv::viz::WImageOverlay(im, cv::Rect(0, 0, 250, 250));
  myWindow.showWidget("ImageOverlay", image_overlay);



WPlane(パネル)

中心座標、平面の法線、Y軸の方向、サイズを指定する。
(色はネイビーなんだけど、ちょっと見た目が違う???)


  auto plane = cv::viz::WPlane(cv::Point3d(0.0, 0.0, 0.0),  // 中心座標
                               cv::Vec3d(1.0, 0.0, 0.0),    // 平面の法線
                               cv::Vec3d(1.0, 1.0, 0.0),    // Y軸の方向
                               cv::Size2d(3.0, 3.0),        // サイズ
                               cv::viz::Color::navy());     // 色
  myWindow.showWidget("Plane", plane);


WPolyLine(多角形)

頂点の座標の配列を指定する。
ぐるぐる

  cv::Mat polyline(1, 32, CV_64FC3);
  for (auto i = 0; i < (int)polyline.total(); i++)
  {
    polyline.at(i) = cv::Vec3d(i / 16.0, cos(i * CV_PI / 6), sin(i * CV_PI / 6));
  }
  myWindow.showWidget("Polyline", cv::viz::WPolyLine(polyline));



0 件のコメント:

コメントを投稿