mirror of
https://github.com/opencv/opencv.git
synced 2024-12-05 01:39:13 +08:00
Merge remote-tracking branch 'upstream/3.4' into merge-3.4
This commit is contained in:
commit
ddcf388270
@ -32,6 +32,8 @@ endif()
|
|||||||
option(ENABLE_PIC "Generate position independent code (necessary for shared libraries)" TRUE)
|
option(ENABLE_PIC "Generate position independent code (necessary for shared libraries)" TRUE)
|
||||||
set(CMAKE_POSITION_INDEPENDENT_CODE ${ENABLE_PIC})
|
set(CMAKE_POSITION_INDEPENDENT_CODE ${ENABLE_PIC})
|
||||||
|
|
||||||
|
set(OPENCV_MATHJAX_RELPATH "https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0" CACHE STRING "URI to a MathJax installation")
|
||||||
|
|
||||||
# Following block can break build in case of cross-compiling
|
# Following block can break build in case of cross-compiling
|
||||||
# but CMAKE_CROSSCOMPILING variable will be set only on project(OpenCV) command
|
# but CMAKE_CROSSCOMPILING variable will be set only on project(OpenCV) command
|
||||||
# so we will try to detect cross-compiling by the presence of CMAKE_TOOLCHAIN_FILE
|
# so we will try to detect cross-compiling by the presence of CMAKE_TOOLCHAIN_FILE
|
||||||
|
@ -1,5 +1,17 @@
|
|||||||
#if defined __AVX512__ || defined __AVX512F__
|
#if defined __AVX512__ || defined __AVX512F__
|
||||||
#include <immintrin.h>
|
#include <immintrin.h>
|
||||||
|
|
||||||
|
// Workaround for problem with GCC 5-6 in -O0 mode
|
||||||
|
struct v_uint32x16
|
||||||
|
{
|
||||||
|
__m512i val;
|
||||||
|
explicit v_uint32x16(__m512i v) : val(v) {}
|
||||||
|
};
|
||||||
|
inline v_uint32x16 operator << (const v_uint32x16& a, int imm)
|
||||||
|
{
|
||||||
|
return v_uint32x16(_mm512_slli_epi32(a.val, imm));
|
||||||
|
}
|
||||||
|
|
||||||
void test()
|
void test()
|
||||||
{
|
{
|
||||||
__m512i zmm = _mm512_setzero_si512();
|
__m512i zmm = _mm512_setzero_si512();
|
||||||
@ -7,10 +19,13 @@ void test()
|
|||||||
__m256i b = _mm256_abs_epi64(a); // VL
|
__m256i b = _mm256_abs_epi64(a); // VL
|
||||||
__m512i c = _mm512_abs_epi8(zmm); // BW
|
__m512i c = _mm512_abs_epi8(zmm); // BW
|
||||||
__m512i d = _mm512_broadcast_i32x8(b); // DQ
|
__m512i d = _mm512_broadcast_i32x8(b); // DQ
|
||||||
|
v_uint32x16 e(d); e = e << 10;
|
||||||
|
__m512i f = _mm512_packus_epi32(d,d);
|
||||||
#if defined __GNUC__ && defined __x86_64__
|
#if defined __GNUC__ && defined __x86_64__
|
||||||
asm volatile ("" : : : "zmm16", "zmm17", "zmm18", "zmm19");
|
asm volatile ("" : : : "zmm16", "zmm17", "zmm18", "zmm19");
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#error "AVX512-SKX is not supported"
|
#error "AVX512-SKX is not supported"
|
||||||
#endif
|
#endif
|
||||||
|
@ -19,8 +19,6 @@ if(DOXYGEN_FOUND)
|
|||||||
unset(CMAKE_DOXYGEN_TUTORIAL_CONTRIB_ROOT)
|
unset(CMAKE_DOXYGEN_TUTORIAL_CONTRIB_ROOT)
|
||||||
unset(CMAKE_DOXYGEN_TUTORIAL_JS_ROOT)
|
unset(CMAKE_DOXYGEN_TUTORIAL_JS_ROOT)
|
||||||
|
|
||||||
set(OPENCV_MATHJAX_RELPATH "https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0" CACHE STRING "URI to a MathJax installation")
|
|
||||||
|
|
||||||
set(OPENCV_DOCS_EXCLUDE_CUDA ON)
|
set(OPENCV_DOCS_EXCLUDE_CUDA ON)
|
||||||
if(";${OPENCV_MODULES_EXTRA};" MATCHES ";cudev;")
|
if(";${OPENCV_MODULES_EXTRA};" MATCHES ";cudev;")
|
||||||
set(OPENCV_DOCS_EXCLUDE_CUDA OFF)
|
set(OPENCV_DOCS_EXCLUDE_CUDA OFF)
|
||||||
|
@ -546,15 +546,14 @@ CV_EXPORTS_W void matMulDeriv( InputArray A, InputArray B, OutputArray dABdA, Ou
|
|||||||
@param tvec2 Second translation vector.
|
@param tvec2 Second translation vector.
|
||||||
@param rvec3 Output rotation vector of the superposition.
|
@param rvec3 Output rotation vector of the superposition.
|
||||||
@param tvec3 Output translation vector of the superposition.
|
@param tvec3 Output translation vector of the superposition.
|
||||||
@param dr3dr1
|
@param dr3dr1 Optional output derivative of rvec3 with regard to rvec1
|
||||||
@param dr3dt1
|
@param dr3dt1 Optional output derivative of rvec3 with regard to tvec1
|
||||||
@param dr3dr2
|
@param dr3dr2 Optional output derivative of rvec3 with regard to rvec2
|
||||||
@param dr3dt2
|
@param dr3dt2 Optional output derivative of rvec3 with regard to tvec2
|
||||||
@param dt3dr1
|
@param dt3dr1 Optional output derivative of tvec3 with regard to rvec1
|
||||||
@param dt3dt1
|
@param dt3dt1 Optional output derivative of tvec3 with regard to tvec1
|
||||||
@param dt3dr2
|
@param dt3dr2 Optional output derivative of tvec3 with regard to rvec2
|
||||||
@param dt3dt2 Optional output derivatives of rvec3 or tvec3 with regard to rvec1, rvec2, tvec1 and
|
@param dt3dt2 Optional output derivative of tvec3 with regard to tvec2
|
||||||
tvec2, respectively.
|
|
||||||
|
|
||||||
The functions compute:
|
The functions compute:
|
||||||
|
|
||||||
@ -3129,7 +3128,7 @@ namespace fisheye
|
|||||||
@param D Input vector of distortion coefficients \f$(k_1, k_2, k_3, k_4)\f$.
|
@param D Input vector of distortion coefficients \f$(k_1, k_2, k_3, k_4)\f$.
|
||||||
@param Knew Camera matrix of the distorted image. By default, it is the identity matrix but you
|
@param Knew Camera matrix of the distorted image. By default, it is the identity matrix but you
|
||||||
may additionally scale and shift the result by using a different matrix.
|
may additionally scale and shift the result by using a different matrix.
|
||||||
@param new_size
|
@param new_size the new size
|
||||||
|
|
||||||
The function transforms an image to compensate radial and tangential lens distortion.
|
The function transforms an image to compensate radial and tangential lens distortion.
|
||||||
|
|
||||||
@ -3155,14 +3154,14 @@ namespace fisheye
|
|||||||
/** @brief Estimates new camera matrix for undistortion or rectification.
|
/** @brief Estimates new camera matrix for undistortion or rectification.
|
||||||
|
|
||||||
@param K Camera matrix \f$K = \vecthreethree{f_x}{0}{c_x}{0}{f_y}{c_y}{0}{0}{_1}\f$.
|
@param K Camera matrix \f$K = \vecthreethree{f_x}{0}{c_x}{0}{f_y}{c_y}{0}{0}{_1}\f$.
|
||||||
@param image_size
|
@param image_size Size of the image
|
||||||
@param D Input vector of distortion coefficients \f$(k_1, k_2, k_3, k_4)\f$.
|
@param D Input vector of distortion coefficients \f$(k_1, k_2, k_3, k_4)\f$.
|
||||||
@param R Rectification transformation in the object space: 3x3 1-channel, or vector: 3x1/1x3
|
@param R Rectification transformation in the object space: 3x3 1-channel, or vector: 3x1/1x3
|
||||||
1-channel or 1x1 3-channel
|
1-channel or 1x1 3-channel
|
||||||
@param P New camera matrix (3x3) or new projection matrix (3x4)
|
@param P New camera matrix (3x3) or new projection matrix (3x4)
|
||||||
@param balance Sets the new focal length in range between the min focal length and the max focal
|
@param balance Sets the new focal length in range between the min focal length and the max focal
|
||||||
length. Balance is in range of [0, 1].
|
length. Balance is in range of [0, 1].
|
||||||
@param new_size
|
@param new_size the new size
|
||||||
@param fov_scale Divisor for new focal length.
|
@param fov_scale Divisor for new focal length.
|
||||||
*/
|
*/
|
||||||
CV_EXPORTS_W void estimateNewCameraMatrixForUndistortRectify(InputArray K, InputArray D, const Size &image_size, InputArray R,
|
CV_EXPORTS_W void estimateNewCameraMatrixForUndistortRectify(InputArray K, InputArray D, const Size &image_size, InputArray R,
|
||||||
|
@ -72,7 +72,7 @@ public:
|
|||||||
// are geometrically consistent. We check if every 3 correspondences sets
|
// are geometrically consistent. We check if every 3 correspondences sets
|
||||||
// fulfills the constraint.
|
// fulfills the constraint.
|
||||||
//
|
//
|
||||||
// The usefullness of this constraint is explained in the paper:
|
// The usefulness of this constraint is explained in the paper:
|
||||||
//
|
//
|
||||||
// "Speeding-up homography estimation in mobile devices"
|
// "Speeding-up homography estimation in mobile devices"
|
||||||
// Journal of Real-Time Image Processing. 2013. DOI: 10.1007/s11554-012-0314-1
|
// Journal of Real-Time Image Processing. 2013. DOI: 10.1007/s11554-012-0314-1
|
||||||
|
@ -122,10 +122,10 @@ private:
|
|||||||
* For highest accuracy the Jacobian should be computed at the centroid of the point correspondences (see the IPPE paper for the explanation of this).
|
* For highest accuracy the Jacobian should be computed at the centroid of the point correspondences (see the IPPE paper for the explanation of this).
|
||||||
* For a point (ux,uy) on the object plane, suppose the homography H maps (ux,uy) to a point (p,q) in the image (in normalized pixel coordinates).
|
* For a point (ux,uy) on the object plane, suppose the homography H maps (ux,uy) to a point (p,q) in the image (in normalized pixel coordinates).
|
||||||
* The Jacobian matrix [J00, J01; J10,J11] is the Jacobian of the mapping evaluated at (ux,uy).
|
* The Jacobian matrix [J00, J01; J10,J11] is the Jacobian of the mapping evaluated at (ux,uy).
|
||||||
* @param j00 Homography jacobian coefficent at (ux,uy)
|
* @param j00 Homography jacobian coefficient at (ux,uy)
|
||||||
* @param j01 Homography jacobian coefficent at (ux,uy)
|
* @param j01 Homography jacobian coefficient at (ux,uy)
|
||||||
* @param j10 Homography jacobian coefficent at (ux,uy)
|
* @param j10 Homography jacobian coefficient at (ux,uy)
|
||||||
* @param j11 Homography jacobian coefficent at (ux,uy)
|
* @param j11 Homography jacobian coefficient at (ux,uy)
|
||||||
* @param p The x coordinate of point (ux,uy) mapped into the image (undistorted and normalized position)
|
* @param p The x coordinate of point (ux,uy) mapped into the image (undistorted and normalized position)
|
||||||
* @param q The y coordinate of point (ux,uy) mapped into the image (undistorted and normalized position)
|
* @param q The y coordinate of point (ux,uy) mapped into the image (undistorted and normalized position)
|
||||||
*/
|
*/
|
||||||
|
@ -145,7 +145,7 @@ protected:
|
|||||||
|
|
||||||
if (fail)
|
if (fail)
|
||||||
{
|
{
|
||||||
// commented according to vp123's recomendation. TODO - improve accuaracy
|
// commented according to vp123's recommendation. TODO - improve accuracy
|
||||||
//ts->set_failed_test_info(cvtest::TS::FAIL_BAD_ACCURACY); ss
|
//ts->set_failed_test_info(cvtest::TS::FAIL_BAD_ACCURACY); ss
|
||||||
}
|
}
|
||||||
ts->printf( cvtest::TS::LOG, "%d) DistCoeff exp=(%.2f, %.2f, %.4f, %.4f %.2f)\n", r, k1, k2, p1, p2, k3);
|
ts->printf( cvtest::TS::LOG, "%d) DistCoeff exp=(%.2f, %.2f, %.4f, %.4f %.2f)\n", r, k1, k2, p1, p2, k3);
|
||||||
|
@ -291,9 +291,9 @@ if src was not a ROI, use borderType | #BORDER_ISOLATED.
|
|||||||
@param src Source image.
|
@param src Source image.
|
||||||
@param dst Destination image of the same type as src and the size Size(src.cols+left+right,
|
@param dst Destination image of the same type as src and the size Size(src.cols+left+right,
|
||||||
src.rows+top+bottom) .
|
src.rows+top+bottom) .
|
||||||
@param top
|
@param top the top pixels
|
||||||
@param bottom
|
@param bottom the bottom pixels
|
||||||
@param left
|
@param left the left pixels
|
||||||
@param right Parameter specifying how many pixels in each direction from the source image rectangle
|
@param right Parameter specifying how many pixels in each direction from the source image rectangle
|
||||||
to extrapolate. For example, top=1, bottom=1, left=1, right=1 mean that 1 pixel-wide border needs
|
to extrapolate. For example, top=1, bottom=1, left=1, right=1 mean that 1 pixel-wide border needs
|
||||||
to be built.
|
to be built.
|
||||||
|
@ -579,7 +579,7 @@ CvNArrayIterator;
|
|||||||
#define CV_NO_CN_CHECK 2
|
#define CV_NO_CN_CHECK 2
|
||||||
#define CV_NO_SIZE_CHECK 4
|
#define CV_NO_SIZE_CHECK 4
|
||||||
|
|
||||||
/** initializes iterator that traverses through several arrays simulteneously
|
/** initializes iterator that traverses through several arrays simultaneously
|
||||||
(the function together with cvNextArraySlice is used for
|
(the function together with cvNextArraySlice is used for
|
||||||
N-ari element-wise operations) */
|
N-ari element-wise operations) */
|
||||||
CVAPI(int) cvInitNArrayIterator( int count, CvArr** arrs,
|
CVAPI(int) cvInitNArrayIterator( int count, CvArr** arrs,
|
||||||
|
@ -357,10 +357,10 @@ Cv64suf;
|
|||||||
# define OPENCV_DISABLE_DEPRECATED_COMPATIBILITY
|
# define OPENCV_DISABLE_DEPRECATED_COMPATIBILITY
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CVAPI_EXPORTS
|
#ifndef CV_EXPORTS
|
||||||
# if (defined _WIN32 || defined WINCE || defined __CYGWIN__)
|
# if (defined _WIN32 || defined WINCE || defined __CYGWIN__) && defined(CVAPI_EXPORTS)
|
||||||
# define CV_EXPORTS __declspec(dllexport)
|
# define CV_EXPORTS __declspec(dllexport)
|
||||||
# elif defined __GNUC__ && __GNUC__ >= 4
|
# elif defined __GNUC__ && __GNUC__ >= 4 && (defined(CVAPI_EXPORTS) || defined(__APPLE__))
|
||||||
# define CV_EXPORTS __attribute__ ((visibility ("default")))
|
# define CV_EXPORTS __attribute__ ((visibility ("default")))
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
@ -398,7 +398,7 @@ inline unsigned RNG::next()
|
|||||||
return (unsigned)state;
|
return (unsigned)state;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! returns the next unifomly-distributed random number of the specified type
|
//! returns the next uniformly-distributed random number of the specified type
|
||||||
template<typename _Tp> static inline _Tp randu()
|
template<typename _Tp> static inline _Tp randu()
|
||||||
{
|
{
|
||||||
return (_Tp)theRNG();
|
return (_Tp)theRNG();
|
||||||
|
@ -219,10 +219,10 @@ converge to it. Another obvious restriction is that it should be possible to com
|
|||||||
a function at any point, thus it is preferable to have analytic expression for gradient and
|
a function at any point, thus it is preferable to have analytic expression for gradient and
|
||||||
computational burden should be born by the user.
|
computational burden should be born by the user.
|
||||||
|
|
||||||
The latter responsibility is accompilished via the getGradient method of a
|
The latter responsibility is accomplished via the getGradient method of a
|
||||||
MinProblemSolver::Function interface (which represents function being optimized). This method takes
|
MinProblemSolver::Function interface (which represents function being optimized). This method takes
|
||||||
point a point in *n*-dimensional space (first argument represents the array of coordinates of that
|
point a point in *n*-dimensional space (first argument represents the array of coordinates of that
|
||||||
point) and comput its gradient (it should be stored in the second argument as an array).
|
point) and compute its gradient (it should be stored in the second argument as an array).
|
||||||
|
|
||||||
@note class ConjGradSolver thus does not add any new methods to the basic MinProblemSolver interface.
|
@note class ConjGradSolver thus does not add any new methods to the basic MinProblemSolver interface.
|
||||||
|
|
||||||
|
@ -3368,7 +3368,7 @@ cvTreeToNodeSeq( const void* first, int header_size, CvMemStorage* storage )
|
|||||||
|
|
||||||
typedef struct CvTreeNode
|
typedef struct CvTreeNode
|
||||||
{
|
{
|
||||||
int flags; /* micsellaneous flags */
|
int flags; /* miscellaneous flags */
|
||||||
int header_size; /* size of sequence header */
|
int header_size; /* size of sequence header */
|
||||||
struct CvTreeNode* h_prev; /* previous sequence */
|
struct CvTreeNode* h_prev; /* previous sequence */
|
||||||
struct CvTreeNode* h_next; /* next sequence */
|
struct CvTreeNode* h_next; /* next sequence */
|
||||||
|
@ -422,7 +422,7 @@ void log64f(const double *src, double *dst, int n)
|
|||||||
|
|
||||||
#define EXPPOLY_32F_A0 .9670371139572337719125840413672004409288e-2
|
#define EXPPOLY_32F_A0 .9670371139572337719125840413672004409288e-2
|
||||||
|
|
||||||
// the code below uses _mm_cast* intrinsics, which are not avialable on VS2005
|
// the code below uses _mm_cast* intrinsics, which are not available on VS2005
|
||||||
#if (defined _MSC_VER && _MSC_VER < 1500) || \
|
#if (defined _MSC_VER && _MSC_VER < 1500) || \
|
||||||
(!defined __APPLE__ && defined __GNUC__ && __GNUC__*100 + __GNUC_MINOR__ < 402)
|
(!defined __APPLE__ && defined __GNUC__ && __GNUC__*100 + __GNUC_MINOR__ < 402)
|
||||||
#undef CV_SSE2
|
#undef CV_SSE2
|
||||||
|
@ -341,7 +341,7 @@ public:
|
|||||||
but it is a little faster to compute.
|
but it is a little faster to compute.
|
||||||
@param patchSize size of the patch used by the oriented BRIEF descriptor. Of course, on smaller
|
@param patchSize size of the patch used by the oriented BRIEF descriptor. Of course, on smaller
|
||||||
pyramid layers the perceived image area covered by a feature will be larger.
|
pyramid layers the perceived image area covered by a feature will be larger.
|
||||||
@param fastThreshold
|
@param fastThreshold the fast threshold
|
||||||
*/
|
*/
|
||||||
CV_WRAP static Ptr<ORB> create(int nfeatures=500, float scaleFactor=1.2f, int nlevels=8, int edgeThreshold=31,
|
CV_WRAP static Ptr<ORB> create(int nfeatures=500, float scaleFactor=1.2f, int nlevels=8, int edgeThreshold=31,
|
||||||
int firstLevel=0, int WTA_K=2, ORB::ScoreType scoreType=ORB::HARRIS_SCORE, int patchSize=31, int fastThreshold=20);
|
int firstLevel=0, int WTA_K=2, ORB::ScoreType scoreType=ORB::HARRIS_SCORE, int patchSize=31, int fastThreshold=20);
|
||||||
|
@ -1,7 +1,4 @@
|
|||||||
{
|
{
|
||||||
"class_ignore_list" : [
|
|
||||||
"SimpleBlobDetector"
|
|
||||||
],
|
|
||||||
"type_dict" : {
|
"type_dict" : {
|
||||||
"Feature2D": {
|
"Feature2D": {
|
||||||
"j_type": "Feature2D",
|
"j_type": "Feature2D",
|
||||||
|
@ -1,11 +1,62 @@
|
|||||||
package org.opencv.test.features2d;
|
package org.opencv.test.features2d;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
import org.opencv.core.CvType;
|
||||||
|
import org.opencv.core.Mat;
|
||||||
|
import org.opencv.core.MatOfKeyPoint;
|
||||||
|
import org.opencv.core.Point;
|
||||||
|
import org.opencv.core.Scalar;
|
||||||
|
import org.opencv.core.KeyPoint;
|
||||||
import org.opencv.test.OpenCVTestCase;
|
import org.opencv.test.OpenCVTestCase;
|
||||||
|
import org.opencv.test.OpenCVTestRunner;
|
||||||
|
import org.opencv.imgproc.Imgproc;
|
||||||
|
import org.opencv.features2d.Feature2D;
|
||||||
|
import org.opencv.features2d.SimpleBlobDetector;
|
||||||
|
|
||||||
public class SIMPLEBLOBFeatureDetectorTest extends OpenCVTestCase {
|
public class SIMPLEBLOBFeatureDetectorTest extends OpenCVTestCase {
|
||||||
|
|
||||||
|
Feature2D detector;
|
||||||
|
int matSize;
|
||||||
|
KeyPoint[] truth;
|
||||||
|
|
||||||
|
private Mat getMaskImg() {
|
||||||
|
Mat mask = new Mat(matSize, matSize, CvType.CV_8U, new Scalar(255));
|
||||||
|
Mat right = mask.submat(0, matSize, matSize / 2, matSize);
|
||||||
|
right.setTo(new Scalar(0));
|
||||||
|
return mask;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Mat getTestImg() {
|
||||||
|
|
||||||
|
int center = matSize / 2;
|
||||||
|
int offset = 40;
|
||||||
|
|
||||||
|
Mat img = new Mat(matSize, matSize, CvType.CV_8U, new Scalar(255));
|
||||||
|
Imgproc.circle(img, new Point(center - offset, center), 24, new Scalar(0), -1);
|
||||||
|
Imgproc.circle(img, new Point(center + offset, center), 20, new Scalar(50), -1);
|
||||||
|
Imgproc.circle(img, new Point(center, center - offset), 18, new Scalar(100), -1);
|
||||||
|
Imgproc.circle(img, new Point(center, center + offset), 14, new Scalar(150), -1);
|
||||||
|
Imgproc.circle(img, new Point(center, center), 10, new Scalar(200), -1);
|
||||||
|
return img;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void setUp() throws Exception {
|
||||||
|
super.setUp();
|
||||||
|
detector = SimpleBlobDetector.create();
|
||||||
|
matSize = 200;
|
||||||
|
truth = new KeyPoint[] {
|
||||||
|
new KeyPoint( 140, 100, 41.036568f, -1, 0, 0, -1),
|
||||||
|
new KeyPoint( 60, 100, 48.538486f, -1, 0, 0, -1),
|
||||||
|
new KeyPoint(100, 60, 36.769554f, -1, 0, 0, -1),
|
||||||
|
new KeyPoint(100, 140, 28.635643f, -1, 0, 0, -1),
|
||||||
|
new KeyPoint(100, 100, 20.880613f, -1, 0, 0, -1)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
public void testCreate() {
|
public void testCreate() {
|
||||||
fail("Not yet implemented");
|
assertNotNull(detector);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testDetectListOfMatListOfListOfKeyPoint() {
|
public void testDetectListOfMatListOfListOfKeyPoint() {
|
||||||
@ -17,23 +68,51 @@ public class SIMPLEBLOBFeatureDetectorTest extends OpenCVTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void testDetectMatListOfKeyPoint() {
|
public void testDetectMatListOfKeyPoint() {
|
||||||
fail("Not yet implemented");
|
Mat img = getTestImg();
|
||||||
|
MatOfKeyPoint keypoints = new MatOfKeyPoint();
|
||||||
|
|
||||||
|
detector.detect(img, keypoints);
|
||||||
|
|
||||||
|
assertListKeyPointEquals(Arrays.asList(truth), keypoints.toList(), EPS);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testDetectMatListOfKeyPointMat() {
|
public void testDetectMatListOfKeyPointMat() {
|
||||||
fail("Not yet implemented");
|
Mat img = getTestImg();
|
||||||
|
Mat mask = getMaskImg();
|
||||||
|
MatOfKeyPoint keypoints = new MatOfKeyPoint();
|
||||||
|
|
||||||
|
detector.detect(img, keypoints, mask);
|
||||||
|
|
||||||
|
assertListKeyPointEquals(Arrays.asList(truth[1]), keypoints.toList(), EPS);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testEmpty() {
|
public void testEmpty() {
|
||||||
|
// assertFalse(detector.empty());
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testRead() {
|
public void testRead() {
|
||||||
fail("Not yet implemented");
|
Mat img = getTestImg();
|
||||||
|
|
||||||
|
MatOfKeyPoint keypoints1 = new MatOfKeyPoint();
|
||||||
|
detector.detect(img, keypoints1);
|
||||||
|
|
||||||
|
String filename = OpenCVTestRunner.getTempFileName("yml");
|
||||||
|
writeFile(filename, "%YAML:1.0\nthresholdStep: 10\nminThreshold: 50\nmaxThreshold: 220\nminRepeatability: 2\nfilterByArea: true\nminArea: 800\nmaxArea: 5000\n");
|
||||||
|
detector.read(filename);
|
||||||
|
|
||||||
|
MatOfKeyPoint keypoints2 = new MatOfKeyPoint();
|
||||||
|
detector.detect(img, keypoints2);
|
||||||
|
|
||||||
|
assertTrue(keypoints2.total() <= keypoints1.total());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testWrite() {
|
public void testWrite() {
|
||||||
fail("Not yet implemented");
|
String filename = OpenCVTestRunner.getTempFileName("xml");
|
||||||
}
|
|
||||||
|
|
||||||
|
detector.write(filename);
|
||||||
|
|
||||||
|
String truth = "<?xml version=\"1.0\"?>\n<opencv_storage>\n<format>3</format>\n<thresholdStep>10.</thresholdStep>\n<minThreshold>50.</minThreshold>\n<maxThreshold>220.</maxThreshold>\n<minRepeatability>2</minRepeatability>\n<minDistBetweenBlobs>10.</minDistBetweenBlobs>\n<filterByColor>1</filterByColor>\n<blobColor>0</blobColor>\n<filterByArea>1</filterByArea>\n<minArea>25.</minArea>\n<maxArea>5000.</maxArea>\n<filterByCircularity>0</filterByCircularity>\n<minCircularity>8.0000001192092896e-01</minCircularity>\n<maxCircularity>3.4028234663852886e+38</maxCircularity>\n<filterByInertia>1</filterByInertia>\n<minInertiaRatio>1.0000000149011612e-01</minInertiaRatio>\n<maxInertiaRatio>3.4028234663852886e+38</maxInertiaRatio>\n<filterByConvexity>1</filterByConvexity>\n<minConvexity>9.4999998807907104e-01</minConvexity>\n<maxConvexity>3.4028234663852886e+38</maxConvexity>\n</opencv_storage>\n";
|
||||||
|
assertEquals(truth, readFile(filename));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -215,7 +215,7 @@ size_t ExifReader::getFieldSize ()
|
|||||||
* @brief Filling m_exif member with exif directory elements
|
* @brief Filling m_exif member with exif directory elements
|
||||||
* This is internal function and is not exposed to client
|
* This is internal function and is not exposed to client
|
||||||
*
|
*
|
||||||
* @return The function doesn't return any value. In case of unsiccessful parsing
|
* @return The function doesn't return any value. In case of unsuccessful parsing
|
||||||
* the m_exif member is not filled up
|
* the m_exif member is not filled up
|
||||||
*/
|
*/
|
||||||
void ExifReader::parseExif()
|
void ExifReader::parseExif()
|
||||||
|
@ -51,7 +51,7 @@
|
|||||||
// developed by Greg Ward. It handles the conversions between rgbe and
|
// developed by Greg Ward. It handles the conversions between rgbe and
|
||||||
// pixels consisting of floats. The data is assumed to be an array of floats.
|
// pixels consisting of floats. The data is assumed to be an array of floats.
|
||||||
// By default there are three floats per pixel in the order red, green, blue.
|
// By default there are three floats per pixel in the order red, green, blue.
|
||||||
// (RGBE_DATA_??? values control this.) Only the mimimal header reading and
|
// (RGBE_DATA_??? values control this.) Only the minimal header reading and
|
||||||
// writing is implemented. Each routine does error checking and will return
|
// writing is implemented. Each routine does error checking and will return
|
||||||
// a status value as defined below. This code is intended as a skeleton so
|
// a status value as defined below. This code is intended as a skeleton so
|
||||||
// feel free to modify it to suit your needs.
|
// feel free to modify it to suit your needs.
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
import sys, re, os.path, errno, fnmatch
|
import sys, re, os.path, errno, fnmatch
|
||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
|
import codecs
|
||||||
from shutil import copyfile
|
from shutil import copyfile
|
||||||
from pprint import pformat
|
from pprint import pformat
|
||||||
from string import Template
|
from string import Template
|
||||||
@ -10,7 +11,12 @@ from string import Template
|
|||||||
if sys.version_info[0] >= 3:
|
if sys.version_info[0] >= 3:
|
||||||
from io import StringIO
|
from io import StringIO
|
||||||
else:
|
else:
|
||||||
from cStringIO import StringIO
|
import io
|
||||||
|
class StringIO(io.StringIO):
|
||||||
|
def write(self, s):
|
||||||
|
if isinstance(s, str):
|
||||||
|
s = unicode(s) # noqa: F821
|
||||||
|
return super(StringIO, self).write(s)
|
||||||
|
|
||||||
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
|
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
|
||||||
|
|
||||||
@ -114,14 +120,19 @@ class GeneralInfo():
|
|||||||
self.params={}
|
self.params={}
|
||||||
self.annotation=[]
|
self.annotation=[]
|
||||||
if type == "class":
|
if type == "class":
|
||||||
docstring="// C++: class " + self.name + "\n//javadoc: " + self.name
|
docstring="// C++: class " + self.name + "\n"
|
||||||
else:
|
else:
|
||||||
docstring=""
|
docstring=""
|
||||||
|
|
||||||
if len(decl)>5 and decl[5]:
|
if len(decl)>5 and decl[5]:
|
||||||
#logging.info('docstring: %s', decl[5])
|
doc = decl[5]
|
||||||
if re.search("(@|\\\\)deprecated", decl[5]):
|
|
||||||
|
#logging.info('docstring: %s', doc)
|
||||||
|
if re.search("(@|\\\\)deprecated", doc):
|
||||||
self.annotation.append("@Deprecated")
|
self.annotation.append("@Deprecated")
|
||||||
|
|
||||||
|
docstring += sanitize_java_documentation_string(doc, type)
|
||||||
|
|
||||||
self.docstring = docstring
|
self.docstring = docstring
|
||||||
|
|
||||||
def parseName(self, name, namespaces):
|
def parseName(self, name, namespaces):
|
||||||
@ -272,7 +283,7 @@ class ClassInfo(GeneralInfo):
|
|||||||
def initCodeStreams(self, Module):
|
def initCodeStreams(self, Module):
|
||||||
self.j_code = StringIO()
|
self.j_code = StringIO()
|
||||||
self.jn_code = StringIO()
|
self.jn_code = StringIO()
|
||||||
self.cpp_code = StringIO();
|
self.cpp_code = StringIO()
|
||||||
if self.base:
|
if self.base:
|
||||||
self.j_code.write(T_JAVA_START_INHERITED)
|
self.j_code.write(T_JAVA_START_INHERITED)
|
||||||
else:
|
else:
|
||||||
@ -302,7 +313,7 @@ class ClassInfo(GeneralInfo):
|
|||||||
jname = self.jname,
|
jname = self.jname,
|
||||||
imports = "\n".join(self.getAllImports(M)),
|
imports = "\n".join(self.getAllImports(M)),
|
||||||
docs = self.docstring,
|
docs = self.docstring,
|
||||||
annotation = "\n".join(self.annotation),
|
annotation = "\n" + "\n".join(self.annotation) if self.annotation else "",
|
||||||
base = self.base)
|
base = self.base)
|
||||||
|
|
||||||
def generateCppCode(self):
|
def generateCppCode(self):
|
||||||
@ -490,7 +501,7 @@ class JavaWrapperGenerator(object):
|
|||||||
content = f.read()
|
content = f.read()
|
||||||
if content == buf:
|
if content == buf:
|
||||||
return
|
return
|
||||||
with open(path, "wt") as f:
|
with codecs.open(path, "w", "utf-8") as f:
|
||||||
f.write(buf)
|
f.write(buf)
|
||||||
updated_files += 1
|
updated_files += 1
|
||||||
|
|
||||||
@ -504,7 +515,7 @@ class JavaWrapperGenerator(object):
|
|||||||
self.add_class( ['class ' + self.Module, '', [], []] ) # [ 'class/struct cname', ':bases', [modlist] [props] ]
|
self.add_class( ['class ' + self.Module, '', [], []] ) # [ 'class/struct cname', ':bases', [modlist] [props] ]
|
||||||
|
|
||||||
# scan the headers and build more descriptive maps of classes, consts, functions
|
# scan the headers and build more descriptive maps of classes, consts, functions
|
||||||
includes = [];
|
includes = []
|
||||||
for hdr in common_headers:
|
for hdr in common_headers:
|
||||||
logging.info("\n===== Common header : %s =====", hdr)
|
logging.info("\n===== Common header : %s =====", hdr)
|
||||||
includes.append('#include "' + hdr + '"')
|
includes.append('#include "' + hdr + '"')
|
||||||
@ -723,7 +734,7 @@ class JavaWrapperGenerator(object):
|
|||||||
fi.jname + "(" + ", ".join(j_args) + ")"
|
fi.jname + "(" + ", ".join(j_args) + ")"
|
||||||
logging.info("java: " + j_signature)
|
logging.info("java: " + j_signature)
|
||||||
|
|
||||||
if(j_signature in j_signatures):
|
if j_signature in j_signatures:
|
||||||
if args:
|
if args:
|
||||||
args.pop()
|
args.pop()
|
||||||
continue
|
continue
|
||||||
@ -739,20 +750,51 @@ class JavaWrapperGenerator(object):
|
|||||||
type = type_dict[fi.ctype].get("jn_type", "double[]"),
|
type = type_dict[fi.ctype].get("jn_type", "double[]"),
|
||||||
name = fi.jname + '_' + str(suffix_counter),
|
name = fi.jname + '_' + str(suffix_counter),
|
||||||
args = ", ".join(["%s %s" % (type_dict[a.ctype]["jn_type"], normalize_field_name(a.name)) for a in jn_args])
|
args = ", ".join(["%s %s" % (type_dict[a.ctype]["jn_type"], normalize_field_name(a.name)) for a in jn_args])
|
||||||
) );
|
) )
|
||||||
|
|
||||||
# java part:
|
# java part:
|
||||||
|
|
||||||
#java doc comment
|
#java doc comment
|
||||||
f_name = fi.jname
|
|
||||||
if fi.classname:
|
|
||||||
f_name = fi.classname + "::" + fi.jname
|
|
||||||
java_doc = "//javadoc: " + f_name + "(%s)" % ", ".join([a.name for a in args if a.ctype])
|
|
||||||
j_code.write(" "*4 + java_doc + "\n")
|
|
||||||
|
|
||||||
if fi.docstring:
|
if fi.docstring:
|
||||||
lines = StringIO(fi.docstring)
|
lines = fi.docstring.splitlines()
|
||||||
for line in lines:
|
returnTag = False
|
||||||
|
javadocParams = []
|
||||||
|
toWrite = []
|
||||||
|
inCode = False
|
||||||
|
for index, line in enumerate(lines):
|
||||||
|
p0 = line.find("@param")
|
||||||
|
if p0 != -1:
|
||||||
|
p0 += 7
|
||||||
|
p1 = line.find(' ', p0)
|
||||||
|
p1 = len(line) if p1 == -1 else p1
|
||||||
|
name = line[p0:p1]
|
||||||
|
javadocParams.append(name)
|
||||||
|
for arg in j_args:
|
||||||
|
if arg.endswith(" " + name):
|
||||||
|
toWrite.append(line);
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
if "<code>" in line:
|
||||||
|
inCode = True
|
||||||
|
if "</code>" in line:
|
||||||
|
inCode = False
|
||||||
|
if "@return " in line:
|
||||||
|
returnTag = True
|
||||||
|
|
||||||
|
if (not inCode and toWrite and not toWrite[-1] and
|
||||||
|
line and not line.startswith("\\") and not line.startswith("<ul>") and not line.startswith("@param")):
|
||||||
|
toWrite.append("<p>");
|
||||||
|
|
||||||
|
if index == len(lines) - 1:
|
||||||
|
for arg in j_args:
|
||||||
|
name = arg[arg.rfind(' ') + 1:]
|
||||||
|
if not name in javadocParams:
|
||||||
|
toWrite.append(" * @param " + name + " automatically generated");
|
||||||
|
if type_dict[fi.ctype]["j_type"] and not returnTag and fi.ctype != "void":
|
||||||
|
toWrite.append(" * @return automatically generated");
|
||||||
|
toWrite.append(line);
|
||||||
|
|
||||||
|
for line in toWrite:
|
||||||
j_code.write(" "*4 + line + "\n")
|
j_code.write(" "*4 + line + "\n")
|
||||||
if fi.annotation:
|
if fi.annotation:
|
||||||
j_code.write(" "*4 + "\n".join(fi.annotation) + "\n")
|
j_code.write(" "*4 + "\n".join(fi.annotation) + "\n")
|
||||||
@ -779,7 +821,7 @@ class JavaWrapperGenerator(object):
|
|||||||
j_epilogue.append('Converters.Mat_to_' + ret_type + '(retValMat, retVal);')
|
j_epilogue.append('Converters.Mat_to_' + ret_type + '(retValMat, retVal);')
|
||||||
ret = "return retVal;"
|
ret = "return retVal;"
|
||||||
elif ret_type.startswith("Ptr_"):
|
elif ret_type.startswith("Ptr_"):
|
||||||
constructor = type_dict[ret_type]["j_type"] + ".__fromPtr__(";
|
constructor = type_dict[ret_type]["j_type"] + ".__fromPtr__("
|
||||||
if j_epilogue:
|
if j_epilogue:
|
||||||
ret_val = type_dict[fi.ctype]["j_type"] + " retVal = " + constructor
|
ret_val = type_dict[fi.ctype]["j_type"] + " retVal = " + constructor
|
||||||
else:
|
else:
|
||||||
@ -796,14 +838,14 @@ class JavaWrapperGenerator(object):
|
|||||||
ret_val = "nativeObj = "
|
ret_val = "nativeObj = "
|
||||||
ret = ""
|
ret = ""
|
||||||
elif self.isWrapped(ret_type): # wrapped class
|
elif self.isWrapped(ret_type): # wrapped class
|
||||||
constructor = self.getClass(ret_type).jname + "(";
|
constructor = self.getClass(ret_type).jname + "("
|
||||||
if j_epilogue:
|
if j_epilogue:
|
||||||
ret_val = type_dict[ret_type]["j_type"] + " retVal = new " + constructor
|
ret_val = type_dict[ret_type]["j_type"] + " retVal = new " + constructor
|
||||||
else:
|
else:
|
||||||
ret_val = "return new " + constructor
|
ret_val = "return new " + constructor
|
||||||
tail = ")"
|
tail = ")"
|
||||||
elif "jn_type" not in type_dict[ret_type]:
|
elif "jn_type" not in type_dict[ret_type]:
|
||||||
constructor = type_dict[ret_type]["j_type"] + "(";
|
constructor = type_dict[ret_type]["j_type"] + "("
|
||||||
if j_epilogue:
|
if j_epilogue:
|
||||||
ret_val = type_dict[fi.ctype]["j_type"] + " retVal = new " + constructor
|
ret_val = type_dict[fi.ctype]["j_type"] + " retVal = new " + constructor
|
||||||
else:
|
else:
|
||||||
@ -827,7 +869,7 @@ class JavaWrapperGenerator(object):
|
|||||||
prologue = "\n " + "\n ".join(j_prologue) if j_prologue else "",
|
prologue = "\n " + "\n ".join(j_prologue) if j_prologue else "",
|
||||||
epilogue = "\n " + "\n ".join(j_epilogue) if j_epilogue else "",
|
epilogue = "\n " + "\n ".join(j_epilogue) if j_epilogue else "",
|
||||||
static = static + " " if static else "",
|
static = static + " " if static else "",
|
||||||
j_type=type_dict[fi.ctype]["j_type"],
|
j_type=type_dict[fi.ctype]["j_type"] + " " if type_dict[fi.ctype]["j_type"] else "",
|
||||||
j_name=fi.jname,
|
j_name=fi.jname,
|
||||||
j_args=", ".join(j_args),
|
j_args=", ".join(j_args),
|
||||||
jn_name=fi.jname + '_' + str(suffix_counter),
|
jn_name=fi.jname + '_' + str(suffix_counter),
|
||||||
@ -1140,6 +1182,122 @@ def copy_java_files(java_files_dir, java_base_path, default_package_path='org/op
|
|||||||
copyfile(src, dest)
|
copyfile(src, dest)
|
||||||
updated_files += 1
|
updated_files += 1
|
||||||
|
|
||||||
|
def sanitize_java_documentation_string(doc, type):
|
||||||
|
if type == "class":
|
||||||
|
doc = doc.replace("@param ", "")
|
||||||
|
|
||||||
|
doc = re.sub(re.compile('\\\\f\\$(.*?)\\\\f\\$', re.DOTALL), '\\(' + r'\1' + '\\)', doc)
|
||||||
|
doc = re.sub(re.compile('\\\\f\\[(.*?)\\\\f\\]', re.DOTALL), '\\(' + r'\1' + '\\)', doc)
|
||||||
|
doc = re.sub(re.compile('\\\\f\\{(.*?)\\\\f\\}', re.DOTALL), '\\(' + r'\1' + '\\)', doc)
|
||||||
|
|
||||||
|
doc = doc.replace("&", "&") \
|
||||||
|
.replace("\\<", "<") \
|
||||||
|
.replace("\\>", ">") \
|
||||||
|
.replace("<", "<") \
|
||||||
|
.replace(">", ">") \
|
||||||
|
.replace("$", "$$") \
|
||||||
|
.replace("@anchor", "") \
|
||||||
|
.replace("@brief ", "").replace("\\brief ", "") \
|
||||||
|
.replace("@cite", "CITE:") \
|
||||||
|
.replace("@code{.cpp}", "<code>") \
|
||||||
|
.replace("@code{.txt}", "<code>") \
|
||||||
|
.replace("@code", "<code>") \
|
||||||
|
.replace("@copydoc", "") \
|
||||||
|
.replace("@copybrief", "") \
|
||||||
|
.replace("@date", "") \
|
||||||
|
.replace("@defgroup", "") \
|
||||||
|
.replace("@details ", "") \
|
||||||
|
.replace("@endcode", "</code>") \
|
||||||
|
.replace("@endinternal", "") \
|
||||||
|
.replace("@file", "") \
|
||||||
|
.replace("@include", "INCLUDE:") \
|
||||||
|
.replace("@ingroup", "") \
|
||||||
|
.replace("@internal", "") \
|
||||||
|
.replace("@overload", "") \
|
||||||
|
.replace("@param[in]", "@param") \
|
||||||
|
.replace("@param[out]", "@param") \
|
||||||
|
.replace("@ref", "REF:") \
|
||||||
|
.replace("@returns", "@return") \
|
||||||
|
.replace("@sa", "SEE:") \
|
||||||
|
.replace("@see", "SEE:") \
|
||||||
|
.replace("@snippet", "SNIPPET:") \
|
||||||
|
.replace("@todo", "TODO:") \
|
||||||
|
.replace("@warning ", "WARNING: ")
|
||||||
|
|
||||||
|
doc = re.sub(re.compile('\\*\\*([^\\*]+?)\\*\\*', re.DOTALL), '<b>' + r'\1' + '</b>', doc)
|
||||||
|
|
||||||
|
lines = doc.splitlines()
|
||||||
|
|
||||||
|
lines = list(map(lambda x: x[x.find('*'):].strip() if x.lstrip().startswith("*") else x, lines))
|
||||||
|
|
||||||
|
listInd = [];
|
||||||
|
indexDiff = 0;
|
||||||
|
for index, line in enumerate(lines[:]):
|
||||||
|
if line.strip().startswith("-"):
|
||||||
|
i = line.find("-")
|
||||||
|
if not listInd or i > listInd[-1]:
|
||||||
|
lines.insert(index + indexDiff, " "*len(listInd) + "<ul>")
|
||||||
|
indexDiff += 1
|
||||||
|
listInd.append(i);
|
||||||
|
lines.insert(index + indexDiff, " "*len(listInd) + "<li>")
|
||||||
|
indexDiff += 1
|
||||||
|
elif i == listInd[-1]:
|
||||||
|
lines.insert(index + indexDiff, " "*len(listInd) + "</li>")
|
||||||
|
indexDiff += 1
|
||||||
|
lines.insert(index + indexDiff, " "*len(listInd) + "<li>")
|
||||||
|
indexDiff += 1
|
||||||
|
elif len(listInd) > 1 and i == listInd[-2]:
|
||||||
|
lines.insert(index + indexDiff, " "*len(listInd) + "</li>")
|
||||||
|
indexDiff += 1
|
||||||
|
del listInd[-1]
|
||||||
|
lines.insert(index + indexDiff, " "*len(listInd) + "</ul>")
|
||||||
|
indexDiff += 1
|
||||||
|
lines.insert(index + indexDiff, " "*len(listInd) + "<li>")
|
||||||
|
indexDiff += 1
|
||||||
|
else:
|
||||||
|
lines.insert(index + indexDiff, " "*len(listInd) + "</li>")
|
||||||
|
indexDiff += 1
|
||||||
|
del listInd[-1]
|
||||||
|
lines.insert(index + indexDiff, " "*len(listInd) + "</ul>")
|
||||||
|
indexDiff += 1
|
||||||
|
lines.insert(index + indexDiff, " "*len(listInd) + "<ul>")
|
||||||
|
indexDiff += 1
|
||||||
|
listInd.append(i);
|
||||||
|
lines.insert(index + indexDiff, " "*len(listInd) + "<li>")
|
||||||
|
indexDiff += 1
|
||||||
|
lines[index + indexDiff] = lines[index + indexDiff][0:i] + lines[index + indexDiff][i + 1:]
|
||||||
|
else:
|
||||||
|
if listInd and (not line or line == "*" or line.startswith("@note")):
|
||||||
|
lines.insert(index + indexDiff, " "*len(listInd) + "</li>")
|
||||||
|
indexDiff += 1
|
||||||
|
del listInd[-1]
|
||||||
|
lines.insert(index + indexDiff, " "*len(listInd) + "</ul>")
|
||||||
|
indexDiff += 1
|
||||||
|
|
||||||
|
i = len(listInd) - 1
|
||||||
|
for value in enumerate(listInd):
|
||||||
|
lines.append(" "*i + " </li>")
|
||||||
|
lines.append(" "*i + "</ul>")
|
||||||
|
i -= 1;
|
||||||
|
|
||||||
|
lines = list(map(lambda x: "* " + x[1:].strip() if x.startswith("*") and x != "*" else x, lines))
|
||||||
|
lines = list(map(lambda x: x if x.startswith("*") else "* " + x if x and x != "*" else "*", lines))
|
||||||
|
|
||||||
|
lines = list(map(lambda x: x
|
||||||
|
.replace("@note", "<b>Note:</b>")
|
||||||
|
, lines))
|
||||||
|
|
||||||
|
lines = list(map(lambda x: re.sub('@b ([\\w:]+?)\\b', '<b>' + r'\1' + '</b>', x), lines))
|
||||||
|
lines = list(map(lambda x: re.sub('@c ([\\w:]+?)\\b', '<tt>' + r'\1' + '</tt>', x), lines))
|
||||||
|
lines = list(map(lambda x: re.sub('`(.*?)`', "{@code " + r'\1' + '}', x), lines))
|
||||||
|
lines = list(map(lambda x: re.sub('@p ([\\w:]+?)\\b', '{@code ' + r'\1' + '}', x), lines))
|
||||||
|
|
||||||
|
hasValues = False
|
||||||
|
for line in lines:
|
||||||
|
if line != "*":
|
||||||
|
hasValues = True
|
||||||
|
break
|
||||||
|
return "/**\n " + "\n ".join(lines) + "\n */" if hasValues else ""
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
# initialize logger
|
# initialize logger
|
||||||
|
@ -5,8 +5,7 @@ package org.opencv.$module;
|
|||||||
|
|
||||||
$imports
|
$imports
|
||||||
|
|
||||||
$docs
|
$docs$annotation
|
||||||
$annotation
|
|
||||||
public class $jname {
|
public class $jname {
|
||||||
|
|
||||||
protected final long nativeObj;
|
protected final long nativeObj;
|
||||||
|
@ -5,8 +5,7 @@ package org.opencv.$module;
|
|||||||
|
|
||||||
$imports
|
$imports
|
||||||
|
|
||||||
$docs
|
$docs$annotation
|
||||||
$annotation
|
|
||||||
public class $jname extends $base {
|
public class $jname extends $base {
|
||||||
|
|
||||||
protected $jname(long addr) { super(addr); }
|
protected $jname(long addr) { super(addr); }
|
||||||
|
@ -5,6 +5,5 @@ package org.opencv.$module;
|
|||||||
|
|
||||||
$imports
|
$imports
|
||||||
|
|
||||||
$docs
|
$docs$annotation
|
||||||
$annotation
|
|
||||||
public class $jname {
|
public class $jname {
|
||||||
|
@ -25,6 +25,8 @@ if(OPENCV_JAVA_TARGET_VERSION)
|
|||||||
set(OPENCV_ANT_JAVAC_EXTRA_ATTRS "${OPENCV_ANT_JAVAC_EXTRA_ATTRS} target=\"${OPENCV_JAVA_TARGET_VERSION}\"")
|
set(OPENCV_ANT_JAVAC_EXTRA_ATTRS "${OPENCV_ANT_JAVAC_EXTRA_ATTRS} target=\"${OPENCV_JAVA_TARGET_VERSION}\"")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
set(OPENCV_JAVADOC_DESTINATION "${OpenCV_BINARY_DIR}/doc/doxygen/html/javadoc" CACHE STRING "")
|
||||||
|
|
||||||
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/build.xml.in" "${OPENCV_JAVA_DIR}/build.xml" @ONLY)
|
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/build.xml.in" "${OPENCV_JAVA_DIR}/build.xml" @ONLY)
|
||||||
list(APPEND depends "${OPENCV_JAVA_DIR}/build.xml")
|
list(APPEND depends "${OPENCV_JAVA_DIR}/build.xml")
|
||||||
|
|
||||||
|
@ -29,14 +29,35 @@
|
|||||||
</target>
|
</target>
|
||||||
|
|
||||||
<target name="javadoc">
|
<target name="javadoc">
|
||||||
|
<copy file="@OpenCV_SOURCE_DIR@/doc/mymath.js"
|
||||||
|
todir="@OPENCV_JAVADOC_DESTINATION@" />
|
||||||
|
|
||||||
|
<!-- synchronize with platforms\android\build_sdk.py -->
|
||||||
<javadoc
|
<javadoc
|
||||||
packagenames="org.opencv.*"
|
packagenames="org.opencv.*"
|
||||||
sourcepath="java"
|
sourcepath="java"
|
||||||
destdir="@OpenCV_BINARY_DIR@/doc/doxygen/html/javadoc"
|
destdir="@OPENCV_JAVADOC_DESTINATION@"
|
||||||
Windowtitle="OpenCV @OPENCV_VERSION_PLAIN@ Java documentation"
|
Windowtitle="OpenCV @OPENCV_VERSION_PLAIN@ Java documentation"
|
||||||
Doctitle="OpenCV Java documentation (@OPENCV_VERSION@)"
|
Doctitle="OpenCV Java documentation (@OPENCV_VERSION@)"
|
||||||
bottom="Generated on ${timestamp} / OpenCV @OPENCV_VCSVERSION@"
|
bottom="Generated on ${timestamp} / OpenCV @OPENCV_VCSVERSION@"
|
||||||
/>
|
failonerror="true"
|
||||||
|
encoding="UTF-8" charset="UTF-8" docencoding="UTF-8"
|
||||||
|
link="https://docs.oracle.com/javase/6/docs/api/"
|
||||||
|
additionalparam="--allow-script-in-comments"
|
||||||
|
>
|
||||||
|
<Header>
|
||||||
|
<![CDATA[
|
||||||
|
<script>
|
||||||
|
var url = window.location.href;
|
||||||
|
var pos = url.lastIndexOf('/javadoc/');
|
||||||
|
url = pos >= 0 ? (url.substring(0, pos) + '/javadoc/mymath.js') : (window.location.origin + '/mymath.js');
|
||||||
|
var script = document.createElement('script');
|
||||||
|
script.src = '@OPENCV_MATHJAX_RELPATH@/MathJax.js?config=TeX-AMS-MML_HTMLorMML,' + url;
|
||||||
|
document.getElementsByTagName('head')[0].appendChild(script);
|
||||||
|
</script>
|
||||||
|
]]>
|
||||||
|
</Header>
|
||||||
|
</javadoc>
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
|
@ -1004,7 +1004,7 @@ public:
|
|||||||
@param samples Samples from which the Gaussian mixture model will be estimated. It should be a
|
@param samples Samples from which the Gaussian mixture model will be estimated. It should be a
|
||||||
one-channel matrix, each row of which is a sample. If the matrix does not have CV_64F type
|
one-channel matrix, each row of which is a sample. If the matrix does not have CV_64F type
|
||||||
it will be converted to the inner matrix of such type for the further computing.
|
it will be converted to the inner matrix of such type for the further computing.
|
||||||
@param probs0
|
@param probs0 the probabilities
|
||||||
@param logLikelihoods The optional output matrix that contains a likelihood logarithm value for
|
@param logLikelihoods The optional output matrix that contains a likelihood logarithm value for
|
||||||
each sample. It has \f$nsamples \times 1\f$ size and CV_64FC1 type.
|
each sample. It has \f$nsamples \times 1\f$ size and CV_64FC1 type.
|
||||||
@param labels The optional output "class label" for each sample:
|
@param labels The optional output "class label" for each sample:
|
||||||
|
@ -3,9 +3,7 @@ package org.opencv.test.objdetect;
|
|||||||
import org.opencv.core.Mat;
|
import org.opencv.core.Mat;
|
||||||
import org.opencv.objdetect.QRCodeDetector;
|
import org.opencv.objdetect.QRCodeDetector;
|
||||||
import org.opencv.imgcodecs.Imgcodecs;
|
import org.opencv.imgcodecs.Imgcodecs;
|
||||||
import org.opencv.objdetect.Objdetect;
|
|
||||||
import org.opencv.test.OpenCVTestCase;
|
import org.opencv.test.OpenCVTestCase;
|
||||||
import org.opencv.test.OpenCVTestRunner;
|
|
||||||
|
|
||||||
public class QRCodeDetectorTest extends OpenCVTestCase {
|
public class QRCodeDetectorTest extends OpenCVTestCase {
|
||||||
|
|
||||||
|
18
modules/objdetect/misc/python/test/test_qrcode_detect.py
Normal file
18
modules/objdetect/misc/python/test/test_qrcode_detect.py
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
'''
|
||||||
|
===============================================================================
|
||||||
|
QR code detect and decode pipeline.
|
||||||
|
===============================================================================
|
||||||
|
'''
|
||||||
|
|
||||||
|
import numpy as np
|
||||||
|
import cv2 as cv
|
||||||
|
|
||||||
|
from tests_common import NewOpenCVTests
|
||||||
|
|
||||||
|
class qrcode_detector_test(NewOpenCVTests):
|
||||||
|
def test_detect_and_decode(self):
|
||||||
|
img = cv.imread(self.extraTestDataPath + '/cv/qrcode/link_ocv.jpg')
|
||||||
|
detector = cv.QRCodeDetector()
|
||||||
|
retval, points, straight_qrcode = detector.detectAndDecode(img)
|
||||||
|
self.assertEqual(retval, "https://opencv.org/");
|
@ -1068,7 +1068,6 @@ std::string QRCodeDetector::decode(InputArray in, InputArray points,
|
|||||||
inarr = gray;
|
inarr = gray;
|
||||||
}
|
}
|
||||||
|
|
||||||
CV_Assert(points.isVector());
|
|
||||||
vector<Point2f> src_points;
|
vector<Point2f> src_points;
|
||||||
points.copyTo(src_points);
|
points.copyTo(src_points);
|
||||||
CV_Assert(src_points.size() == 4);
|
CV_Assert(src_points.size() == 4);
|
||||||
|
@ -299,7 +299,7 @@ icvTeleaInpaintFMM(const CvMat *f, CvMat *t, CvMat *out, int range, CvPriorityQu
|
|||||||
else if(q==1) {i=ii; j=jj-1;}
|
else if(q==1) {i=ii; j=jj-1;}
|
||||||
else if(q==2) {i=ii+1; j=jj;}
|
else if(q==2) {i=ii+1; j=jj;}
|
||||||
else if(q==3) {i=ii; j=jj+1;}
|
else if(q==3) {i=ii; j=jj+1;}
|
||||||
if ((i<=1)||(j<=1)||(i>t->rows-1)||(j>t->cols-1)) continue;
|
if ((i<=0)||(j<=0)||(i>t->rows-1)||(j>t->cols-1)) continue;
|
||||||
|
|
||||||
if (CV_MAT_ELEM(*f,uchar,i,j)==INSIDE) {
|
if (CV_MAT_ELEM(*f,uchar,i,j)==INSIDE) {
|
||||||
dist = min4(FastMarching_solve(i-1,j,i,j-1,f,t),
|
dist = min4(FastMarching_solve(i-1,j,i,j-1,f,t),
|
||||||
@ -411,7 +411,7 @@ icvTeleaInpaintFMM(const CvMat *f, CvMat *t, CvMat *out, int range, CvPriorityQu
|
|||||||
else if(q==1) {i=ii; j=jj-1;}
|
else if(q==1) {i=ii; j=jj-1;}
|
||||||
else if(q==2) {i=ii+1; j=jj;}
|
else if(q==2) {i=ii+1; j=jj;}
|
||||||
else if(q==3) {i=ii; j=jj+1;}
|
else if(q==3) {i=ii; j=jj+1;}
|
||||||
if ((i<=1)||(j<=1)||(i>t->rows-1)||(j>t->cols-1)) continue;
|
if ((i<=0)||(j<=0)||(i>t->rows-1)||(j>t->cols-1)) continue;
|
||||||
|
|
||||||
if (CV_MAT_ELEM(*f,uchar,i,j)==INSIDE) {
|
if (CV_MAT_ELEM(*f,uchar,i,j)==INSIDE) {
|
||||||
dist = min4(FastMarching_solve(i-1,j,i,j-1,f,t),
|
dist = min4(FastMarching_solve(i-1,j,i,j-1,f,t),
|
||||||
@ -531,7 +531,7 @@ icvNSInpaintFMM(const CvMat *f, CvMat *t, CvMat *out, int range, CvPriorityQueue
|
|||||||
else if(q==1) {i=ii; j=jj-1;}
|
else if(q==1) {i=ii; j=jj-1;}
|
||||||
else if(q==2) {i=ii+1; j=jj;}
|
else if(q==2) {i=ii+1; j=jj;}
|
||||||
else if(q==3) {i=ii; j=jj+1;}
|
else if(q==3) {i=ii; j=jj+1;}
|
||||||
if ((i<=1)||(j<=1)||(i>t->rows-1)||(j>t->cols-1)) continue;
|
if ((i<=0)||(j<=0)||(i>t->rows-1)||(j>t->cols-1)) continue;
|
||||||
|
|
||||||
if (CV_MAT_ELEM(*f,uchar,i,j)==INSIDE) {
|
if (CV_MAT_ELEM(*f,uchar,i,j)==INSIDE) {
|
||||||
dist = min4(FastMarching_solve(i-1,j,i,j-1,f,t),
|
dist = min4(FastMarching_solve(i-1,j,i,j-1,f,t),
|
||||||
@ -619,7 +619,7 @@ icvNSInpaintFMM(const CvMat *f, CvMat *t, CvMat *out, int range, CvPriorityQueue
|
|||||||
else if(q==1) {i=ii; j=jj-1;}
|
else if(q==1) {i=ii; j=jj-1;}
|
||||||
else if(q==2) {i=ii+1; j=jj;}
|
else if(q==2) {i=ii+1; j=jj;}
|
||||||
else if(q==3) {i=ii; j=jj+1;}
|
else if(q==3) {i=ii; j=jj+1;}
|
||||||
if ((i<=1)||(j<=1)||(i>t->rows-1)||(j>t->cols-1)) continue;
|
if ((i<=0)||(j<=0)||(i>t->rows-1)||(j>t->cols-1)) continue;
|
||||||
|
|
||||||
if (CV_MAT_ELEM(*f,uchar,i,j)==INSIDE) {
|
if (CV_MAT_ELEM(*f,uchar,i,j)==INSIDE) {
|
||||||
dist = min4(FastMarching_solve(i-1,j,i,j-1,f,t),
|
dist = min4(FastMarching_solve(i-1,j,i,j-1,f,t),
|
||||||
|
@ -139,4 +139,22 @@ TEST_P(formats, 1c)
|
|||||||
|
|
||||||
INSTANTIATE_TEST_CASE_P(Photo_Inpaint, formats, testing::Values(CV_32F, CV_16U, CV_8U));
|
INSTANTIATE_TEST_CASE_P(Photo_Inpaint, formats, testing::Values(CV_32F, CV_16U, CV_8U));
|
||||||
|
|
||||||
|
TEST(Photo_InpaintBorders, regression)
|
||||||
|
{
|
||||||
|
Mat img(64, 64, CV_8U);
|
||||||
|
img = 128;
|
||||||
|
img(Rect(0, 0, 16, 64)) = 0;
|
||||||
|
|
||||||
|
Mat mask(64, 64, CV_8U);
|
||||||
|
mask = 0;
|
||||||
|
mask(Rect(0, 0, 16, 64)) = 255;
|
||||||
|
|
||||||
|
Mat inpainted;
|
||||||
|
inpaint(img, mask, inpainted, 1, INPAINT_TELEA);
|
||||||
|
|
||||||
|
Mat diff;
|
||||||
|
cv::absdiff(inpainted, 128*Mat::ones(inpainted.size(), inpainted.type()), diff);
|
||||||
|
ASSERT_TRUE(countNonZero(diff) == 0);
|
||||||
|
}
|
||||||
|
|
||||||
}} // namespace
|
}} // namespace
|
||||||
|
@ -61,7 +61,6 @@ ocv_update(OPENCV_PYTHON_EXTENSION_BUILD_PATH "${LIBRARY_OUTPUT_PATH}/${MODULE_I
|
|||||||
set_target_properties(${the_module} PROPERTIES
|
set_target_properties(${the_module} PROPERTIES
|
||||||
LIBRARY_OUTPUT_DIRECTORY "${OPENCV_PYTHON_EXTENSION_BUILD_PATH}"
|
LIBRARY_OUTPUT_DIRECTORY "${OPENCV_PYTHON_EXTENSION_BUILD_PATH}"
|
||||||
ARCHIVE_OUTPUT_NAME ${the_module} # prevent name conflict for python2/3 outputs
|
ARCHIVE_OUTPUT_NAME ${the_module} # prevent name conflict for python2/3 outputs
|
||||||
DEFINE_SYMBOL CVAPI_EXPORTS
|
|
||||||
PREFIX ""
|
PREFIX ""
|
||||||
OUTPUT_NAME cv2
|
OUTPUT_NAME cv2
|
||||||
SUFFIX ${CVPY_SUFFIX})
|
SUFFIX ${CVPY_SUFFIX})
|
||||||
|
@ -1797,8 +1797,12 @@ static int to_ok(PyTypeObject *to)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(__GNUC__)
|
||||||
|
#pragma GCC visibility push(default)
|
||||||
|
#endif
|
||||||
|
|
||||||
#if PY_MAJOR_VERSION >= 3
|
#if PY_MAJOR_VERSION >= 3
|
||||||
extern "C" CV_EXPORTS PyObject* PyInit_cv2();
|
PyMODINIT_FUNC PyInit_cv2();
|
||||||
static struct PyModuleDef cv2_moduledef =
|
static struct PyModuleDef cv2_moduledef =
|
||||||
{
|
{
|
||||||
PyModuleDef_HEAD_INIT,
|
PyModuleDef_HEAD_INIT,
|
||||||
@ -1811,7 +1815,7 @@ static struct PyModuleDef cv2_moduledef =
|
|||||||
|
|
||||||
PyObject* PyInit_cv2()
|
PyObject* PyInit_cv2()
|
||||||
#else
|
#else
|
||||||
extern "C" CV_EXPORTS void initcv2();
|
PyMODINIT_FUNC initcv2();
|
||||||
|
|
||||||
void initcv2()
|
void initcv2()
|
||||||
#endif
|
#endif
|
||||||
|
@ -827,7 +827,7 @@ class CppHeaderParser(object):
|
|||||||
if state == DOCSTRING:
|
if state == DOCSTRING:
|
||||||
pos = l.find("*/")
|
pos = l.find("*/")
|
||||||
if pos < 0:
|
if pos < 0:
|
||||||
docstring += l + "\n"
|
docstring += l0
|
||||||
continue
|
continue
|
||||||
docstring += l[:pos] + "\n"
|
docstring += l[:pos] + "\n"
|
||||||
l = l[pos+2:]
|
l = l[pos+2:]
|
||||||
|
@ -8284,8 +8284,8 @@ DeathTest::TestRole WindowsDeathTest::AssumeRole() {
|
|||||||
GTEST_DEATH_TEST_CHECK_(::CreateProcessA(
|
GTEST_DEATH_TEST_CHECK_(::CreateProcessA(
|
||||||
executable_path,
|
executable_path,
|
||||||
const_cast<char*>(command_line.c_str()),
|
const_cast<char*>(command_line.c_str()),
|
||||||
NULL, // Retuned process handle is not inheritable.
|
NULL, // Returned process handle is not inheritable.
|
||||||
NULL, // Retuned thread handle is not inheritable.
|
NULL, // Returned thread handle is not inheritable.
|
||||||
TRUE, // Child inherits all inheritable handles (for write_handle_).
|
TRUE, // Child inherits all inheritable handles (for write_handle_).
|
||||||
0x0, // Default creation flags.
|
0x0, // Default creation flags.
|
||||||
NULL, // Inherit the parent's environment.
|
NULL, // Inherit the parent's environment.
|
||||||
|
@ -550,7 +550,7 @@ double cv::findTransformECC(InputArray templateImage,
|
|||||||
|
|
||||||
const double correlation = templateZM.dot(imageWarped);
|
const double correlation = templateZM.dot(imageWarped);
|
||||||
|
|
||||||
// calculate enhanced correlation coefficiont (ECC)->rho
|
// calculate enhanced correlation coefficient (ECC)->rho
|
||||||
last_rho = rho;
|
last_rho = rho;
|
||||||
rho = correlation/(imgNorm*tmpNorm);
|
rho = correlation/(imgNorm*tmpNorm);
|
||||||
if (cvIsNaN(rho)) {
|
if (cvIsNaN(rho)) {
|
||||||
|
@ -1281,7 +1281,7 @@ void SparsePyrLKOpticalFlowImpl::calc( InputArray _prevImg, InputArray _nextImg,
|
|||||||
levels1 /= 2;
|
levels1 /= 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ensure that pyramid has reqired padding
|
// ensure that pyramid has required padding
|
||||||
if(levels1 > 0)
|
if(levels1 > 0)
|
||||||
{
|
{
|
||||||
Size fullSize;
|
Size fullSize;
|
||||||
@ -1309,7 +1309,7 @@ void SparsePyrLKOpticalFlowImpl::calc( InputArray _prevImg, InputArray _nextImg,
|
|||||||
levels2 /= 2;
|
levels2 /= 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ensure that pyramid has reqired padding
|
// ensure that pyramid has required padding
|
||||||
if(levels2 > 0)
|
if(levels2 > 0)
|
||||||
{
|
{
|
||||||
Size fullSize;
|
Size fullSize;
|
||||||
|
@ -767,7 +767,7 @@ public:
|
|||||||
@note Reading / writing properties involves many layers. Some unexpected result might happens
|
@note Reading / writing properties involves many layers. Some unexpected result might happens
|
||||||
along this chain.
|
along this chain.
|
||||||
@code{.txt}
|
@code{.txt}
|
||||||
`VideoCapture -> API Backend -> Operating System -> Device Driver -> Device Hardware`
|
VideoCapture -> API Backend -> Operating System -> Device Driver -> Device Hardware
|
||||||
@endcode
|
@endcode
|
||||||
The returned value might be different from what really used by the device or it could be encoded
|
The returned value might be different from what really used by the device or it could be encoded
|
||||||
using device dependent rules (eg. steps or percentage). Effective behaviour depends from device
|
using device dependent rules (eg. steps or percentage). Effective behaviour depends from device
|
||||||
|
@ -1,6 +1,13 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
import os, sys, subprocess, argparse, shutil, glob, re
|
import os, sys
|
||||||
|
import argparse
|
||||||
|
import glob
|
||||||
|
import re
|
||||||
|
import shutil
|
||||||
|
import subprocess
|
||||||
|
import time
|
||||||
|
|
||||||
import logging as log
|
import logging as log
|
||||||
import xml.etree.ElementTree as ET
|
import xml.etree.ElementTree as ET
|
||||||
|
|
||||||
@ -245,14 +252,34 @@ class Builder:
|
|||||||
for f in files:
|
for f in files:
|
||||||
if f == "android.jar" or f == "annotations.jar":
|
if f == "android.jar" or f == "annotations.jar":
|
||||||
classpaths.append(os.path.join(dir, f))
|
classpaths.append(os.path.join(dir, f))
|
||||||
|
srcdir = os.path.join(self.resultdest, 'sdk', 'java', 'src')
|
||||||
|
dstdir = self.docdest
|
||||||
|
# synchronize with modules/java/jar/build.xml.in
|
||||||
|
shutil.copy2(os.path.join(SCRIPT_DIR, '../../doc/mymath.js'), dstdir)
|
||||||
cmd = [
|
cmd = [
|
||||||
"javadoc",
|
"javadoc",
|
||||||
"-header", "OpenCV %s" % self.opencv_version,
|
'-windowtitle', 'OpenCV %s Java documentation' % self.opencv_version,
|
||||||
|
'-doctitle', 'OpenCV Java documentation (%s)' % self.opencv_version,
|
||||||
"-nodeprecated",
|
"-nodeprecated",
|
||||||
"-footer", '<a href="http://docs.opencv.org">OpenCV %s Documentation</a>' % self.opencv_version,
|
|
||||||
"-public",
|
"-public",
|
||||||
'-sourcepath', os.path.join(self.resultdest, 'sdk', 'java', 'src'),
|
'-sourcepath', srcdir,
|
||||||
"-d", self.docdest,
|
'-encoding', 'UTF-8',
|
||||||
|
'-charset', 'UTF-8',
|
||||||
|
'-docencoding', 'UTF-8',
|
||||||
|
'--allow-script-in-comments',
|
||||||
|
'-header',
|
||||||
|
'''
|
||||||
|
<script>
|
||||||
|
var url = window.location.href;
|
||||||
|
var pos = url.lastIndexOf('/javadoc/');
|
||||||
|
url = pos >= 0 ? (url.substring(0, pos) + '/javadoc/mymath.js') : (window.location.origin + '/mymath.js');
|
||||||
|
var script = document.createElement('script');
|
||||||
|
script.src = '%s/MathJax.js?config=TeX-AMS-MML_HTMLorMML,' + url;
|
||||||
|
document.getElementsByTagName('head')[0].appendChild(script);
|
||||||
|
</script>
|
||||||
|
''' % 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0',
|
||||||
|
'-bottom', 'Generated on %s / OpenCV %s' % (time.strftime("%Y-%m-%d %H:%M:%S"), self.opencv_version),
|
||||||
|
"-d", dstdir,
|
||||||
"-classpath", ":".join(classpaths),
|
"-classpath", ":".join(classpaths),
|
||||||
'-subpackages', 'org.opencv',
|
'-subpackages', 'org.opencv',
|
||||||
]
|
]
|
||||||
|
@ -266,7 +266,10 @@ int main(int argc, char *argv[])
|
|||||||
cout << "Unsupported mode: " << mode << endl;
|
cout << "Unsupported mode: " << mode << endl;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
if (mode == "decode")
|
||||||
|
{
|
||||||
file_name = samples::findFile(file_name);
|
file_name = samples::findFile(file_name);
|
||||||
|
}
|
||||||
cout << "Mode: " << mode << ", Backend: " << backend << ", File: " << file_name << ", Codec: " << codec << endl;
|
cout << "Mode: " << mode << ", Backend: " << backend << ", File: " << file_name << ", Codec: " << codec << endl;
|
||||||
|
|
||||||
TickMeter total;
|
TickMeter total;
|
||||||
|
@ -177,7 +177,7 @@ int main( int argc, char* argv[] )
|
|||||||
else
|
else
|
||||||
capture.set(CAP_OPENNI_IR_GENERATOR_PRESENT, false);
|
capture.set(CAP_OPENNI_IR_GENERATOR_PRESENT, false);
|
||||||
|
|
||||||
// Print some avalible device settings.
|
// Print some available device settings.
|
||||||
if (capture.get(CAP_OPENNI_DEPTH_GENERATOR_PRESENT))
|
if (capture.get(CAP_OPENNI_DEPTH_GENERATOR_PRESENT))
|
||||||
{
|
{
|
||||||
cout << "\nDepth generator output mode:" << endl <<
|
cout << "\nDepth generator output mode:" << endl <<
|
||||||
|
@ -8,8 +8,8 @@ def my_ellipse(img, angle):
|
|||||||
line_type = 8
|
line_type = 8
|
||||||
|
|
||||||
cv.ellipse(img,
|
cv.ellipse(img,
|
||||||
(W / 2, W / 2),
|
(W // 2, W // 2),
|
||||||
(W / 4, W / 16),
|
(W // 4, W // 16),
|
||||||
angle,
|
angle,
|
||||||
0,
|
0,
|
||||||
360,
|
360,
|
||||||
@ -24,7 +24,7 @@ def my_filled_circle(img, center):
|
|||||||
|
|
||||||
cv.circle(img,
|
cv.circle(img,
|
||||||
center,
|
center,
|
||||||
W / 32,
|
W // 32,
|
||||||
(0, 0, 255),
|
(0, 0, 255),
|
||||||
thickness,
|
thickness,
|
||||||
line_type)
|
line_type)
|
||||||
@ -82,7 +82,7 @@ my_ellipse(atom_image, 45)
|
|||||||
my_ellipse(atom_image, -45)
|
my_ellipse(atom_image, -45)
|
||||||
|
|
||||||
# 1.b. Creating circles
|
# 1.b. Creating circles
|
||||||
my_filled_circle(atom_image, (W / 2, W / 2))
|
my_filled_circle(atom_image, (W // 2, W // 2))
|
||||||
## [draw_atom]
|
## [draw_atom]
|
||||||
## [draw_rook]
|
## [draw_rook]
|
||||||
|
|
||||||
@ -93,7 +93,7 @@ my_polygon(rook_image)
|
|||||||
## [rectangle]
|
## [rectangle]
|
||||||
# 2.b. Creating rectangles
|
# 2.b. Creating rectangles
|
||||||
cv.rectangle(rook_image,
|
cv.rectangle(rook_image,
|
||||||
(0, 7 * W / 8),
|
(0, 7 * W // 8),
|
||||||
(W, W),
|
(W, W),
|
||||||
(0, 255, 255),
|
(0, 255, 255),
|
||||||
-1,
|
-1,
|
||||||
@ -101,10 +101,10 @@ cv.rectangle(rook_image,
|
|||||||
## [rectangle]
|
## [rectangle]
|
||||||
|
|
||||||
# 2.c. Create a few lines
|
# 2.c. Create a few lines
|
||||||
my_line(rook_image, (0, 15 * W / 16), (W, 15 * W / 16))
|
my_line(rook_image, (0, 15 * W // 16), (W, 15 * W // 16))
|
||||||
my_line(rook_image, (W / 4, 7 * W / 8), (W / 4, W))
|
my_line(rook_image, (W // 4, 7 * W // 8), (W // 4, W))
|
||||||
my_line(rook_image, (W / 2, 7 * W / 8), (W / 2, W))
|
my_line(rook_image, (W // 2, 7 * W // 8), (W // 2, W))
|
||||||
my_line(rook_image, (3 * W / 4, 7 * W / 8), (3 * W / 4, W))
|
my_line(rook_image, (3 * W // 4, 7 * W // 8), (3 * W // 4, W))
|
||||||
## [draw_rook]
|
## [draw_rook]
|
||||||
cv.imshow(atom_window, atom_image)
|
cv.imshow(atom_window, atom_image)
|
||||||
cv.moveWindow(atom_window, 0, 200)
|
cv.moveWindow(atom_window, 0, 200)
|
||||||
|
@ -63,7 +63,7 @@ def main(argv):
|
|||||||
# [horiz]
|
# [horiz]
|
||||||
# Specify size on horizontal axis
|
# Specify size on horizontal axis
|
||||||
cols = horizontal.shape[1]
|
cols = horizontal.shape[1]
|
||||||
horizontal_size = cols / 30
|
horizontal_size = cols // 30
|
||||||
|
|
||||||
# Create structure element for extracting horizontal lines through morphology operations
|
# Create structure element for extracting horizontal lines through morphology operations
|
||||||
horizontalStructure = cv.getStructuringElement(cv.MORPH_RECT, (horizontal_size, 1))
|
horizontalStructure = cv.getStructuringElement(cv.MORPH_RECT, (horizontal_size, 1))
|
||||||
@ -79,7 +79,7 @@ def main(argv):
|
|||||||
# [vert]
|
# [vert]
|
||||||
# Specify size on vertical axis
|
# Specify size on vertical axis
|
||||||
rows = vertical.shape[0]
|
rows = vertical.shape[0]
|
||||||
verticalsize = rows / 30
|
verticalsize = rows // 30
|
||||||
|
|
||||||
# Create structure element for extracting vertical lines through morphology operations
|
# Create structure element for extracting vertical lines through morphology operations
|
||||||
verticalStructure = cv.getStructuringElement(cv.MORPH_RECT, (1, verticalsize))
|
verticalStructure = cv.getStructuringElement(cv.MORPH_RECT, (1, verticalsize))
|
||||||
|
Loading…
Reference in New Issue
Block a user