### Source Code
- @include cpp/tutorial_code/features2D/AKAZE_match.cpp
+ @add_toggle_cpp
+ - **Downloadable code**: Click
- [here](https://raw.githubusercontent.com/opencv/opencv/3.4/samples/cpp/tutorial_code/features2D/AKAZE_match.cpp)
++ [here](https://raw.githubusercontent.com/opencv/opencv/master/samples/cpp/tutorial_code/features2D/AKAZE_match.cpp)
+
+ - **Code at glance:**
+ @include samples/cpp/tutorial_code/features2D/AKAZE_match.cpp
+ @end_toggle
+
+ @add_toggle_java
+ - **Downloadable code**: Click
- [here](https://raw.githubusercontent.com/opencv/opencv/3.4/samples/java/tutorial_code/features2D/akaze_matching/AKAZEMatchDemo.java)
++ [here](https://raw.githubusercontent.com/opencv/opencv/master/samples/java/tutorial_code/features2D/akaze_matching/AKAZEMatchDemo.java)
+
+ - **Code at glance:**
+ @include samples/java/tutorial_code/features2D/akaze_matching/AKAZEMatchDemo.java
+ @end_toggle
+
+ @add_toggle_python
+ - **Downloadable code**: Click
- [here](https://raw.githubusercontent.com/opencv/opencv/3.4/samples/python/tutorial_code/features2D/akaze_matching/AKAZE_match.py)
++ [here](https://raw.githubusercontent.com/opencv/opencv/master/samples/python/tutorial_code/features2D/akaze_matching/AKAZE_match.py)
+
+ - **Code at glance:**
+ @include samples/python/tutorial_code/features2D/akaze_matching/AKAZE_match.py
+ @end_toggle
### Explanation
}
}
- bool cv::findChessboardCorners( InputArray _image, Size patternSize,
- OutputArray corners, int flags )
+ static int quiet_error(int /*status*/, const char* /*func_name*/,
+ const char* /*err_msg*/, const char* /*file_name*/,
+ int /*line*/, void* /*userdata*/)
{
- CV_INSTRUMENT_REGION()
-
- int count = patternSize.area()*2;
- std::vector<Point2f> tmpcorners(count+1);
- Mat image = _image.getMat(); CvMat c_image = image;
- bool ok = cvFindChessboardCorners(&c_image, patternSize,
- (CvPoint2D32f*)&tmpcorners[0], &count, flags ) > 0;
- if( count > 0 )
- {
- tmpcorners.resize(count);
- Mat(tmpcorners).copyTo(corners);
- }
- else
- corners.release();
- return ok;
- }
-
- namespace
- {
- int quiet_error(int /*status*/, const char* /*func_name*/,
- const char* /*err_msg*/, const char* /*file_name*/,
- int /*line*/, void* /*userdata*/ )
- {
- return 0;
- }
- }
-
- void cv::drawChessboardCorners( InputOutputArray _image, Size patternSize,
- InputArray _corners,
- bool patternWasFound )
- {
- CV_INSTRUMENT_REGION()
-
- Mat corners = _corners.getMat();
- if( corners.empty() )
- return;
- Mat image = _image.getMat(); CvMat c_image = image;
- int nelems = corners.checkVector(2, CV_32F, true);
- CV_Assert(nelems >= 0);
- cvDrawChessboardCorners( &c_image, patternSize, corners.ptr<CvPoint2D32f>(),
- nelems, patternWasFound );
+ return 0;
}
- bool cv::findCirclesGrid( InputArray _image, Size patternSize,
-bool findCirclesGrid(InputArray image, Size patternSize,
- OutputArray centers, int flags,
- const Ptr<FeatureDetector> &blobDetector,
- CirclesGridFinderParameters parameters)
-{
- CirclesGridFinderParameters2 parameters2;
- *((CirclesGridFinderParameters*)¶meters2) = parameters;
- return cv::findCirclesGrid2(image, patternSize, centers, flags, blobDetector, parameters2);
-}
-
-bool findCirclesGrid2(InputArray _image, Size patternSize,
- OutputArray _centers, int flags, const Ptr<FeatureDetector> &blobDetector,
- CirclesGridFinderParameters2 parameters)
++bool findCirclesGrid( InputArray _image, Size patternSize,
+ OutputArray _centers, int flags, const Ptr<FeatureDetector> &blobDetector,
+ const CirclesGridFinderParameters& parameters_)
{
CV_INSTRUMENT_REGION()
return false;
}
- bool cv::findCirclesGrid( InputArray _image, Size patternSize,
- OutputArray _centers, int flags, const Ptr<FeatureDetector> &blobDetector)
+ bool findCirclesGrid(InputArray _image, Size patternSize,
+ OutputArray _centers, int flags, const Ptr<FeatureDetector> &blobDetector)
{
- return cv::findCirclesGrid2(_image, patternSize, _centers, flags, blobDetector, CirclesGridFinderParameters2());
+ return cv::findCirclesGrid(_image, patternSize, _centers, flags, blobDetector, CirclesGridFinderParameters());
}
+ } // namespace
/* End of file. */
}
Cv64suf;
-#define OPENCV_ABI_COMPATIBILITY 300
+#define OPENCV_ABI_COMPATIBILITY 400
#ifdef __OPENCV_BUILD
-# define DISABLE_OPENCV_24_COMPATIBILITY
+# define DISABLE_OPENCV_3_COMPATIBILITY
+ # define OPENCV_DISABLE_DEPRECATED_COMPATIBILITY
#endif
#ifdef CVAPI_EXPORTS
CV_INSTRUMENT_REGION()
Mat src = _src.getMat();
- CV_Assert( src.type() == CV_8UC1 );
- int n = countNonZero(src);
- if( n == 0 )
+ CV_Assert( src.channels() == 1 && src.dims == 2 );
+
+ int depth = src.depth();
+ std::vector<Point> idxvec;
+ int rows = src.rows, cols = src.cols;
+ AutoBuffer<int> buf_(cols + 1);
- int* buf = buf_;
++ int* buf = buf_.data();
+
+ for( int i = 0; i < rows; i++ )
{
- _idx.release();
- return;
+ int j, k = 0;
+ const uchar* ptr8 = src.ptr(i);
+ if( depth == CV_8U || depth == CV_8S )
+ {
+ for( j = 0; j < cols; j++ )
+ if( ptr8[j] != 0 ) buf[k++] = j;
+ }
+ else if( depth == CV_16U || depth == CV_16S )
+ {
+ const ushort* ptr16 = (const ushort*)ptr8;
+ for( j = 0; j < cols; j++ )
+ if( ptr16[j] != 0 ) buf[k++] = j;
+ }
+ else if( depth == CV_32S )
+ {
+ const int* ptr32s = (const int*)ptr8;
+ for( j = 0; j < cols; j++ )
+ if( ptr32s[j] != 0 ) buf[k++] = j;
+ }
+ else if( depth == CV_32F )
+ {
+ const float* ptr32f = (const float*)ptr8;
+ for( j = 0; j < cols; j++ )
+ if( ptr32f[j] != 0 ) buf[k++] = j;
+ }
+ else
+ {
+ const double* ptr64f = (const double*)ptr8;
+ for( j = 0; j < cols; j++ )
+ if( ptr64f[j] != 0 ) buf[k++] = j;
+ }
+
+ if( k > 0 )
+ {
+ size_t sz = idxvec.size();
+ idxvec.resize(sz + k);
+ for( j = 0; j < k; j++ )
+ idxvec[sz + j] = Point(buf[j], i);
+ }
}
- if( _idx.kind() == _InputArray::MAT && !_idx.getMatRef().isContinuous() )
+
+ if( idxvec.empty() || (_idx.kind() == _InputArray::MAT && !_idx.getMatRef().isContinuous()) )
_idx.release();
- _idx.create(n, 1, CV_32SC2);
- Mat idx = _idx.getMat();
- CV_Assert(idx.isContinuous());
- Point* idx_ptr = idx.ptr<Point>();
- for( int i = 0; i < src.rows; i++ )
- {
- const uchar* bin_ptr = src.ptr(i);
- for( int j = 0; j < src.cols; j++ )
- if( bin_ptr[j] )
- *idx_ptr++ = Point(j, i);
- }
+ if( !idxvec.empty() )
+ Mat(idxvec).copyTo(_idx);
}
CV_Assert(depth == CV_8U);
dst.create(rows, cols, CV_MAKETYPE(DataType<deriv_type>::depth, cn*2));
-#ifdef HAVE_TEGRA_OPTIMIZATION
- if (tegra::useTegra() && tegra::calcSharrDeriv(src, dst))
- return;
-#endif
-
int x, y, delta = (int)alignSize((cols + 2)*cn, 16);
AutoBuffer<deriv_type> _tempBuf(delta*2 + 64);
- deriv_type *trow0 = alignPtr(_tempBuf + cn, 16), *trow1 = alignPtr(trow0 + delta, 16);
+ deriv_type *trow0 = alignPtr(_tempBuf.data() + cn, 16), *trow1 = alignPtr(trow0 + delta, 16);
#if CV_SIMD128
v_int16x8 c3 = v_setall_s16(3), c10 = v_setall_s16(10);