mirror of
https://github.com/opencv/opencv.git
synced 2026-07-29 23:33:05 +04:00
Merge remote-tracking branch 'upstream/3.4' into merge-3.4
This commit is contained in:
@@ -250,8 +250,6 @@ CV_IMPL void cvComposeRT( const CvMat* _rvec1, const CvMat* _tvec1,
|
||||
|
||||
CV_IMPL int cvRodrigues2( const CvMat* src, CvMat* dst, CvMat* jacobian )
|
||||
{
|
||||
int depth, elem_size;
|
||||
int i, k;
|
||||
double J[27] = {0};
|
||||
CvMat matJ = cvMat( 3, 9, CV_64F, J );
|
||||
|
||||
@@ -262,8 +260,8 @@ CV_IMPL int cvRodrigues2( const CvMat* src, CvMat* dst, CvMat* jacobian )
|
||||
CV_Error( !dst ? CV_StsNullPtr : CV_StsBadArg,
|
||||
"The first output argument is not a valid matrix" );
|
||||
|
||||
depth = CV_MAT_DEPTH(src->type);
|
||||
elem_size = CV_ELEM_SIZE(depth);
|
||||
int depth = CV_MAT_DEPTH(src->type);
|
||||
int elem_size = CV_ELEM_SIZE(depth);
|
||||
|
||||
if( depth != CV_32F && depth != CV_64F )
|
||||
CV_Error( CV_StsUnsupportedFormat, "The matrices must have 32f or 64f data type" );
|
||||
@@ -349,12 +347,12 @@ CV_IMPL int cvRodrigues2( const CvMat* src, CvMat* dst, CvMat* jacobian )
|
||||
double d_r_x_[] = { 0, 0, 0, 0, 0, -1, 0, 1, 0,
|
||||
0, 0, 1, 0, 0, 0, -1, 0, 0,
|
||||
0, -1, 0, 1, 0, 0, 0, 0, 0 };
|
||||
for( i = 0; i < 3; i++ )
|
||||
for( int i = 0; i < 3; i++ )
|
||||
{
|
||||
double ri = i == 0 ? r.x : i == 1 ? r.y : r.z;
|
||||
double a0 = -s*ri, a1 = (s - 2*c1*itheta)*ri, a2 = c1*itheta;
|
||||
double a3 = (c - s*itheta)*ri, a4 = s*itheta;
|
||||
for( k = 0; k < 9; k++ )
|
||||
for( int k = 0; k < 9; k++ )
|
||||
J[i*9+k] = a0*I[k] + a1*rrt.val[k] + a2*drrt[i*9+k] +
|
||||
a3*r_x.val[k] + a4*d_r_x_[i*9+k];
|
||||
}
|
||||
@@ -490,6 +488,10 @@ CV_IMPL int cvRodrigues2( const CvMat* src, CvMat* dst, CvMat* jacobian )
|
||||
dst->data.db[step*2] = r.z;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
CV_Error(CV_StsBadSize, "Input matrix must be 1x3 or 3x1 for a rotation vector, or 3x3 for a rotation matrix");
|
||||
}
|
||||
|
||||
if( jacobian )
|
||||
{
|
||||
@@ -3465,6 +3467,12 @@ void cv::Rodrigues(InputArray _src, OutputArray _dst, OutputArray _jacobian)
|
||||
CV_INSTRUMENT_REGION();
|
||||
|
||||
Mat src = _src.getMat();
|
||||
const Size srcSz = src.size();
|
||||
CV_Check(srcSz, srcSz == Size(3, 1) || srcSz == Size(1, 3) ||
|
||||
(srcSz == Size(1, 1) && src.channels() == 3) ||
|
||||
srcSz == Size(3, 3),
|
||||
"Input matrix must be 1x3 or 3x1 for a rotation vector, or 3x3 for a rotation matrix");
|
||||
|
||||
bool v2m = src.cols == 1 || src.rows == 1;
|
||||
_dst.create(3, v2m ? 3 : 1, src.depth());
|
||||
Mat dst = _dst.getMat();
|
||||
|
||||
@@ -95,6 +95,7 @@ void CV_ChessboardDetectorBadArgTest::run( int /*start_from */)
|
||||
initArgs();
|
||||
pattern_size = Size(2,2);
|
||||
errors += run_test_case( Error::StsOutOfRange, "Invalid pattern size" );
|
||||
|
||||
pattern_size = cbg.cornersSize();
|
||||
|
||||
cb.convertTo(img, CV_32F);
|
||||
|
||||
@@ -671,7 +671,8 @@ TEST(Core_Check, testMatType_fail_2)
|
||||
EXPECT_STREQ(e.err.c_str(),
|
||||
"> Unsupported src:\n"
|
||||
"> 'src_type == CV_32FC1 || src_type == CV_32FC3'\n"
|
||||
"> where\n> 'src_type' is 0 (CV_8UC1)\n"
|
||||
"> where\n"
|
||||
"> 'src_type' is 0 (CV_8UC1)\n"
|
||||
);
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
@@ -737,7 +738,39 @@ TEST(Core_Check, testMatDepth_fail_2)
|
||||
EXPECT_STREQ(e.err.c_str(),
|
||||
"> Unsupported src:\n"
|
||||
"> 'src_depth == CV_32F || src_depth == CV_64F'\n"
|
||||
"> where\n> 'src_depth' is 0 (CV_8U)\n"
|
||||
"> where\n"
|
||||
"> 'src_depth' is 0 (CV_8U)\n"
|
||||
);
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
{
|
||||
FAIL() << "Unexpected C++ exception: " << e.what();
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
FAIL() << "Unexpected unknown exception";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void test_check_Size_1(const Size& srcSz)
|
||||
{
|
||||
CV_Check(srcSz, srcSz == Size(4, 3), "Unsupported src size");
|
||||
}
|
||||
TEST(Core_Check, testSize_1)
|
||||
{
|
||||
try
|
||||
{
|
||||
test_check_Size_1(Size(2, 1));
|
||||
FAIL() << "Unreachable code called";
|
||||
}
|
||||
catch (const cv::Exception& e)
|
||||
{
|
||||
EXPECT_STREQ(e.err.c_str(),
|
||||
"> Unsupported src size:\n"
|
||||
"> 'srcSz == Size(4, 3)'\n"
|
||||
"> where\n"
|
||||
"> 'srcSz' is [2 x 1]\n"
|
||||
);
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
|
||||
@@ -996,7 +996,7 @@ void TFImporter::populateNet(Net dstNet)
|
||||
if (getDataLayout(name, data_layouts) == DATA_LAYOUT_UNKNOWN)
|
||||
data_layouts[name] = DATA_LAYOUT_NHWC;
|
||||
}
|
||||
else if (type == "BiasAdd" || type == "Add" || type == "Sub" || type=="AddN")
|
||||
else if (type == "BiasAdd" || type == "Add" || type == "AddV2" || type == "Sub" || type=="AddN")
|
||||
{
|
||||
bool haveConst = false;
|
||||
for(int ii = 0; !haveConst && ii < layer.input_size(); ++ii)
|
||||
|
||||
@@ -90,12 +90,12 @@ public:
|
||||
CV_TRACE_FUNCTION();
|
||||
DTreesImpl::clear();
|
||||
oobError = 0.;
|
||||
rng = RNG((uint64)-1);
|
||||
}
|
||||
|
||||
const vector<int>& getActiveVars() CV_OVERRIDE
|
||||
{
|
||||
CV_TRACE_FUNCTION();
|
||||
RNG &rng = theRNG();
|
||||
int i, nvars = (int)allVars.size(), m = (int)activeVars.size();
|
||||
for( i = 0; i < nvars; i++ )
|
||||
{
|
||||
@@ -134,6 +134,7 @@ public:
|
||||
bool train( const Ptr<TrainData>& trainData, int flags ) CV_OVERRIDE
|
||||
{
|
||||
CV_TRACE_FUNCTION();
|
||||
RNG &rng = theRNG();
|
||||
CV_Assert(!trainData.empty());
|
||||
startTraining(trainData, flags);
|
||||
int treeidx, ntrees = (rparams.termCrit.type & TermCriteria::COUNT) != 0 ?
|
||||
@@ -424,7 +425,6 @@ public:
|
||||
double oobError;
|
||||
vector<float> varImportance;
|
||||
vector<int> allVars, activeVars;
|
||||
RNG rng;
|
||||
};
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user