mirror of
https://github.com/opencv/opencv.git
synced 2025-08-06 06:26:29 +08:00
Merge remote-tracking branch 'upstream/3.4' into merge-3.4
This commit is contained in:
commit
199687a1c5
@ -380,6 +380,9 @@ cv::Mat cv::findHomography( InputArray _points1, InputArray _points2,
|
||||
return Mat();
|
||||
convertPointsFromHomogeneous(p, p);
|
||||
}
|
||||
// Need at least 4 point correspondences to calculate Homography
|
||||
if( npoints < 4 )
|
||||
CV_Error(Error::StsVecLengthErr , "The input arrays should have at least 4 corresponding point sets to calculate Homography");
|
||||
p.reshape(2, npoints).convertTo(m, CV_32F);
|
||||
}
|
||||
|
||||
|
@ -63,6 +63,7 @@ namespace opencv_test { namespace {
|
||||
#define MESSAGE_RANSAC_DIFF "Reprojection error for current pair of points more than required."
|
||||
|
||||
#define MAX_COUNT_OF_POINTS 303
|
||||
#define MIN_COUNT_OF_POINTS 4
|
||||
#define COUNT_NORM_TYPES 3
|
||||
#define METHODS_COUNT 4
|
||||
|
||||
@ -249,7 +250,7 @@ void CV_HomographyTest::print_information_8(int _method, int j, int N, int k, in
|
||||
|
||||
void CV_HomographyTest::run(int)
|
||||
{
|
||||
for (int N = 4; N <= MAX_COUNT_OF_POINTS; ++N)
|
||||
for (int N = MIN_COUNT_OF_POINTS; N <= MAX_COUNT_OF_POINTS; ++N)
|
||||
{
|
||||
RNG& rng = ts->get_rng();
|
||||
|
||||
@ -711,4 +712,27 @@ TEST(Calib3d_Homography, fromImages)
|
||||
ASSERT_GE(ninliers1, 80);
|
||||
}
|
||||
|
||||
TEST(Calib3d_Homography, minPoints)
|
||||
{
|
||||
float pt1data[] =
|
||||
{
|
||||
2.80073029e+002f, 2.39591217e+002f, 2.21912201e+002f, 2.59783997e+002f
|
||||
};
|
||||
|
||||
float pt2data[] =
|
||||
{
|
||||
1.84072723e+002f, 1.43591202e+002f, 1.25912483e+002f, 1.63783859e+002f
|
||||
};
|
||||
|
||||
int npoints = (int)(sizeof(pt1data)/sizeof(pt1data[0])/2);
|
||||
printf("npoints = %d\n", npoints); // npoints = 2
|
||||
|
||||
Mat p1(1, npoints, CV_32FC2, pt1data);
|
||||
Mat p2(1, npoints, CV_32FC2, pt2data);
|
||||
Mat mask;
|
||||
|
||||
// findHomography should raise an error since npoints < MIN_COUNT_OF_POINTS
|
||||
EXPECT_THROW(findHomography(p1, p2, RANSAC, 0.01, mask), cv::Exception);
|
||||
}
|
||||
|
||||
}} // namespace
|
||||
|
@ -984,8 +984,8 @@ namespace cv {
|
||||
}
|
||||
|
||||
std::string activation = getParam<std::string>(layer_params, "activation", "linear");
|
||||
if(activation == "leaky" || activation == "swish" || activation == "mish" || activation == "logistic")
|
||||
++cv_layers_counter; // For ReLU, Swish, Mish, Sigmoid
|
||||
if (activation != "linear")
|
||||
++cv_layers_counter; // For ReLU, Swish, Mish, Sigmoid, etc
|
||||
|
||||
if(!darknet_layers_counter)
|
||||
tensor_shape.resize(1);
|
||||
|
@ -45,7 +45,7 @@ public:
|
||||
CV_Assert(params.has("zoom_factor_x") && params.has("zoom_factor_y"));
|
||||
}
|
||||
interpolation = params.get<String>("interpolation");
|
||||
CV_Assert(interpolation == "nearest" || interpolation == "opencv_linear" || interpolation == "bilinear");
|
||||
CV_Check(interpolation, interpolation == "nearest" || interpolation == "opencv_linear" || interpolation == "bilinear", "");
|
||||
|
||||
alignCorners = params.get<bool>("align_corners", false);
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -263,13 +263,13 @@ CV_IMPL int cvInitSystem( int, char** )
|
||||
wndc.lpszMenuName = highGUIclassName;
|
||||
wndc.hIcon = LoadIcon(0, IDI_APPLICATION);
|
||||
wndc.hCursor = (HCURSOR)LoadCursor(0, (LPSTR)(size_t)IDC_CROSS );
|
||||
wndc.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH);
|
||||
wndc.hbrBackground = (HBRUSH)GetStockObject(DKGRAY_BRUSH);
|
||||
|
||||
RegisterClass(&wndc);
|
||||
|
||||
wndc.lpszClassName = mainHighGUIclassName;
|
||||
wndc.lpszMenuName = mainHighGUIclassName;
|
||||
wndc.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH);
|
||||
wndc.hbrBackground = (HBRUSH)GetStockObject(DKGRAY_BRUSH);
|
||||
wndc.lpfnWndProc = MainWindowProc;
|
||||
|
||||
RegisterClass(&wndc);
|
||||
|
@ -155,6 +155,8 @@ void GCGraph<TWeight>::addTermWeights( int i, TWeight sourceW, TWeight sinkW )
|
||||
template <class TWeight>
|
||||
TWeight GCGraph<TWeight>::maxFlow()
|
||||
{
|
||||
CV_Assert(!vtcs.empty());
|
||||
CV_Assert(!edges.empty());
|
||||
const int TERMINAL = -1, ORPHAN = -2;
|
||||
Vtx stub, *nilNode = &stub, *first = nilNode, *last = nilNode;
|
||||
int curr_ts = 0;
|
||||
|
@ -758,7 +758,6 @@ void Subdiv2D::getTriangleList(std::vector<Vec6f>& triangleList) const
|
||||
triangleList.clear();
|
||||
int i, total = (int)(qedges.size()*4);
|
||||
std::vector<bool> edgemask(total, false);
|
||||
const bool filterPoints = true;
|
||||
Rect2f rect(topLeft.x, topLeft.y, bottomRight.x - topLeft.x, bottomRight.y - topLeft.y);
|
||||
|
||||
for( i = 4; i < total; i += 2 )
|
||||
@ -768,15 +767,15 @@ void Subdiv2D::getTriangleList(std::vector<Vec6f>& triangleList) const
|
||||
Point2f a, b, c;
|
||||
int edge_a = i;
|
||||
edgeOrg(edge_a, &a);
|
||||
if (filterPoints && !rect.contains(a))
|
||||
if ( !rect.contains(a) )
|
||||
continue;
|
||||
int edge_b = getEdge(edge_a, NEXT_AROUND_LEFT);
|
||||
edgeOrg(edge_b, &b);
|
||||
if (filterPoints && !rect.contains(b))
|
||||
if ( !rect.contains(b) )
|
||||
continue;
|
||||
int edge_c = getEdge(edge_b, NEXT_AROUND_LEFT);
|
||||
edgeOrg(edge_c, &c);
|
||||
if (filterPoints && !rect.contains(c))
|
||||
if ( !rect.contains(c) )
|
||||
continue;
|
||||
edgemask[edge_a] = true;
|
||||
edgemask[edge_b] = true;
|
||||
|
Loading…
Reference in New Issue
Block a user