mirror of
https://github.com/opencv/opencv.git
synced 2024-11-25 11:40:44 +08:00
fixed #1373
This commit is contained in:
parent
d46f44b48a
commit
f5152500be
@ -1984,17 +1984,22 @@ void cv::fitLine( InputArray _points, OutputArray _line, int distType,
|
|||||||
double param, double reps, double aeps )
|
double param, double reps, double aeps )
|
||||||
{
|
{
|
||||||
Mat points = _points.getMat();
|
Mat points = _points.getMat();
|
||||||
bool is3d = points.checkVector(3) >= 0, is2d = is3d ? false : points.checkVector(2) >= 0;
|
|
||||||
|
|
||||||
CV_Assert((is2d || is3d) && (points.depth() == CV_32F || points.depth() == CV_32S));
|
bool is3d = points.checkVector(3) >= 0;
|
||||||
CvMat _cpoints = points;
|
bool is2d = points.checkVector(2) >= 0;
|
||||||
|
|
||||||
|
CV_Assert( (is2d || is3d) && (points.depth() == CV_32F || points.depth() == CV_32S) );
|
||||||
|
CvMat _cpoints = points.reshape(2 + is3d);
|
||||||
float line[6];
|
float line[6];
|
||||||
cvFitLine(&_cpoints, distType, param, reps, aeps, &line[0]);
|
cvFitLine(&_cpoints, distType, param, reps, aeps, &line[0]);
|
||||||
|
|
||||||
_line.create(is2d ? 4 : 6, 1, CV_32F, -1, true);
|
|
||||||
|
int out_size = (is2d)?( (is3d)? (points.channels() * points.rows * 2) : 4 ): 6;
|
||||||
|
|
||||||
|
_line.create(out_size, 1, CV_32F, -1, true);
|
||||||
Mat l = _line.getMat();
|
Mat l = _line.getMat();
|
||||||
CV_Assert( l.isContinuous() );
|
CV_Assert( l.isContinuous() );
|
||||||
memcpy( l.data, line, (is2d ? 4 : 6)*sizeof(line[0]) );
|
memcpy( l.data, line, out_size * sizeof(line[0]) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1385,6 +1385,83 @@ TEST(Imgproc_cvWarpAffine, regression)
|
|||||||
cvWarpAffine(src, dst, &M);
|
cvWarpAffine(src, dst, &M);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(Imgproc_fitLine_vector_3d, regression)
|
||||||
|
{
|
||||||
|
std::vector<Point3f> points_vector;
|
||||||
|
|
||||||
|
Point3f p21(4,4,4);
|
||||||
|
Point3f p22(8,8,8);
|
||||||
|
|
||||||
|
points_vector.push_back(p21);
|
||||||
|
points_vector.push_back(p22);
|
||||||
|
|
||||||
|
std::vector<float> line;
|
||||||
|
|
||||||
|
cv::fitLine(points_vector, line, CV_DIST_L2, 0 ,0 ,0);
|
||||||
|
|
||||||
|
ASSERT_EQ(line.size(), (size_t)6);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(Imgproc_fitLine_vector_2d, regression)
|
||||||
|
{
|
||||||
|
std::vector<Point2f> points_vector;
|
||||||
|
|
||||||
|
Point2f p21(4,4);
|
||||||
|
Point2f p22(8,8);
|
||||||
|
Point2f p23(16,16);
|
||||||
|
|
||||||
|
points_vector.push_back(p21);
|
||||||
|
points_vector.push_back(p22);
|
||||||
|
points_vector.push_back(p23);
|
||||||
|
|
||||||
|
std::vector<float> line;
|
||||||
|
|
||||||
|
cv::fitLine(points_vector, line, CV_DIST_L2, 0 ,0 ,0);
|
||||||
|
|
||||||
|
ASSERT_EQ(line.size(), (size_t)4);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(Imgproc_fitLine_Mat_2dC2, regression)
|
||||||
|
{
|
||||||
|
cv::Mat mat1(3, 1, CV_32SC2);
|
||||||
|
std::vector<float> line1;
|
||||||
|
|
||||||
|
cv::fitLine(mat1, line1, CV_DIST_L2, 0 ,0 ,0);
|
||||||
|
|
||||||
|
ASSERT_EQ(line1.size(), (size_t)4);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(Imgproc_fitLine_Mat_2dC1, regression)
|
||||||
|
{
|
||||||
|
cv::Matx<int, 3, 2> mat2;
|
||||||
|
std::vector<float> line2;
|
||||||
|
|
||||||
|
cv::fitLine(mat2, line2, CV_DIST_L2, 0 ,0 ,0);
|
||||||
|
|
||||||
|
ASSERT_EQ(line2.size(), (size_t)4);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(Imgproc_fitLine_Mat_3dC3, regression)
|
||||||
|
{
|
||||||
|
cv::Mat mat1(2, 1, CV_32SC3);
|
||||||
|
std::vector<float> line1;
|
||||||
|
|
||||||
|
cv::fitLine(mat1, line1, CV_DIST_L2, 0 ,0 ,0);
|
||||||
|
|
||||||
|
ASSERT_EQ(line1.size(), (size_t)6);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(Imgproc_fitLine_Mat_3dC1, regression)
|
||||||
|
{
|
||||||
|
cv::Mat mat2(2, 3, CV_32SC1);
|
||||||
|
std::vector<float> line2;
|
||||||
|
|
||||||
|
cv::fitLine(mat2, line2, CV_DIST_L2, 0 ,0 ,0);
|
||||||
|
|
||||||
|
ASSERT_EQ(line2.size(), (size_t)6);
|
||||||
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
TEST(Imgproc_Resize, accuracy) { CV_ResizeTest test; test.safe_run(); }
|
TEST(Imgproc_Resize, accuracy) { CV_ResizeTest test; test.safe_run(); }
|
||||||
|
Loading…
Reference in New Issue
Block a user