mirror of
https://github.com/opencv/opencv.git
synced 2026-07-31 00:03:03 +04:00
Merge branch 'master' of https://github.com/Itseez/opencv into brisk
This commit is contained in:
@@ -697,19 +697,19 @@ CV_EXPORTS_W bool findCirclesGrid( InputArray image, Size patternSize,
|
||||
|
||||
/** @brief Finds the camera intrinsic and extrinsic parameters from several views of a calibration pattern.
|
||||
|
||||
@param objectPoints In the new interface it is a vector of vectors of calibration pattern points
|
||||
in the calibration pattern coordinate space. The outer vector contains as many elements as the
|
||||
number of the pattern views. If the same calibration pattern is shown in each view and it is fully
|
||||
visible, all the vectors will be the same. Although, it is possible to use partially occluded
|
||||
patterns, or even different patterns in different views. Then, the vectors will be different. The
|
||||
points are 3D, but since they are in a pattern coordinate system, then, if the rig is planar, it
|
||||
may make sense to put the model to a XY coordinate plane so that Z-coordinate of each input object
|
||||
point is 0.
|
||||
@param objectPoints In the new interface it is a vector of vectors of calibration pattern points in
|
||||
the calibration pattern coordinate space (e.g. std::vector<std::vector<cv::Vec3f>>). The outer
|
||||
vector contains as many elements as the number of the pattern views. If the same calibration pattern
|
||||
is shown in each view and it is fully visible, all the vectors will be the same. Although, it is
|
||||
possible to use partially occluded patterns, or even different patterns in different views. Then,
|
||||
the vectors will be different. The points are 3D, but since they are in a pattern coordinate system,
|
||||
then, if the rig is planar, it may make sense to put the model to a XY coordinate plane so that
|
||||
Z-coordinate of each input object point is 0.
|
||||
In the old interface all the vectors of object points from different views are concatenated
|
||||
together.
|
||||
@param imagePoints In the new interface it is a vector of vectors of the projections of
|
||||
calibration pattern points. imagePoints.size() and objectPoints.size() and imagePoints[i].size()
|
||||
must be equal to objectPoints[i].size() for each i.
|
||||
@param imagePoints In the new interface it is a vector of vectors of the projections of calibration
|
||||
pattern points (e.g. std::vector<std::vector<cv::Vec2f>>). imagePoints.size() and
|
||||
objectPoints.size() and imagePoints[i].size() must be equal to objectPoints[i].size() for each i.
|
||||
In the old interface all the vectors of object points from different views are concatenated
|
||||
together.
|
||||
@param imageSize Size of the image used only to initialize the intrinsic camera matrix.
|
||||
@@ -719,11 +719,11 @@ and/or CV_CALIB_FIX_ASPECT_RATIO are specified, some or all of fx, fy, cx, cy mu
|
||||
initialized before calling the function.
|
||||
@param distCoeffs Output vector of distortion coefficients
|
||||
\f$(k_1, k_2, p_1, p_2[, k_3[, k_4, k_5, k_6],[s_1, s_2, s_3, s_4]])\f$ of 4, 5, 8 or 12 elements.
|
||||
@param rvecs Output vector of rotation vectors (see Rodrigues ) estimated for each pattern view.
|
||||
That is, each k-th rotation vector together with the corresponding k-th translation vector (see
|
||||
the next output parameter description) brings the calibration pattern from the model coordinate
|
||||
space (in which object points are specified) to the world coordinate space, that is, a real
|
||||
position of the calibration pattern in the k-th pattern view (k=0.. *M* -1).
|
||||
@param rvecs Output vector of rotation vectors (see Rodrigues ) estimated for each pattern view
|
||||
(e.g. std::vector<cv::Mat>>). That is, each k-th rotation vector together with the corresponding
|
||||
k-th translation vector (see the next output parameter description) brings the calibration pattern
|
||||
from the model coordinate space (in which object points are specified) to the world coordinate
|
||||
space, that is, a real position of the calibration pattern in the k-th pattern view (k=0.. *M* -1).
|
||||
@param tvecs Output vector of translation vectors estimated for each pattern view.
|
||||
@param flags Different flags that may be zero or a combination of the following values:
|
||||
- **CV_CALIB_USE_INTRINSIC_GUESS** cameraMatrix contains valid initial values of
|
||||
|
||||
@@ -138,7 +138,12 @@ protected:
|
||||
{
|
||||
InT d = disp(y, x);
|
||||
|
||||
double from[4] = { x, y, d, 1 };
|
||||
double from[4] = {
|
||||
static_cast<double>(x),
|
||||
static_cast<double>(y),
|
||||
static_cast<double>(d),
|
||||
1.0,
|
||||
};
|
||||
Mat_<double> res = Q * Mat_<double>(4, 1, from);
|
||||
res /= res(3, 0);
|
||||
|
||||
|
||||
@@ -183,6 +183,9 @@ protected:
|
||||
method, totalTestsCount - successfulTestsCount, totalTestsCount, maxError, mode);
|
||||
ts->set_failed_test_info(cvtest::TS::FAIL_BAD_ACCURACY);
|
||||
}
|
||||
cout << "mode: " << mode << ", method: " << method << " -> "
|
||||
<< ((double)successfulTestsCount / totalTestsCount) * 100 << "%"
|
||||
<< " (err < " << maxError << ")" << endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -104,7 +104,10 @@ void CV_UndistortPointsBadArgTest::run(int)
|
||||
img_size.height = 600;
|
||||
double cam[9] = {150.f, 0.f, img_size.width/2.f, 0, 300.f, img_size.height/2.f, 0.f, 0.f, 1.f};
|
||||
double dist[4] = {0.01,0.02,0.001,0.0005};
|
||||
double s_points[N_POINTS2] = {img_size.width/4,img_size.height/4};
|
||||
double s_points[N_POINTS2] = {
|
||||
static_cast<double>(img_size.width) / 4.0,
|
||||
static_cast<double>(img_size.height) / 4.0,
|
||||
};
|
||||
double d_points[N_POINTS2];
|
||||
double p[9] = {155.f, 0.f, img_size.width/2.f+img_size.width/50.f, 0, 310.f, img_size.height/2.f+img_size.height/50.f, 0.f, 0.f, 1.f};
|
||||
double r[9] = {1,0,0,0,1,0,0,0,1};
|
||||
|
||||
@@ -253,7 +253,7 @@ void cv::Affine3<T>::rotation(const Vec3& _rvec)
|
||||
double c = std::cos(theta);
|
||||
double s = std::sin(theta);
|
||||
double c1 = 1. - c;
|
||||
double itheta = theta ? 1./theta : 0.;
|
||||
double itheta = (theta != 0) ? 1./theta : 0.;
|
||||
|
||||
rx *= itheta; ry *= itheta; rz *= itheta;
|
||||
|
||||
|
||||
@@ -651,7 +651,7 @@ icvGrowSeq( CvSeq *seq, int in_front_of )
|
||||
/* If there is a free space just after last allocated block
|
||||
and it is big enough then enlarge the last block.
|
||||
This can happen only if the new block is added to the end of sequence: */
|
||||
if( (unsigned)(ICV_FREE_PTR(storage) - seq->block_max) < CV_STRUCT_ALIGN &&
|
||||
if( (size_t)(ICV_FREE_PTR(storage) - seq->block_max) < CV_STRUCT_ALIGN &&
|
||||
storage->free_space >= seq->elem_size && !in_front_of )
|
||||
{
|
||||
int delta = storage->free_space / elem_size;
|
||||
|
||||
@@ -144,7 +144,11 @@ protected:
|
||||
|
||||
depth = cvtest::randInt(rng) % (CV_64F+1);
|
||||
cn = cvtest::randInt(rng) % 4 + 1;
|
||||
int sz[] = {cvtest::randInt(rng)%10+1, cvtest::randInt(rng)%10+1, cvtest::randInt(rng)%10+1};
|
||||
int sz[] = {
|
||||
static_cast<int>(cvtest::randInt(rng)%10+1),
|
||||
static_cast<int>(cvtest::randInt(rng)%10+1),
|
||||
static_cast<int>(cvtest::randInt(rng)%10+1),
|
||||
};
|
||||
MatND test_mat_nd(3, sz, CV_MAKETYPE(depth, cn));
|
||||
|
||||
rng0.fill(test_mat_nd, CV_RAND_UNI, Scalar::all(ranges[depth][0]), Scalar::all(ranges[depth][1]));
|
||||
@@ -156,8 +160,12 @@ protected:
|
||||
multiply(test_mat_nd, test_mat_scale, test_mat_nd);
|
||||
}
|
||||
|
||||
int ssz[] = {cvtest::randInt(rng)%10+1, cvtest::randInt(rng)%10+1,
|
||||
cvtest::randInt(rng)%10+1,cvtest::randInt(rng)%10+1};
|
||||
int ssz[] = {
|
||||
static_cast<int>(cvtest::randInt(rng)%10+1),
|
||||
static_cast<int>(cvtest::randInt(rng)%10+1),
|
||||
static_cast<int>(cvtest::randInt(rng)%10+1),
|
||||
static_cast<int>(cvtest::randInt(rng)%10+1),
|
||||
};
|
||||
SparseMat test_sparse_mat = cvTsGetRandomSparseMat(4, ssz, cvtest::randInt(rng)%(CV_64F+1),
|
||||
cvtest::randInt(rng) % 10000, 0, 100, rng);
|
||||
|
||||
|
||||
@@ -253,7 +253,7 @@ PERF_TEST_P(Sz_Depth_Cn_Inter_Border, WarpAffine,
|
||||
const double aplha = CV_PI / 4;
|
||||
const double mat[2 * 3] =
|
||||
{
|
||||
std::cos(aplha), -std::sin(aplha), src.cols / 2,
|
||||
std::cos(aplha), -std::sin(aplha), static_cast<double>(src.cols) / 2.0,
|
||||
std::sin(aplha), std::cos(aplha), 0
|
||||
};
|
||||
const cv::Mat M(2, 3, CV_64F, (void*) mat);
|
||||
@@ -301,7 +301,7 @@ PERF_TEST_P(Sz_Depth_Cn_Inter_Border, WarpPerspective,
|
||||
declare.in(src, WARMUP_RNG);
|
||||
|
||||
const double aplha = CV_PI / 4;
|
||||
double mat[3][3] = { {std::cos(aplha), -std::sin(aplha), src.cols / 2},
|
||||
double mat[3][3] = { {std::cos(aplha), -std::sin(aplha), static_cast<double>(src.cols) / 2.0},
|
||||
{std::sin(aplha), std::cos(aplha), 0},
|
||||
{0.0, 0.0, 1.0}};
|
||||
const cv::Mat M(3, 3, CV_64F, (void*) mat);
|
||||
|
||||
@@ -89,13 +89,13 @@ struct CV_EXPORTS LinearIndexParams : public IndexParams
|
||||
struct CV_EXPORTS CompositeIndexParams : public IndexParams
|
||||
{
|
||||
CompositeIndexParams(int trees = 4, int branching = 32, int iterations = 11,
|
||||
cvflann::flann_centers_init_t centers_init = cvflann::FLANN_CENTERS_RANDOM, float cb_index = 0.2 );
|
||||
cvflann::flann_centers_init_t centers_init = cvflann::FLANN_CENTERS_RANDOM, float cb_index = 0.2f );
|
||||
};
|
||||
|
||||
struct CV_EXPORTS AutotunedIndexParams : public IndexParams
|
||||
{
|
||||
AutotunedIndexParams(float target_precision = 0.8, float build_weight = 0.01,
|
||||
float memory_weight = 0, float sample_fraction = 0.1);
|
||||
AutotunedIndexParams(float target_precision = 0.8f, float build_weight = 0.01f,
|
||||
float memory_weight = 0, float sample_fraction = 0.1f);
|
||||
};
|
||||
|
||||
struct CV_EXPORTS HierarchicalClusteringIndexParams : public IndexParams
|
||||
@@ -107,7 +107,7 @@ struct CV_EXPORTS HierarchicalClusteringIndexParams : public IndexParams
|
||||
struct CV_EXPORTS KMeansIndexParams : public IndexParams
|
||||
{
|
||||
KMeansIndexParams(int branching = 32, int iterations = 11,
|
||||
cvflann::flann_centers_init_t centers_init = cvflann::FLANN_CENTERS_RANDOM, float cb_index = 0.2 );
|
||||
cvflann::flann_centers_init_t centers_init = cvflann::FLANN_CENTERS_RANDOM, float cb_index = 0.2f );
|
||||
};
|
||||
|
||||
struct CV_EXPORTS LshIndexParams : public IndexParams
|
||||
|
||||
@@ -117,7 +117,7 @@ CV_IMPL void cvAddText(const CvArr* img, const char* text, CvPoint org, CvFont*
|
||||
"putText",
|
||||
autoBlockingConnection(),
|
||||
Q_ARG(void*, (void*) img),
|
||||
Q_ARG(QString,QString(text)),
|
||||
Q_ARG(QString,QString::fromUtf8(text)),
|
||||
Q_ARG(QPoint, QPoint(org.x,org.y)),
|
||||
Q_ARG(void*,(void*) font));
|
||||
}
|
||||
@@ -418,12 +418,14 @@ static CvBar* icvFindBarByName(QBoxLayout* layout, QString name_bar, typeBar typ
|
||||
static CvTrackbar* icvFindTrackBarByName(const char* name_trackbar, const char* name_window, QBoxLayout* layout = NULL)
|
||||
{
|
||||
QString nameQt(name_trackbar);
|
||||
if ((!name_window || !name_window[0]) && global_control_panel) //window name is null and we have a control panel
|
||||
QString nameWinQt(name_window);
|
||||
|
||||
if (nameWinQt.isEmpty() && global_control_panel) //window name is null and we have a control panel
|
||||
layout = global_control_panel->myLayout;
|
||||
|
||||
if (!layout)
|
||||
{
|
||||
QPointer<CvWindow> w = icvFindWindowByName(QLatin1String(name_window));
|
||||
QPointer<CvWindow> w = icvFindWindowByName(nameWinQt);
|
||||
|
||||
if (!w)
|
||||
CV_Error(CV_StsNullPtr, "NULL window handler");
|
||||
@@ -1875,7 +1877,7 @@ bool CvWindow::isOpenGl()
|
||||
|
||||
void CvWindow::setViewportSize(QSize _size)
|
||||
{
|
||||
myView->getWidget()->resize(_size);
|
||||
resize(_size);
|
||||
myView->setSize(_size);
|
||||
}
|
||||
|
||||
|
||||
@@ -3494,7 +3494,7 @@ CV_EXPORTS_W double contourArea( InputArray contour, bool oriented = false );
|
||||
|
||||
The function calculates and returns the minimum-area bounding rectangle (possibly rotated) for a
|
||||
specified point set. See the OpenCV sample minarea.cpp . Developer should keep in mind that the
|
||||
returned rotatedRect can contain negative indices when data is close the the containing Mat element
|
||||
returned rotatedRect can contain negative indices when data is close to the containing Mat element
|
||||
boundary.
|
||||
|
||||
@param points Input vector of 2D points, stored in std::vector\<\> or Mat
|
||||
|
||||
@@ -34,5 +34,11 @@ PERF_TEST_P(MomentsFixture_val, Moments1,
|
||||
|
||||
TEST_CYCLE() m = cv::moments(src, binaryImage);
|
||||
|
||||
SANITY_CHECK_MOMENTS(m, 1e-4, ERROR_RELATIVE);
|
||||
int len = (int)sizeof(cv::Moments) / sizeof(double);
|
||||
cv::Mat mat(1, len, CV_64F, (void*)&m);
|
||||
//adding 1 to moments to avoid accidental tests fail on values close to 0
|
||||
mat += 1;
|
||||
|
||||
|
||||
SANITY_CHECK_MOMENTS(m, 2e-4, ERROR_RELATIVE);
|
||||
}
|
||||
|
||||
@@ -2229,7 +2229,10 @@ void cv::polylines(InputOutputArray _img, InputArrayOfArrays pts,
|
||||
{
|
||||
Mat p = pts.getMat(manyContours ? i : -1);
|
||||
if( p.total() == 0 )
|
||||
{
|
||||
npts[i] = 0;
|
||||
continue;
|
||||
}
|
||||
CV_Assert(p.checkVector(2, CV_32S) >= 0);
|
||||
ptsptr[i] = p.ptr<Point>();
|
||||
npts[i] = p.rows*p.cols*p.channels()/2;
|
||||
|
||||
@@ -2770,7 +2770,7 @@ public:
|
||||
#if CV_SSE3
|
||||
int CV_DECL_ALIGNED(16) buf[4];
|
||||
float CV_DECL_ALIGNED(16) bufSum[4];
|
||||
static const int CV_DECL_ALIGNED(16) bufSignMask[] = { 0x80000000, 0x80000000, 0x80000000, 0x80000000 };
|
||||
static const unsigned int CV_DECL_ALIGNED(16) bufSignMask[] = { 0x80000000, 0x80000000, 0x80000000, 0x80000000 };
|
||||
bool haveSSE3 = checkHardwareSupport(CV_CPU_SSE3);
|
||||
#endif
|
||||
|
||||
@@ -3152,7 +3152,7 @@ public:
|
||||
#if CV_SSE3
|
||||
int CV_DECL_ALIGNED(16) idxBuf[4];
|
||||
float CV_DECL_ALIGNED(16) bufSum32[4];
|
||||
static const int CV_DECL_ALIGNED(16) bufSignMask[] = { 0x80000000, 0x80000000, 0x80000000, 0x80000000 };
|
||||
static const unsigned int CV_DECL_ALIGNED(16) bufSignMask[] = { 0x80000000, 0x80000000, 0x80000000, 0x80000000 };
|
||||
bool haveSSE3 = checkHardwareSupport(CV_CPU_SSE3);
|
||||
#endif
|
||||
|
||||
|
||||
@@ -410,4 +410,23 @@ TEST(Core_Drawing, _914)
|
||||
ASSERT_EQ( (3*rows + cols)*3 - 3*9, pixelsDrawn);
|
||||
}
|
||||
|
||||
TEST(Core_Drawing, polylines_empty)
|
||||
{
|
||||
Mat img(100, 100, CV_8UC1, Scalar(0));
|
||||
vector<Point> pts; // empty
|
||||
polylines(img, pts, false, Scalar(255));
|
||||
int cnt = countNonZero(img);
|
||||
ASSERT_EQ(cnt, 0);
|
||||
}
|
||||
|
||||
TEST(Core_Drawing, polylines)
|
||||
{
|
||||
Mat img(100, 100, CV_8UC1, Scalar(0));
|
||||
vector<Point> pts;
|
||||
pts.push_back(Point(0, 0));
|
||||
pts.push_back(Point(20, 0));
|
||||
polylines(img, pts, false, Scalar(255));
|
||||
int cnt = countNonZero(img);
|
||||
ASSERT_EQ(cnt, 21);
|
||||
}
|
||||
/* End of file. */
|
||||
|
||||
@@ -226,7 +226,7 @@ static bool pyopencv_to(PyObject* o, Mat& m, const ArgInfo info)
|
||||
|
||||
if( PyInt_Check(o) )
|
||||
{
|
||||
double v[] = {(double)PyInt_AsLong((PyObject*)o), 0., 0., 0.};
|
||||
double v[] = {static_cast<double>(PyInt_AsLong((PyObject*)o)), 0., 0., 0.};
|
||||
m = Mat(4, 1, CV_64F, v).clone();
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -438,9 +438,9 @@ static int countViolations(const cv::Mat& expected, const cv::Mat& actual, const
|
||||
|
||||
if (v > 0 && max_violation != 0 && max_allowed != 0)
|
||||
{
|
||||
int loc[10];
|
||||
int loc[10] = {0};
|
||||
cv::minMaxIdx(maximum, 0, max_allowed, 0, loc, mask);
|
||||
*max_violation = diff64f.at<double>(loc[1], loc[0]);
|
||||
*max_violation = diff64f.at<double>(loc[0], loc[1]);
|
||||
}
|
||||
|
||||
return v;
|
||||
|
||||
@@ -603,11 +603,6 @@ public:
|
||||
ComPtr() throw()
|
||||
{
|
||||
}
|
||||
ComPtr(int nNull) throw()
|
||||
{
|
||||
assert(nNull == 0);
|
||||
p = NULL;
|
||||
}
|
||||
ComPtr(T* lp) throw()
|
||||
{
|
||||
p = lp;
|
||||
@@ -638,13 +633,6 @@ public:
|
||||
{
|
||||
return p.operator==(pT);
|
||||
}
|
||||
// For comparison to NULL
|
||||
bool operator==(int nNull) const
|
||||
{
|
||||
assert(nNull == 0);
|
||||
return p.operator==(NULL);
|
||||
}
|
||||
|
||||
bool operator!=(_In_opt_ T* pT) const throw()
|
||||
{
|
||||
return p.operator!=(pT);
|
||||
@@ -3123,7 +3111,7 @@ public:
|
||||
HRESULT hr = CheckShutdown();
|
||||
|
||||
if (SUCCEEDED(hr)) {
|
||||
if (m_spClock == NULL) {
|
||||
if (!m_spClock) {
|
||||
hr = MF_E_NO_CLOCK; // There is no presentation clock.
|
||||
} else {
|
||||
// Return the pointer to the caller.
|
||||
|
||||
Reference in New Issue
Block a user