1
/*M///////////////////////////////////////////////////////////////////////////////////////
3
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
5
// By downloading, copying, installing or using the software you agree to this license.
6
// If you do not agree to this license, do not download, install,
7
// copy or use the software.
11
// For Open Source Computer Vision Library
13
// Copyright (C) 2013, OpenCV Foundation, all rights reserved.
14
// Third party copyrights are property of their respective owners.
16
// Redistribution and use in source and binary forms, with or without modification,
17
// are permitted provided that the following conditions are met:
19
// * Redistribution's of source code must retain the above copyright notice,
20
// this list of conditions and the following disclaimer.
22
// * Redistribution's in binary form must reproduce the above copyright notice,
23
// this list of conditions and the following disclaimer in the documentation
24
// and/or other materials provided with the distribution.
26
// * The name of the copyright holders may not be used to endorse or promote products
27
// derived from this software without specific prior written permission.
29
// This software is provided by the copyright holders and contributors "as is" and
30
// any express or implied warranties, including, but not limited to, the implied
31
// warranties of merchantability and fitness for a particular purpose are disclaimed.
32
// In no event shall the Intel Corporation or contributors be liable for any direct,
33
// indirect, incidental, special, exemplary, or consequential damages
34
// (including, but not limited to, procurement of substitute goods or services;
35
// loss of use, data, or profits; or business interruption) however caused
36
// and on any theory of liability, whether in contract, strict liability,
37
// or tort (including negligence or otherwise) arising in any way out of
38
// the use of this software, even if advised of the possibility of such damage.
41
// * Ozan Tonkal, ozantonkal@gmail.com
42
// * Anatoly Baksheev, Itseez Inc. myname.mysurname <> mycompany.com
46
#ifndef __OPENCV_VIZ_WIDGETS_HPP__
47
#define __OPENCV_VIZ_WIDGETS_HPP__
49
#include <opencv2/viz/types.hpp>
56
//! @addtogroup viz_widget
59
/////////////////////////////////////////////////////////////////////////////
60
/// Widget rendering properties
61
enum RenderingProperties
73
enum RepresentationValues
75
REPRESENTATION_POINTS,
76
REPRESENTATION_WIREFRAME,
77
REPRESENTATION_SURFACE
87
/////////////////////////////////////////////////////////////////////////////
89
/** @brief Base class of all widgets. Widget is implicitly shared. :
91
class CV_EXPORTS Widget
95
Widget(const Widget& other);
96
Widget& operator=(const Widget& other);
99
/** @brief Creates a widget from ply file.
101
@param file_name Ply file name.
103
static Widget fromPlyFile(const String &file_name);
105
/** @brief Sets rendering property of the widget.
107
@param property Property that will be modified.
108
@param value The new value of the property.
110
**Rendering property** can be one of the following:
116
**REPRESENTATION**: Expected values are
117
- **REPRESENTATION_POINTS**
118
- **REPRESENTATION_WIREFRAME**
119
- **REPRESENTATION_SURFACE**
121
**IMMEDIATE_RENDERING**:
122
- Turn on immediate rendering by setting the value to 1.
123
- Turn off immediate rendering by setting the value to 0.
125
**SHADING**: Expected values are
127
- **SHADING_GOURAUD**
130
void setRenderingProperty(int property, double value);
131
/** @brief Returns rendering property of the widget.
133
@param property Property.
135
**Rendering property** can be one of the following:
142
**REPRESENTATION**: Expected values are
143
: - **REPRESENTATION_POINTS**
144
- **REPRESENTATION_WIREFRAME**
145
- **REPRESENTATION_SURFACE**
147
**IMMEDIATE_RENDERING**:
148
: - Turn on immediate rendering by setting the value to 1.
149
- Turn off immediate rendering by setting the value to 0.
151
**SHADING**: Expected values are
153
- **SHADING_GOURAUD**
156
double getRenderingProperty(int property) const;
158
/** @brief Casts a widget to another.
161
// Create a sphere widget
162
viz::WSphere sw(Point3f(0.0f,0.0f,0.0f), 0.5f);
163
// Cast sphere widget to cloud widget
164
viz::WCloud cw = sw.cast<viz::WCloud>();
167
@note 3D Widgets can only be cast to 3D Widgets. 2D Widgets can only be cast to 2D Widgets.
169
template<typename _W> _W cast();
173
friend struct WidgetAccessor;
176
/////////////////////////////////////////////////////////////////////////////
178
/** @brief Base class of all 3D widgets.
180
class CV_EXPORTS Widget3D : public Widget
185
/** @brief Sets pose of the widget.
187
@param pose The new pose of the widget.
189
void setPose(const Affine3d &pose);
190
/** @brief Updates pose of the widget by pre-multiplying its current pose.
192
@param pose The pose that the current pose of the widget will be pre-multiplied by.
194
void updatePose(const Affine3d &pose);
195
/** @brief Returns the current pose of the widget.
197
Affine3d getPose() const;
199
/** @brief Transforms internal widget data (i.e. points, normals) using the given transform.
201
@param transform Specified transformation to apply.
203
void applyTransform(const Affine3d &transform);
205
/** @brief Sets the color of the widget.
207
@param color color of type Color
209
void setColor(const Color &color);
213
/////////////////////////////////////////////////////////////////////////////
215
/** @brief Base class of all 2D widgets.
217
class CV_EXPORTS Widget2D : public Widget
222
/** @brief Sets the color of the widget.
224
@param color color of type Color
226
void setColor(const Color &color);
229
/////////////////////////////////////////////////////////////////////////////
232
/** @brief This 3D Widget defines a finite line.
234
class CV_EXPORTS WLine : public Widget3D
237
/** @brief Constructs a WLine.
239
@param pt1 Start point of the line.
240
@param pt2 End point of the line.
241
@param color Color of the line.
243
WLine(const Point3d &pt1, const Point3d &pt2, const Color &color = Color::white());
246
/** @brief This 3D Widget defines a finite plane.
248
class CV_EXPORTS WPlane : public Widget3D
251
/** @brief Constructs a default plane with center point at origin and normal oriented along z-axis.
253
@param size Size of the plane
254
@param color Color of the plane.
256
WPlane(const Size2d& size = Size2d(1.0, 1.0), const Color &color = Color::white());
258
/** @brief Constructs a repositioned plane
260
@param center Center of the plane
261
@param normal Plane normal orientation
262
@param new_yaxis Up-vector. New orientation of plane y-axis.
264
@param color Color of the plane.
266
WPlane(const Point3d& center, const Vec3d& normal, const Vec3d& new_yaxis,
267
const Size2d& size = Size2d(1.0, 1.0), const Color &color = Color::white());
270
/** @brief This 3D Widget defines a sphere. :
272
class CV_EXPORTS WSphere : public Widget3D
275
/** @brief Constructs a WSphere.
277
@param center Center of the sphere.
278
@param radius Radius of the sphere.
279
@param sphere_resolution Resolution of the sphere.
280
@param color Color of the sphere.
282
WSphere(const cv::Point3d ¢er, double radius, int sphere_resolution = 10, const Color &color = Color::white());
285
/** @brief This 3D Widget defines an arrow.
287
class CV_EXPORTS WArrow : public Widget3D
290
/** @brief Constructs an WArrow.
292
@param pt1 Start point of the arrow.
293
@param pt2 End point of the arrow.
294
@param thickness Thickness of the arrow. Thickness of arrow head is also adjusted
296
@param color Color of the arrow.
298
Arrow head is located at the end point of the arrow.
300
WArrow(const Point3d& pt1, const Point3d& pt2, double thickness = 0.03, const Color &color = Color::white());
303
/** @brief This 3D Widget defines a circle.
305
class CV_EXPORTS WCircle : public Widget3D
308
/** @brief Constructs default planar circle centred at origin with plane normal along z-axis
310
@param radius Radius of the circle.
311
@param thickness Thickness of the circle.
312
@param color Color of the circle.
314
WCircle(double radius, double thickness = 0.01, const Color &color = Color::white());
316
/** @brief Constructs repositioned planar circle.
318
@param radius Radius of the circle.
319
@param center Center of the circle.
320
@param normal Normal of the plane in which the circle lies.
321
@param thickness Thickness of the circle.
322
@param color Color of the circle.
324
WCircle(double radius, const Point3d& center, const Vec3d& normal, double thickness = 0.01, const Color &color = Color::white());
327
/** @brief This 3D Widget defines a cone. :
329
class CV_EXPORTS WCone : public Widget3D
332
/** @brief Constructs default cone oriented along x-axis with center of its base located at origin
334
@param length Length of the cone.
335
@param radius Radius of the cone.
336
@param resolution Resolution of the cone.
337
@param color Color of the cone.
339
WCone(double length, double radius, int resolution = 6.0, const Color &color = Color::white());
341
/** @brief Constructs repositioned planar cone.
343
@param radius Radius of the cone.
344
@param center Center of the cone base.
345
@param tip Tip of the cone.
346
@param resolution Resolution of the cone.
347
@param color Color of the cone.
350
WCone(double radius, const Point3d& center, const Point3d& tip, int resolution = 6.0, const Color &color = Color::white());
353
/** @brief This 3D Widget defines a cylinder. :
355
class CV_EXPORTS WCylinder : public Widget3D
358
/** @brief Constructs a WCylinder.
360
@param axis_point1 A point1 on the axis of the cylinder.
361
@param axis_point2 A point2 on the axis of the cylinder.
362
@param radius Radius of the cylinder.
363
@param numsides Resolution of the cylinder.
364
@param color Color of the cylinder.
366
WCylinder(const Point3d& axis_point1, const Point3d& axis_point2, double radius, int numsides = 30, const Color &color = Color::white());
369
/** @brief This 3D Widget defines a cube.
371
class CV_EXPORTS WCube : public Widget3D
374
/** @brief Constructs a WCube.
376
@param min_point Specifies minimum point of the bounding box.
377
@param max_point Specifies maximum point of the bounding box.
378
@param wire_frame If true, cube is represented as wireframe.
379
@param color Color of the cube.
381
![Cube Widget](images/cube_widget.png)
383
WCube(const Point3d& min_point = Vec3d::all(-0.5), const Point3d& max_point = Vec3d::all(0.5),
384
bool wire_frame = true, const Color &color = Color::white());
387
/** @brief This 3D Widget defines a poly line. :
389
class CV_EXPORTS WPolyLine : public Widget3D
392
WPolyLine(InputArray points, InputArray colors);
393
/** @brief Constructs a WPolyLine.
395
@param points Point set.
396
@param color Color of the poly line.
398
WPolyLine(InputArray points, const Color &color = Color::white());
401
/////////////////////////////////////////////////////////////////////////////
402
/// Text and image widgets
404
/** @brief This 2D Widget represents text overlay.
406
class CV_EXPORTS WText : public Widget2D
409
/** @brief Constructs a WText.
411
@param text Text content of the widget.
412
@param pos Position of the text.
413
@param font_size Font size.
414
@param color Color of the text.
416
WText(const String &text, const Point &pos, int font_size = 20, const Color &color = Color::white());
418
/** @brief Sets the text content of the widget.
420
@param text Text content of the widget.
422
void setText(const String &text);
423
/** @brief Returns the current text content of the widget.
425
String getText() const;
428
/** @brief This 3D Widget represents 3D text. The text always faces the camera.
430
class CV_EXPORTS WText3D : public Widget3D
433
/** @brief Constructs a WText3D.
435
@param text Text content of the widget.
436
@param position Position of the text.
437
@param text_scale Size of the text.
438
@param face_camera If true, text always faces the camera.
439
@param color Color of the text.
441
WText3D(const String &text, const Point3d &position, double text_scale = 1., bool face_camera = true, const Color &color = Color::white());
443
/** @brief Sets the text content of the widget.
445
@param text Text content of the widget.
448
void setText(const String &text);
449
/** @brief Returns the current text content of the widget.
451
String getText() const;
454
/** @brief This 2D Widget represents an image overlay. :
456
class CV_EXPORTS WImageOverlay : public Widget2D
459
/** @brief Constructs an WImageOverlay.
461
@param image BGR or Gray-Scale image.
462
@param rect Image is scaled and positioned based on rect.
464
WImageOverlay(InputArray image, const Rect &rect);
465
/** @brief Sets the image content of the widget.
467
@param image BGR or Gray-Scale image.
469
void setImage(InputArray image);
472
/** @brief This 3D Widget represents an image in 3D space. :
474
class CV_EXPORTS WImage3D : public Widget3D
477
/** @brief Constructs an WImage3D.
479
@param image BGR or Gray-Scale image.
480
@param size Size of the image.
482
WImage3D(InputArray image, const Size2d &size);
484
/** @brief Constructs an WImage3D.
486
@param image BGR or Gray-Scale image.
487
@param size Size of the image.
488
@param center Position of the image.
489
@param normal Normal of the plane that represents the image.
490
@param up_vector Determines orientation of the image.
492
WImage3D(InputArray image, const Size2d &size, const Vec3d ¢er, const Vec3d &normal, const Vec3d &up_vector);
494
/** @brief Sets the image content of the widget.
496
@param image BGR or Gray-Scale image.
498
void setImage(InputArray image);
500
/** @brief Sets the image size of the widget.
502
@param size the new size of the image.
504
void setSize(const Size& size);
507
/////////////////////////////////////////////////////////////////////////////
510
/** @brief This 3D Widget represents a coordinate system. :
512
class CV_EXPORTS WCoordinateSystem : public Widget3D
515
/** @brief Constructs a WCoordinateSystem.
517
@param scale Determines the size of the axes.
519
WCoordinateSystem(double scale = 1.0);
522
/** @brief This 3D Widget defines a grid. :
524
class CV_EXPORTS WGrid : public Widget3D
527
/** @brief Constructs a WGrid.
529
@param cells Number of cell columns and rows, respectively.
530
@param cells_spacing Size of each cell, respectively.
531
@param color Color of the grid.
533
WGrid(const Vec2i &cells = Vec2i::all(10), const Vec2d &cells_spacing = Vec2d::all(1.0), const Color &color = Color::white());
535
//! Creates repositioned grid
536
WGrid(const Point3d& center, const Vec3d& normal, const Vec3d& new_yaxis,
537
const Vec2i &cells = Vec2i::all(10), const Vec2d &cells_spacing = Vec2d::all(1.0), const Color &color = Color::white());
540
/** @brief This 3D Widget represents camera position in a scene by its axes or viewing frustum. :
542
class CV_EXPORTS WCameraPosition : public Widget3D
545
/** @brief Creates camera coordinate frame at the origin.
547
![Camera coordinate frame](images/cpw1.png)
549
WCameraPosition(double scale = 1.0);
550
/** @brief Display the viewing frustum
551
@param K Intrinsic matrix of the camera.
552
@param scale Scale of the frustum.
553
@param color Color of the frustum.
555
Creates viewing frustum of the camera based on its intrinsic matrix K.
557
![Camera viewing frustum](images/cpw2.png)
559
WCameraPosition(const Matx33d &K, double scale = 1.0, const Color &color = Color::white());
560
/** @brief Display the viewing frustum
561
@param fov Field of view of the camera (horizontal, vertical).
562
@param scale Scale of the frustum.
563
@param color Color of the frustum.
565
Creates viewing frustum of the camera based on its field of view fov.
567
![Camera viewing frustum](images/cpw2.png)
569
WCameraPosition(const Vec2d &fov, double scale = 1.0, const Color &color = Color::white());
570
/** @brief Display image on the far plane of the viewing frustum
572
@param K Intrinsic matrix of the camera.
573
@param image BGR or Gray-Scale image that is going to be displayed on the far plane of the frustum.
574
@param scale Scale of the frustum and image.
575
@param color Color of the frustum.
577
Creates viewing frustum of the camera based on its intrinsic matrix K, and displays image on
580
![Camera viewing frustum with image](images/cpw3.png)
582
WCameraPosition(const Matx33d &K, InputArray image, double scale = 1.0, const Color &color = Color::white());
583
/** @brief Display image on the far plane of the viewing frustum
585
@param fov Field of view of the camera (horizontal, vertical).
586
@param image BGR or Gray-Scale image that is going to be displayed on the far plane of the frustum.
587
@param scale Scale of the frustum and image.
588
@param color Color of the frustum.
590
Creates viewing frustum of the camera based on its intrinsic matrix K, and displays image on
593
![Camera viewing frustum with image](images/cpw3.png)
595
WCameraPosition(const Vec2d &fov, InputArray image, double scale = 1.0, const Color &color = Color::white());
598
/////////////////////////////////////////////////////////////////////////////
601
/** @brief This 3D Widget represents a trajectory. :
603
class CV_EXPORTS WTrajectory : public Widget3D
606
enum {FRAMES = 1, PATH = 2, BOTH = FRAMES + PATH };
608
/** @brief Constructs a WTrajectory.
610
@param path List of poses on a trajectory. Takes std::vector\<Affine\<T\>\> with T == [float | double]
611
@param display_mode Display mode. This can be PATH, FRAMES, and BOTH.
612
@param scale Scale of the frames. Polyline is not affected.
613
@param color Color of the polyline that represents path.
615
Frames are not affected.
616
Displays trajectory of the given path as follows:
617
- PATH : Displays a poly line that represents the path.
618
- FRAMES : Displays coordinate frames at each pose.
619
- PATH & FRAMES : Displays both poly line and coordinate frames.
621
WTrajectory(InputArray path, int display_mode = WTrajectory::PATH, double scale = 1.0, const Color &color = Color::white());
624
/** @brief This 3D Widget represents a trajectory. :
626
class CV_EXPORTS WTrajectoryFrustums : public Widget3D
629
/** @brief Constructs a WTrajectoryFrustums.
631
@param path List of poses on a trajectory. Takes std::vector\<Affine\<T\>\> with T == [float | double]
632
@param K Intrinsic matrix of the camera.
633
@param scale Scale of the frustums.
634
@param color Color of the frustums.
636
Displays frustums at each pose of the trajectory.
638
WTrajectoryFrustums(InputArray path, const Matx33d &K, double scale = 1., const Color &color = Color::white());
640
/** @brief Constructs a WTrajectoryFrustums.
642
@param path List of poses on a trajectory. Takes std::vector\<Affine\<T\>\> with T == [float | double]
643
@param fov Field of view of the camera (horizontal, vertical).
644
@param scale Scale of the frustums.
645
@param color Color of the frustums.
647
Displays frustums at each pose of the trajectory.
649
WTrajectoryFrustums(InputArray path, const Vec2d &fov, double scale = 1., const Color &color = Color::white());
652
/** @brief This 3D Widget represents a trajectory using spheres and lines
654
where spheres represent the positions of the camera, and lines represent the direction from
655
previous position to the current. :
657
class CV_EXPORTS WTrajectorySpheres: public Widget3D
660
/** @brief Constructs a WTrajectorySpheres.
662
@param path List of poses on a trajectory. Takes std::vector\<Affine\<T\>\> with T == [float | double]
663
@param line_length Max length of the lines which point to previous position
664
@param radius Radius of the spheres.
665
@param from Color for first sphere.
666
@param to Color for last sphere. Intermediate spheres will have interpolated color.
668
WTrajectorySpheres(InputArray path, double line_length = 0.05, double radius = 0.007,
669
const Color &from = Color::red(), const Color &to = Color::white());
672
/////////////////////////////////////////////////////////////////////////////
675
/** @brief This 3D Widget defines a point cloud. :
677
@note In case there are four channels in the cloud, fourth channel is ignored.
679
class CV_EXPORTS WCloud: public Widget3D
682
/** @brief Constructs a WCloud.
684
@param cloud Set of points which can be of type: CV_32FC3, CV_32FC4, CV_64FC3, CV_64FC4.
685
@param colors Set of colors. It has to be of the same size with cloud.
687
Points in the cloud belong to mask when they are set to (NaN, NaN, NaN).
689
WCloud(InputArray cloud, InputArray colors);
691
/** @brief Constructs a WCloud.
692
@param cloud Set of points which can be of type: CV_32FC3, CV_32FC4, CV_64FC3, CV_64FC4.
693
@param color A single Color for the whole cloud.
695
Points in the cloud belong to mask when they are set to (NaN, NaN, NaN).
697
WCloud(InputArray cloud, const Color &color = Color::white());
699
/** @brief Constructs a WCloud.
700
@param cloud Set of points which can be of type: CV_32FC3, CV_32FC4, CV_64FC3, CV_64FC4.
701
@param colors Set of colors. It has to be of the same size with cloud.
702
@param normals Normals for each point in cloud. Size and type should match with the cloud parameter.
704
Points in the cloud belong to mask when they are set to (NaN, NaN, NaN).
706
WCloud(InputArray cloud, InputArray colors, InputArray normals);
708
/** @brief Constructs a WCloud.
709
@param cloud Set of points which can be of type: CV_32FC3, CV_32FC4, CV_64FC3, CV_64FC4.
710
@param color A single Color for the whole cloud.
711
@param normals Normals for each point in cloud.
713
Size and type should match with the cloud parameter.
714
Points in the cloud belong to mask when they are set to (NaN, NaN, NaN).
716
WCloud(InputArray cloud, const Color &color, InputArray normals);
719
class CV_EXPORTS WPaintedCloud: public Widget3D
722
//! Paint cloud with default gradient between cloud bounds points
723
WPaintedCloud(InputArray cloud);
725
//! Paint cloud with default gradient between given points
726
WPaintedCloud(InputArray cloud, const Point3d& p1, const Point3d& p2);
728
//! Paint cloud with gradient specified by given colors between given points
729
WPaintedCloud(InputArray cloud, const Point3d& p1, const Point3d& p2, const Color& c1, const Color c2);
732
/** @brief This 3D Widget defines a collection of clouds. :
733
@note In case there are four channels in the cloud, fourth channel is ignored.
735
class CV_EXPORTS WCloudCollection : public Widget3D
740
/** @brief Adds a cloud to the collection.
742
@param cloud Point set which can be of type: CV_32FC3, CV_32FC4, CV_64FC3, CV_64FC4.
743
@param colors Set of colors. It has to be of the same size with cloud.
744
@param pose Pose of the cloud. Points in the cloud belong to mask when they are set to (NaN, NaN, NaN).
746
void addCloud(InputArray cloud, InputArray colors, const Affine3d &pose = Affine3d::Identity());
747
/** @brief Adds a cloud to the collection.
749
@param cloud Point set which can be of type: CV_32FC3, CV_32FC4, CV_64FC3, CV_64FC4.
750
@param color A single Color for the whole cloud.
751
@param pose Pose of the cloud. Points in the cloud belong to mask when they are set to (NaN, NaN, NaN).
753
void addCloud(InputArray cloud, const Color &color = Color::white(), const Affine3d &pose = Affine3d::Identity());
754
/** @brief Finalizes cloud data by repacking to single cloud.
756
Useful for large cloud collections to reduce memory usage
761
/** @brief This 3D Widget represents normals of a point cloud. :
763
class CV_EXPORTS WCloudNormals : public Widget3D
766
/** @brief Constructs a WCloudNormals.
768
@param cloud Point set which can be of type: CV_32FC3, CV_32FC4, CV_64FC3, CV_64FC4.
769
@param normals A set of normals that has to be of same type with cloud.
770
@param level Display only every level th normal.
771
@param scale Scale of the arrows that represent normals.
772
@param color Color of the arrows that represent normals.
774
@note In case there are four channels in the cloud, fourth channel is ignored.
776
WCloudNormals(InputArray cloud, InputArray normals, int level = 64, double scale = 0.1, const Color &color = Color::white());
779
/** @brief Constructs a WMesh.
781
@param mesh Mesh object that will be displayed.
782
@param cloud Points of the mesh object.
783
@param polygons Points of the mesh object.
784
@param colors Point colors.
785
@param normals Point normals.
787
class CV_EXPORTS WMesh : public Widget3D
790
WMesh(const Mesh &mesh);
791
WMesh(InputArray cloud, InputArray polygons, InputArray colors = noArray(), InputArray normals = noArray());
794
/** @brief This class allows to merge several widgets to single one.
796
It has quite limited functionality and can't merge widgets with different attributes. For
797
instance, if widgetA has color array and widgetB has only global color defined, then result
798
of merge won't have color at all. The class is suitable for merging large amount of similar
801
class CV_EXPORTS WWidgetMerger : public Widget3D
806
//! Add widget to merge with optional position change
807
void addWidget(const Widget3D& widget, const Affine3d &pose = Affine3d::Identity());
809
//! Repacks internal structure to single widget
813
/////////////////////////////////////////////////////////////////////////////
816
template<> CV_EXPORTS Widget2D Widget::cast<Widget2D>();
817
template<> CV_EXPORTS Widget3D Widget::cast<Widget3D>();
818
template<> CV_EXPORTS WLine Widget::cast<WLine>();
819
template<> CV_EXPORTS WPlane Widget::cast<WPlane>();
820
template<> CV_EXPORTS WSphere Widget::cast<WSphere>();
821
template<> CV_EXPORTS WCylinder Widget::cast<WCylinder>();
822
template<> CV_EXPORTS WArrow Widget::cast<WArrow>();
823
template<> CV_EXPORTS WCircle Widget::cast<WCircle>();
824
template<> CV_EXPORTS WCone Widget::cast<WCone>();
825
template<> CV_EXPORTS WCube Widget::cast<WCube>();
826
template<> CV_EXPORTS WCoordinateSystem Widget::cast<WCoordinateSystem>();
827
template<> CV_EXPORTS WPolyLine Widget::cast<WPolyLine>();
828
template<> CV_EXPORTS WGrid Widget::cast<WGrid>();
829
template<> CV_EXPORTS WText3D Widget::cast<WText3D>();
830
template<> CV_EXPORTS WText Widget::cast<WText>();
831
template<> CV_EXPORTS WImageOverlay Widget::cast<WImageOverlay>();
832
template<> CV_EXPORTS WImage3D Widget::cast<WImage3D>();
833
template<> CV_EXPORTS WCameraPosition Widget::cast<WCameraPosition>();
834
template<> CV_EXPORTS WTrajectory Widget::cast<WTrajectory>();
835
template<> CV_EXPORTS WTrajectoryFrustums Widget::cast<WTrajectoryFrustums>();
836
template<> CV_EXPORTS WTrajectorySpheres Widget::cast<WTrajectorySpheres>();
837
template<> CV_EXPORTS WCloud Widget::cast<WCloud>();
838
template<> CV_EXPORTS WPaintedCloud Widget::cast<WPaintedCloud>();
839
template<> CV_EXPORTS WCloudCollection Widget::cast<WCloudCollection>();
840
template<> CV_EXPORTS WCloudNormals Widget::cast<WCloudNormals>();
841
template<> CV_EXPORTS WMesh Widget::cast<WMesh>();
842
template<> CV_EXPORTS WWidgetMerger Widget::cast<WWidgetMerger>();
846
} /* namespace viz */