mirror of
https://github.com/opencv/opencv.git
synced 2024-11-28 05:06:29 +08:00
Merge remote-tracking branch 'origin/2.4' into merge-2.4
Conflicts: modules/core/test/test_arithm.cpp modules/cuda/src/cascadeclassifier.cpp modules/imgproc/doc/geometric_transformations.rst modules/objdetect/src/hog.cpp modules/ocl/perf/perf_imgproc.cpp modules/ocl/src/gftt.cpp modules/ocl/src/moments.cpp
This commit is contained in:
commit
799d2dabd6
@ -1608,7 +1608,7 @@ void CV_StereoCalibrationTest::run( int )
|
||||
Mat _M1, _M2, _D1, _D2;
|
||||
vector<Mat> _R1, _R2, _T1, _T2;
|
||||
calibrateCamera( objpt, imgpt1, imgsize, _M1, _D1, _R1, _T1, 0 );
|
||||
calibrateCamera( objpt, imgpt2, imgsize, _M2, _D2, _R2, _T1, 0 );
|
||||
calibrateCamera( objpt, imgpt2, imgsize, _M2, _D2, _R2, _T2, 0 );
|
||||
undistortPoints( _imgpt1, _imgpt1, _M1, _D1, Mat(), _M1 );
|
||||
undistortPoints( _imgpt2, _imgpt2, _M2, _D2, Mat(), _M2 );
|
||||
|
||||
|
@ -1361,7 +1361,6 @@ TEST_P(ElemWiseTest, accuracy)
|
||||
op->op(src, dst, mask);
|
||||
|
||||
double maxErr = op->getMaxErr(depth);
|
||||
vector<int> pos;
|
||||
ASSERT_PRED_FORMAT2(cvtest::MatComparator(maxErr, op->context), dst0, dst) << "\nsrc[0] ~ " <<
|
||||
cvtest::MatInfo(!src.empty() ? src[0] : Mat()) << "\ntestCase #" << testIdx << "\n";
|
||||
}
|
||||
|
@ -215,8 +215,6 @@ int CV_KDTreeTest_CPP::findNeighbors( Mat& points, Mat& neighbors )
|
||||
const int emax = 20;
|
||||
Mat neighbors2( neighbors.size(), CV_32SC1 );
|
||||
int j;
|
||||
vector<float> min(points.cols, static_cast<float>(minValue));
|
||||
vector<float> max(points.cols, static_cast<float>(maxValue));
|
||||
for( int pi = 0; pi < points.rows; pi++ )
|
||||
{
|
||||
// 1st way
|
||||
|
@ -3525,7 +3525,6 @@ void HOGDescriptor::groupRectangles(std::vector<cv::Rect>& rectList, std::vector
|
||||
std::vector<cv::Rect_<double> > rrects(nclasses);
|
||||
std::vector<int> numInClass(nclasses, 0);
|
||||
std::vector<double> foundWeights(nclasses, DBL_MIN);
|
||||
std::vector<double> totalFactorsPerClass(nclasses, 1);
|
||||
int i, j, nlabels = (int)labels.size();
|
||||
|
||||
for( i = 0; i < nlabels; i++ )
|
||||
|
@ -898,6 +898,10 @@ This 3D Widget defines a point cloud. ::
|
||||
WCloud(InputArray cloud, InputArray colors);
|
||||
//! All points in cloud have the same color
|
||||
WCloud(InputArray cloud, const Color &color = Color::white());
|
||||
//! Each point in cloud is mapped to a color in colors, normals are used for shading
|
||||
WCloud(InputArray cloud, InputArray colors, InputArray normals);
|
||||
//! All points in cloud have the same color, normals are used for shading
|
||||
WCloud(InputArray cloud, const Color &color, InputArray normals);
|
||||
};
|
||||
|
||||
viz::WCloud::WCloud
|
||||
@ -918,6 +922,22 @@ Constructs a WCloud.
|
||||
|
||||
Points in the cloud belong to mask when they are set to (NaN, NaN, NaN).
|
||||
|
||||
.. ocv:function:: WCloud(InputArray cloud, InputArray colors, InputArray normals)
|
||||
|
||||
:param cloud: Set of points which can be of type: ``CV_32FC3``, ``CV_32FC4``, ``CV_64FC3``, ``CV_64FC4``.
|
||||
:param colors: Set of colors. It has to be of the same size with cloud.
|
||||
:param normals: Normals for each point in cloud. Size and type should match with the cloud parameter.
|
||||
|
||||
Points in the cloud belong to mask when they are set to (NaN, NaN, NaN).
|
||||
|
||||
.. ocv:function:: WCloud(InputArray cloud, const Color &color, InputArray normals)
|
||||
|
||||
:param cloud: Set of points which can be of type: ``CV_32FC3``, ``CV_32FC4``, ``CV_64FC3``, ``CV_64FC4``.
|
||||
:param color: A single :ocv:class:`Color` for the whole cloud.
|
||||
:param normals: Normals for each point in cloud. Size and type should match with the cloud parameter.
|
||||
|
||||
Points in the cloud belong to mask when they are set to (NaN, NaN, NaN).
|
||||
|
||||
.. note:: In case there are four channels in the cloud, fourth channel is ignored.
|
||||
|
||||
viz::WCloudCollection
|
||||
|
@ -320,8 +320,15 @@ namespace cv
|
||||
public:
|
||||
//! Each point in cloud is mapped to a color in colors
|
||||
WCloud(InputArray cloud, InputArray colors);
|
||||
|
||||
//! All points in cloud have the same color
|
||||
WCloud(InputArray cloud, const Color &color = Color::white());
|
||||
|
||||
//! Each point in cloud is mapped to a color in colors, normals are used for shading
|
||||
WCloud(InputArray cloud, InputArray colors, InputArray normals);
|
||||
|
||||
//! All points in cloud have the same color, normals are used for shading
|
||||
WCloud(InputArray cloud, const Color &color, InputArray normals);
|
||||
};
|
||||
|
||||
class CV_EXPORTS WPaintedCloud: public Widget3D
|
||||
|
@ -49,11 +49,29 @@
|
||||
/// Point Cloud Widget implementation
|
||||
|
||||
cv::viz::WCloud::WCloud(InputArray cloud, InputArray colors)
|
||||
{
|
||||
WCloud cloud_widget(cloud, colors, cv::noArray());
|
||||
*this = cloud_widget;
|
||||
}
|
||||
|
||||
cv::viz::WCloud::WCloud(InputArray cloud, const Color &color)
|
||||
{
|
||||
WCloud cloud_widget(cloud, Mat(cloud.size(), CV_8UC3, color));
|
||||
*this = cloud_widget;
|
||||
}
|
||||
|
||||
cv::viz::WCloud::WCloud(InputArray cloud, const Color &color, InputArray normals)
|
||||
{
|
||||
WCloud cloud_widget(cloud, Mat(cloud.size(), CV_8UC3, color), normals);
|
||||
*this = cloud_widget;
|
||||
}
|
||||
|
||||
cv::viz::WCloud::WCloud(cv::InputArray cloud, cv::InputArray colors, cv::InputArray normals)
|
||||
{
|
||||
CV_Assert(!cloud.empty() && !colors.empty());
|
||||
|
||||
vtkSmartPointer<vtkCloudMatSource> cloud_source = vtkSmartPointer<vtkCloudMatSource>::New();
|
||||
cloud_source->SetColorCloud(cloud, colors);
|
||||
cloud_source->SetColorCloudNormals(cloud, colors, normals);
|
||||
cloud_source->Update();
|
||||
|
||||
vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
|
||||
@ -69,12 +87,7 @@ cv::viz::WCloud::WCloud(InputArray cloud, InputArray colors)
|
||||
actor->SetMapper(mapper);
|
||||
|
||||
WidgetAccessor::setProp(*this, actor);
|
||||
}
|
||||
|
||||
cv::viz::WCloud::WCloud(InputArray cloud, const Color &color)
|
||||
{
|
||||
WCloud cloud_widget(cloud, Mat(cloud.size(), CV_8UC3, color));
|
||||
*this = cloud_widget;
|
||||
}
|
||||
|
||||
|
||||
|
@ -248,6 +248,22 @@ TEST(Viz, show_sampled_normals)
|
||||
viz.spin();
|
||||
}
|
||||
|
||||
TEST(Viz, show_cloud_shaded_by_normals)
|
||||
{
|
||||
Mesh mesh = Mesh::load(get_dragon_ply_file_path());
|
||||
computeNormals(mesh, mesh.normals);
|
||||
|
||||
Affine3d pose = Affine3d().rotate(Vec3d(0, 0.8, 0));
|
||||
|
||||
WCloud cloud(mesh.cloud, Color::white(), mesh.normals);
|
||||
cloud.setRenderingProperty(SHADING, SHADING_GOURAUD);
|
||||
|
||||
Viz3d viz("show_cloud_shaded_by_normals");
|
||||
viz.showWidget("cloud", cloud, pose);
|
||||
viz.showWidget("text2d", WText("Cloud shaded by normals", Point(20, 20), 20, Color::green()));
|
||||
viz.spin();
|
||||
}
|
||||
|
||||
TEST(Viz, show_trajectories)
|
||||
{
|
||||
std::vector<Affine3d> path = generate_test_trajectory<double>(), sub0, sub1, sub2, sub3, sub4, sub5;
|
||||
|
Loading…
Reference in New Issue
Block a user