1#include "test_precomp.hpp" 2 3using namespace cv; 4using namespace std; 5 6/** 7 * @function main 8 */ 9void tutorial3(bool camera_pov) 10{ 11 /// Create a window 12 viz::Viz3d myWindow("Coordinate Frame"); 13 14 /// Add coordinate axes 15 myWindow.showWidget("Coordinate Widget", viz::WCoordinateSystem()); 16 17 /// Let's assume camera has the following properties 18 Point3d cam_origin(3.0, 3.0, 3.0), cam_focal_point(3.0, 3.0, 2.0), cam_y_dir(-1.0, 0.0, 0.0); 19 20 /// We can get the pose of the cam using makeCameraPose 21 Affine3d camera_pose = viz::makeCameraPose(cam_origin, cam_focal_point, cam_y_dir); 22 23 /// We can get the transformation matrix from camera coordinate system to global using 24 /// - makeTransformToGlobal. We need the axes of the camera 25 Affine3d transform = viz::makeTransformToGlobal(Vec3d(0.0, -1.0, 0.0), Vec3d(-1.0, 0.0, 0.0), Vec3d(0.0, 0.0, -1.0), cam_origin); 26 27 /// Create a cloud widget. 28 Mat dragon_cloud = viz::readCloud(get_dragon_ply_file_path()); 29 viz::WCloud cloud_widget(dragon_cloud, viz::Color::green()); 30 31 /// Pose of the widget in camera frame 32 Affine3d cloud_pose = Affine3d().rotate(Vec3d(0.0, CV_PI/2, 0.0)).rotate(Vec3d(0.0, 0.0, CV_PI)).translate(Vec3d(0.0, 0.0, 3.0)); 33 /// Pose of the widget in global frame 34 Affine3d cloud_pose_global = transform * cloud_pose; 35 36 /// Visualize camera frame 37 myWindow.showWidget("CPW_FRUSTUM", viz::WCameraPosition(Vec2f(0.889484f, 0.523599f)), camera_pose); 38 if (!camera_pov) 39 myWindow.showWidget("CPW", viz::WCameraPosition(0.5), camera_pose); 40 41 /// Visualize widget 42 myWindow.showWidget("bunny", cloud_widget, cloud_pose_global); 43 44 /// Set the viewer pose to that of camera 45 if (camera_pov) 46 myWindow.setViewerPose(camera_pose); 47 48 /// Start event loop. 49 myWindow.spin(); 50} 51 52TEST(Viz, tutorial3_global_view) 53{ 54 tutorial3(false); 55} 56 57TEST(Viz, tutorial3_camera_view) 58{ 59 tutorial3(true); 60} 61