mirror of
https://github.com/opencv/opencv.git
synced 2026-07-30 07:43:03 +04:00
Merge remote-tracking branch 'upstream/3.4' into merge-3.4
This commit is contained in:
@@ -271,7 +271,7 @@ void update_map(const Mat& src, Mat& map_x, Mat& map_y, const int remapMode )
|
||||
}
|
||||
}
|
||||
|
||||
PERF_TEST(Transform, getPerspectiveTransform)
|
||||
PERF_TEST(Transform, getPerspectiveTransform_1000)
|
||||
{
|
||||
unsigned int size = 8;
|
||||
Mat source(1, size/2, CV_32FC2);
|
||||
@@ -280,12 +280,14 @@ PERF_TEST(Transform, getPerspectiveTransform)
|
||||
|
||||
declare.in(source, destination, WARMUP_RNG);
|
||||
|
||||
TEST_CYCLE()
|
||||
PERF_SAMPLE_BEGIN()
|
||||
for (int i = 0; i < 1000; i++)
|
||||
{
|
||||
transformCoefficient = getPerspectiveTransform(source, destination);
|
||||
}
|
||||
PERF_SAMPLE_END()
|
||||
|
||||
SANITY_CHECK(transformCoefficient, 1e-5);
|
||||
SANITY_CHECK_NOTHING();
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
@@ -209,7 +209,14 @@ cvStartFindContours_Impl( void* _img, CvMemStorage* storage,
|
||||
CV_Error( CV_StsBadSize, "" );
|
||||
|
||||
CvContourScanner scanner = (CvContourScanner)cvAlloc( sizeof( *scanner ));
|
||||
#if defined __GNUC__ && __GNUC__ >= 8
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wclass-memaccess"
|
||||
#endif
|
||||
memset( scanner, 0, sizeof(*scanner) );
|
||||
#if defined __GNUC__ && __GNUC__ >= 8
|
||||
#pragma GCC diagnostic pop
|
||||
#endif
|
||||
|
||||
scanner->storage1 = scanner->storage2 = storage;
|
||||
scanner->img0 = (schar *) img;
|
||||
|
||||
@@ -546,10 +546,10 @@ static bool ocl_Laplacian5(InputArray _src, OutputArray _dst,
|
||||
size_t lmsz = dev.localMemSize();
|
||||
size_t src_step = _src.step(), src_offset = _src.offset();
|
||||
const size_t tileSizeYmax = wgs / tileSizeX;
|
||||
CV_Assert(src_step != 0 && esz != 0);
|
||||
|
||||
// workaround for NVIDIA: 3 channel vector type takes 4*elem_size in local memory
|
||||
int loc_mem_cn = dev.vendorID() == ocl::Device::VENDOR_NVIDIA && cn == 3 ? 4 : cn;
|
||||
|
||||
if (((src_offset % src_step) % esz == 0) &&
|
||||
(
|
||||
(borderType == BORDER_CONSTANT || borderType == BORDER_REPLICATE) ||
|
||||
|
||||
@@ -2563,6 +2563,11 @@ static const int CodeDeltas[8][2] =
|
||||
#define CV_ADJUST_EDGE_COUNT( count, seq ) \
|
||||
((count) -= ((count) == (seq)->total && !CV_IS_SEQ_CLOSED(seq)))
|
||||
|
||||
#if defined __GNUC__ && __GNUC__ >= 8
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wclass-memaccess"
|
||||
#endif
|
||||
|
||||
CV_IMPL void
|
||||
cvDrawContours( void* _img, CvSeq* contour,
|
||||
CvScalar _externalColor, CvScalar _holeColor,
|
||||
@@ -2894,4 +2899,8 @@ cvGetTextSize( const char *text, const CvFont *_font, CvSize *_size, int *_base_
|
||||
*_size = size;
|
||||
}
|
||||
|
||||
#if defined __GNUC__ && __GNUC__ >= 8
|
||||
#pragma GCC diagnostic pop // "-Wclass-memaccess"
|
||||
#endif
|
||||
|
||||
/* End of file. */
|
||||
|
||||
@@ -4284,10 +4284,14 @@ static bool ocl_sepFilter2D_SinglePass(InputArray _src, OutputArray _dst,
|
||||
size_t src_step = _src.step(), src_offset = _src.offset();
|
||||
bool doubleSupport = ocl::Device::getDefault().doubleFPConfig() > 0;
|
||||
|
||||
if ((src_offset % src_step) % esz != 0 || (!doubleSupport && (sdepth == CV_64F || ddepth == CV_64F)) ||
|
||||
!(borderType == BORDER_CONSTANT || borderType == BORDER_REPLICATE ||
|
||||
borderType == BORDER_REFLECT || borderType == BORDER_WRAP ||
|
||||
borderType == BORDER_REFLECT_101))
|
||||
if (esz == 0
|
||||
|| (src_offset % src_step) % esz != 0
|
||||
|| (!doubleSupport && (sdepth == CV_64F || ddepth == CV_64F))
|
||||
|| !(borderType == BORDER_CONSTANT
|
||||
|| borderType == BORDER_REPLICATE
|
||||
|| borderType == BORDER_REFLECT
|
||||
|| borderType == BORDER_WRAP
|
||||
|| borderType == BORDER_REFLECT_101))
|
||||
return false;
|
||||
|
||||
size_t lt2[2] = { optimizedSepFilterLocalWidth, optimizedSepFilterLocalHeight };
|
||||
|
||||
@@ -642,8 +642,15 @@ cvFloodFill( CvArr* arr, CvPoint seed_point,
|
||||
CvScalar newVal, CvScalar lo_diff, CvScalar up_diff,
|
||||
CvConnectedComp* comp, int flags, CvArr* maskarr )
|
||||
{
|
||||
#if defined __GNUC__ && __GNUC__ >= 8
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wclass-memaccess"
|
||||
#endif
|
||||
if( comp )
|
||||
memset( comp, 0, sizeof(*comp) );
|
||||
#if defined __GNUC__ && __GNUC__ >= 8
|
||||
#pragma GCC diagnostic pop
|
||||
#endif
|
||||
|
||||
cv::Mat img = cv::cvarrToMat(arr), mask = cv::cvarrToMat(maskarr);
|
||||
int area = cv::floodFill(img, mask, seed_point, newVal,
|
||||
|
||||
@@ -174,6 +174,7 @@ void GMM::addSample( int ci, const Vec3d color )
|
||||
|
||||
void GMM::endLearning()
|
||||
{
|
||||
CV_Assert(totalSampleCount > 0);
|
||||
const double variance = 0.01;
|
||||
for( int ci = 0; ci < componentsCount; ci++ )
|
||||
{
|
||||
|
||||
@@ -50,6 +50,7 @@
|
||||
#include "precomp.hpp"
|
||||
#include "opencl_kernels_imgproc.hpp"
|
||||
#include "hal_replacement.hpp"
|
||||
#include <opencv2/core/utils/configuration.private.hpp>
|
||||
#include "opencv2/core/hal/intrin.hpp"
|
||||
#include "opencv2/core/openvx/ovx_defs.hpp"
|
||||
#include "opencv2/core/softfloat.hpp"
|
||||
@@ -3061,7 +3062,9 @@ cv::Mat cv::getPerspectiveTransform( const Point2f src[], const Point2f dst[] )
|
||||
b[i+4] = dst[i].y;
|
||||
}
|
||||
|
||||
solve( A, B, X, DECOMP_SVD );
|
||||
static int param_IMGPROC_GETPERSPECTIVETRANSFORM_SOLVE_METHOD =
|
||||
(int)utils::getConfigurationParameterSizeT("OPENCV_IMGPROC_GETPERSPECTIVETRANSFORM_SOLVE_METHOD", (size_t)DECOMP_LU);
|
||||
solve(A, B, X, param_IMGPROC_GETPERSPECTIVETRANSFORM_SOLVE_METHOD);
|
||||
M.ptr<double>()[8] = 1.;
|
||||
|
||||
return M;
|
||||
@@ -3283,6 +3286,7 @@ void cv::warpPolar(InputArray _src, OutputArray _dst, Size dsize,
|
||||
|
||||
if (!(flags & CV_WARP_INVERSE_MAP))
|
||||
{
|
||||
CV_Assert(!dsize.empty());
|
||||
double Kangle = CV_2PI / dsize.height;
|
||||
int phi, rho;
|
||||
|
||||
@@ -3329,6 +3333,7 @@ void cv::warpPolar(InputArray _src, OutputArray _dst, Size dsize,
|
||||
Mat src = _dst.getMat();
|
||||
Size ssize = _dst.size();
|
||||
ssize.height -= 2 * ANGLE_BORDER;
|
||||
CV_Assert(!ssize.empty());
|
||||
const double Kangle = CV_2PI / ssize.height;
|
||||
double Kmag;
|
||||
if (semiLog)
|
||||
|
||||
@@ -47,6 +47,7 @@ static const double eps = 1e-6;
|
||||
|
||||
static void fitLine2D_wods( const Point2f* points, int count, float *weights, float *line )
|
||||
{
|
||||
CV_Assert(count > 0);
|
||||
double x = 0, y = 0, x2 = 0, y2 = 0, xy = 0, w = 0;
|
||||
double dx2, dy2, dxy;
|
||||
int i;
|
||||
@@ -98,6 +99,7 @@ static void fitLine2D_wods( const Point2f* points, int count, float *weights, fl
|
||||
|
||||
static void fitLine3D_wods( const Point3f * points, int count, float *weights, float *line )
|
||||
{
|
||||
CV_Assert(count > 0);
|
||||
int i;
|
||||
float w0 = 0;
|
||||
float x0 = 0, y0 = 0, z0 = 0;
|
||||
|
||||
@@ -772,6 +772,7 @@ bool LineSegmentDetectorImpl::refine(std::vector<RegionPoint>& reg, double reg_a
|
||||
++n;
|
||||
}
|
||||
}
|
||||
CV_Assert(n > 0);
|
||||
double mean_angle = sum / double(n);
|
||||
// 2 * standard deviation
|
||||
double tau = 2.0 * sqrt((s_sum - 2.0 * mean_angle * sum) / double(n) + mean_angle * mean_angle);
|
||||
|
||||
@@ -495,6 +495,13 @@ static bool ocl_moments( InputArray _src, Moments& m, bool binary)
|
||||
const int TILE_SIZE = 32;
|
||||
const int K = 10;
|
||||
|
||||
Size sz = _src.getSz();
|
||||
int xtiles = divUp(sz.width, TILE_SIZE);
|
||||
int ytiles = divUp(sz.height, TILE_SIZE);
|
||||
int ntiles = xtiles*ytiles;
|
||||
if (ntiles == 0)
|
||||
return false;
|
||||
|
||||
ocl::Kernel k = ocl::Kernel("moments", ocl::imgproc::moments_oclsrc,
|
||||
format("-D TILE_SIZE=%d%s",
|
||||
TILE_SIZE,
|
||||
@@ -504,10 +511,6 @@ static bool ocl_moments( InputArray _src, Moments& m, bool binary)
|
||||
return false;
|
||||
|
||||
UMat src = _src.getUMat();
|
||||
Size sz = src.size();
|
||||
int xtiles = (sz.width + TILE_SIZE-1)/TILE_SIZE;
|
||||
int ytiles = (sz.height + TILE_SIZE-1)/TILE_SIZE;
|
||||
int ntiles = xtiles*ytiles;
|
||||
UMat umbuf(1, ntiles*K, CV_32S);
|
||||
|
||||
size_t globalsize[] = {(size_t)xtiles, std::max((size_t)TILE_SIZE, (size_t)sz.height)};
|
||||
|
||||
@@ -1709,6 +1709,7 @@ void cv::sqrBoxFilter( InputArray _src, OutputArray _dst, int ddepth,
|
||||
|
||||
cv::Mat cv::getGaussianKernel( int n, double sigma, int ktype )
|
||||
{
|
||||
CV_Assert(n > 0);
|
||||
const int SMALL_GAUSSIAN_SIZE = 7;
|
||||
static const float small_gaussian_tab[][SMALL_GAUSSIAN_SIZE] =
|
||||
{
|
||||
@@ -1747,6 +1748,7 @@ cv::Mat cv::getGaussianKernel( int n, double sigma, int ktype )
|
||||
}
|
||||
}
|
||||
|
||||
CV_DbgAssert(fabs(sum) > 0);
|
||||
sum = 1./sum;
|
||||
for( i = 0; i < n; i++ )
|
||||
{
|
||||
@@ -5329,6 +5331,7 @@ public:
|
||||
wsum += w;
|
||||
}
|
||||
// overflow is not possible here => there is no need to use cv::saturate_cast
|
||||
CV_DbgAssert(fabs(wsum) > 0);
|
||||
dptr[j] = (uchar)cvRound(sum/wsum);
|
||||
}
|
||||
}
|
||||
@@ -5414,6 +5417,7 @@ public:
|
||||
sum_b += b*w; sum_g += g*w; sum_r += r*w;
|
||||
wsum += w;
|
||||
}
|
||||
CV_DbgAssert(fabs(wsum) > 0);
|
||||
wsum = 1.f/wsum;
|
||||
b0 = cvRound(sum_b*wsum);
|
||||
g0 = cvRound(sum_g*wsum);
|
||||
@@ -5673,6 +5677,7 @@ public:
|
||||
sum += val*w;
|
||||
wsum += w;
|
||||
}
|
||||
CV_DbgAssert(fabs(wsum) > 0);
|
||||
dptr[j] = (float)(sum/wsum);
|
||||
}
|
||||
}
|
||||
@@ -5763,6 +5768,7 @@ public:
|
||||
sum_b += b*w; sum_g += g*w; sum_r += r*w;
|
||||
wsum += w;
|
||||
}
|
||||
CV_DbgAssert(fabs(wsum) > 0);
|
||||
wsum = 1.f/wsum;
|
||||
b0 = sum_b*wsum;
|
||||
g0 = sum_g*wsum;
|
||||
|
||||
@@ -89,7 +89,6 @@ void CV_GrabcutTest::run( int /* start_from */)
|
||||
Mat exp_bgdModel, exp_fgdModel;
|
||||
|
||||
Mat mask;
|
||||
mask = Scalar(0);
|
||||
Mat bgdModel, fgdModel;
|
||||
grabCut( img, mask, rect, bgdModel, fgdModel, 0, GC_INIT_WITH_RECT );
|
||||
bgdModel.copyTo(exp_bgdModel);
|
||||
|
||||
@@ -186,7 +186,14 @@ void CV_MomentsTest::prepare_to_validation( int /*test_case_idx*/ )
|
||||
int i, y, x, cols = src.cols;
|
||||
double xc = 0., yc = 0.;
|
||||
|
||||
#if defined __GNUC__ && __GNUC__ >= 8
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wclass-memaccess"
|
||||
#endif
|
||||
memset( &m, 0, sizeof(m));
|
||||
#if defined __GNUC__ && __GNUC__ >= 8
|
||||
#pragma GCC diagnostic pop
|
||||
#endif
|
||||
|
||||
int coi = 0;
|
||||
for( y = 0; y < src.rows; y++ )
|
||||
|
||||
Reference in New Issue
Block a user