From 4c75b1c102065c7ef00f3aaa78e109b70c15907a Mon Sep 17 00:00:00 2001 From: Vincent Rabaud Date: Sat, 19 Dec 2020 08:22:37 +0100 Subject: [PATCH 1/7] Fix comment typos. --- modules/core/include/opencv2/core/vsx_utils.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/core/include/opencv2/core/vsx_utils.hpp b/modules/core/include/opencv2/core/vsx_utils.hpp index 08ae890175..d7962517df 100644 --- a/modules/core/include/opencv2/core/vsx_utils.hpp +++ b/modules/core/include/opencv2/core/vsx_utils.hpp @@ -503,7 +503,7 @@ VSX_IMPL_CONV_EVEN_2_4(vec_uint4, vec_double2, vec_ctu, vec_ctuo) VSX_IMPL_CONV_2VARIANT(vec_int4, vec_float4, vec_cts, vec_cts) VSX_IMPL_CONV_2VARIANT(vec_float4, vec_int4, vec_ctf, vec_ctf) // define vec_cts for converting double precision to signed doubleword - // which isn't combitable with xlc but its okay since Eigen only use it for gcc + // which isn't compatible with xlc but its okay since Eigen only uses it for gcc VSX_IMPL_CONV_2VARIANT(vec_dword2, vec_double2, vec_cts, vec_ctsl) #endif // Eigen From 17faee5d814ff48a2b8810e1d13abd21544027b4 Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Sun, 20 Dec 2020 02:05:46 +0000 Subject: [PATCH 2/7] imgproc: add rotatedRectangleIntersection empty input handling --- modules/imgproc/src/intersection.cpp | 6 ++++++ modules/imgproc/test/test_intersection.cpp | 25 ++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/modules/imgproc/src/intersection.cpp b/modules/imgproc/src/intersection.cpp index 84dbc8b8f1..3f749896a4 100644 --- a/modules/imgproc/src/intersection.cpp +++ b/modules/imgproc/src/intersection.cpp @@ -54,6 +54,12 @@ int rotatedRectangleIntersection( const RotatedRect& rect1, const RotatedRect& r // L2 metric const float samePointEps = std::max(1e-16f, 1e-6f * (float)std::max(rect1.size.area(), rect2.size.area())); + if (rect1.size.empty() || rect2.size.empty()) + { + intersectingRegion.release(); + return INTERSECT_NONE; + } + Point2f vec1[4], vec2[4]; Point2f pts1[4], pts2[4]; diff --git a/modules/imgproc/test/test_intersection.cpp b/modules/imgproc/test/test_intersection.cpp index 93909b3a9e..7527dd9a22 100644 --- a/modules/imgproc/test/test_intersection.cpp +++ b/modules/imgproc/test/test_intersection.cpp @@ -366,4 +366,29 @@ TEST(Imgproc_RotatedRectangleIntersection, regression_12221_2) EXPECT_LE(intersections.size(), (size_t)8); } +TEST(Imgproc_RotatedRectangleIntersection, regression_18520) +{ + RotatedRect rr_empty( + Point2f(2, 2), + Size2f(0, 0), // empty + 0); + RotatedRect rr( + Point2f(50, 50), + Size2f(4, 4), + 0); + + { + std::vector intersections; + int interType = cv::rotatedRectangleIntersection(rr_empty, rr, intersections); + EXPECT_EQ(INTERSECT_NONE, interType) << "rr_empty, rr"; + EXPECT_EQ((size_t)0, intersections.size()) << "rr_empty, rr"; + } + { + std::vector intersections; + int interType = cv::rotatedRectangleIntersection(rr, rr_empty, intersections); + EXPECT_EQ(INTERSECT_NONE, interType) << "rr, rr_empty"; + EXPECT_EQ((size_t)0, intersections.size()) << "rr, rr_empty"; + } +} + }} // namespace From 3359bdc464a6c8f38f36498992bd1dbba3fc0aaa Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Sun, 20 Dec 2020 02:27:46 +0000 Subject: [PATCH 3/7] docs(core): fix process_video_frame() code snippet --- modules/core/include/opencv2/core/mat.hpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/modules/core/include/opencv2/core/mat.hpp b/modules/core/include/opencv2/core/mat.hpp index 0922db9084..98f451cf71 100644 --- a/modules/core/include/opencv2/core/mat.hpp +++ b/modules/core/include/opencv2/core/mat.hpp @@ -702,11 +702,16 @@ sub-matrices. -# Process "foreign" data using OpenCV (for example, when you implement a DirectShow\* filter or a processing module for gstreamer, and so on). For example: @code - void process_video_frame(const unsigned char* pixels, - int width, int height, int step) + Mat process_video_frame(const unsigned char* pixels, + int width, int height, int step) { - Mat img(height, width, CV_8UC3, pixels, step); - GaussianBlur(img, img, Size(7,7), 1.5, 1.5); + // wrap input buffer + Mat img(height, width, CV_8UC3, (unsigned char*)pixels, step); + + Mat result; + GaussianBlur(img, result, Size(7, 7), 1.5, 1.5); + + return result; } @endcode -# Quickly initialize small matrices and/or get a super-fast element access. From e9a4734a570cdf1b08069db56c2e3cecaf8942da Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Sun, 20 Dec 2020 05:05:48 +0000 Subject: [PATCH 4/7] doxygen: drop deprecated TCL_SUBST --- doc/Doxyfile.in | 1 - 1 file changed, 1 deletion(-) diff --git a/doc/Doxyfile.in b/doc/Doxyfile.in index c881964254..b6a7c7a82f 100644 --- a/doc/Doxyfile.in +++ b/doc/Doxyfile.in @@ -39,7 +39,6 @@ ALIASES += end_toggle="@htmlonly[block] @endhtmlonly" ALIASES += prev_tutorial{1}="**Prev Tutorial:** \ref \1 \n" ALIASES += next_tutorial{1}="**Next Tutorial:** \ref \1 \n" ALIASES += youtube{1}="@htmlonly[block]
@endhtmlonly" -TCL_SUBST = OPTIMIZE_OUTPUT_FOR_C = NO OPTIMIZE_OUTPUT_JAVA = NO OPTIMIZE_FOR_FORTRAN = NO From ff211371bc6c0e705ff1aae6ef70ad3aef9d7e30 Mon Sep 17 00:00:00 2001 From: Vincent Rabaud Date: Sat, 17 Oct 2020 04:39:05 +0200 Subject: [PATCH 5/7] Replace FLANNException by CV_Error. --- modules/flann/include/opencv2/flann/all_indices.h | 6 +++--- .../flann/include/opencv2/flann/autotuned_index.h | 1 - .../flann/include/opencv2/flann/composite_index.h | 1 - modules/flann/include/opencv2/flann/flann_base.hpp | 6 +++--- modules/flann/include/opencv2/flann/general.h | 10 ++++++++++ .../opencv2/flann/hierarchical_clustering_index.h | 4 ++-- .../flann/include/opencv2/flann/index_testing.h | 2 +- modules/flann/include/opencv2/flann/kdtree_index.h | 1 - .../include/opencv2/flann/kdtree_single_index.h | 1 - modules/flann/include/opencv2/flann/kmeans_index.h | 6 +++--- modules/flann/include/opencv2/flann/linear_index.h | 1 - modules/flann/include/opencv2/flann/lsh_index.h | 1 - modules/flann/include/opencv2/flann/matrix.h | 2 -- modules/flann/include/opencv2/flann/nn_index.h | 1 - modules/flann/include/opencv2/flann/params.h | 2 +- modules/flann/include/opencv2/flann/random.h | 2 -- modules/flann/include/opencv2/flann/saving.h | 14 +++++++------- modules/flann/src/precomp.hpp | 1 - 18 files changed, 30 insertions(+), 32 deletions(-) diff --git a/modules/flann/include/opencv2/flann/all_indices.h b/modules/flann/include/opencv2/flann/all_indices.h index 2de18af24a..03877ab6ad 100644 --- a/modules/flann/include/opencv2/flann/all_indices.h +++ b/modules/flann/include/opencv2/flann/all_indices.h @@ -82,7 +82,7 @@ struct index_creator nnIndex = new LshIndex(dataset, params, distance); break; default: - throw FLANNException("Unknown index type"); + FLANN_THROW(cv::Error::StsBadArg, "Unknown index type"); } return nnIndex; @@ -111,7 +111,7 @@ struct index_creator nnIndex = new LshIndex(dataset, params, distance); break; default: - throw FLANNException("Unknown index type"); + FLANN_THROW(cv::Error::StsBadArg, "Unknown index type"); } return nnIndex; @@ -140,7 +140,7 @@ struct index_creator nnIndex = new LshIndex(dataset, params, distance); break; default: - throw FLANNException("Unknown index type"); + FLANN_THROW(cv::Error::StsBadArg, "Unknown index type"); } return nnIndex; diff --git a/modules/flann/include/opencv2/flann/autotuned_index.h b/modules/flann/include/opencv2/flann/autotuned_index.h index 54a60a73d6..d90f739aff 100644 --- a/modules/flann/include/opencv2/flann/autotuned_index.h +++ b/modules/flann/include/opencv2/flann/autotuned_index.h @@ -34,7 +34,6 @@ #include -#include "general.h" #include "nn_index.h" #include "ground_truth.h" #include "index_testing.h" diff --git a/modules/flann/include/opencv2/flann/composite_index.h b/modules/flann/include/opencv2/flann/composite_index.h index bcf0827c9f..f1af41ac26 100644 --- a/modules/flann/include/opencv2/flann/composite_index.h +++ b/modules/flann/include/opencv2/flann/composite_index.h @@ -33,7 +33,6 @@ //! @cond IGNORED -#include "general.h" #include "nn_index.h" #include "kdtree_index.h" #include "kmeans_index.h" diff --git a/modules/flann/include/opencv2/flann/flann_base.hpp b/modules/flann/include/opencv2/flann/flann_base.hpp index 0f23930024..258ec38d20 100644 --- a/modules/flann/include/opencv2/flann/flann_base.hpp +++ b/modules/flann/include/opencv2/flann/flann_base.hpp @@ -82,11 +82,11 @@ NNIndex* load_saved_index(const Matrix IndexHeader header = load_header(fin); if (header.data_type != Datatype::type()) { fclose(fin); - throw FLANNException("Datatype of saved index is different than of the one to be created."); + FLANN_THROW(cv::Error::StsError, "Datatype of saved index is different than of the one to be created."); } if ((size_t(header.rows) != dataset.rows)||(size_t(header.cols) != dataset.cols)) { fclose(fin); - throw FLANNException("The index saved belongs to a different dataset"); + FLANN_THROW(cv::Error::StsError, "The index saved belongs to a different dataset"); } IndexParams params; @@ -140,7 +140,7 @@ public: { FILE* fout = fopen(filename.c_str(), "wb"); if (fout == NULL) { - throw FLANNException("Cannot open file"); + FLANN_THROW(cv::Error::StsError, "Cannot open file"); } save_header(fout, *nnIndex_); saveIndex(fout); diff --git a/modules/flann/include/opencv2/flann/general.h b/modules/flann/include/opencv2/flann/general.h index ac848d6230..29fa8be121 100644 --- a/modules/flann/include/opencv2/flann/general.h +++ b/modules/flann/include/opencv2/flann/general.h @@ -31,6 +31,8 @@ #ifndef OPENCV_FLANN_GENERAL_H_ #define OPENCV_FLANN_GENERAL_H_ +#if CV_VERSION_MAJOR <= 4 + //! @cond IGNORED #include "opencv2/core.hpp" @@ -48,6 +50,14 @@ public: } +#define FLANN_THROW(TYPE, STR) throw FLANNException(STR) + +#else + +#define FLANN_THROW(TYPE, STR) CV_Error(TYPE, STR) + +#endif + //! @endcond #endif /* OPENCV_FLANN_GENERAL_H_ */ diff --git a/modules/flann/include/opencv2/flann/hierarchical_clustering_index.h b/modules/flann/include/opencv2/flann/hierarchical_clustering_index.h index 78ac401630..7085d6901e 100644 --- a/modules/flann/include/opencv2/flann/hierarchical_clustering_index.h +++ b/modules/flann/include/opencv2/flann/hierarchical_clustering_index.h @@ -382,7 +382,7 @@ public: chooseCenters = &HierarchicalClusteringIndex::GroupWiseCenterChooser; } else { - throw FLANNException("Unknown algorithm for choosing initial centers."); + FLANN_THROW(cv::Error::StsError, "Unknown algorithm for choosing initial centers."); } root = new NodePtr[trees_]; @@ -446,7 +446,7 @@ public: void buildIndex() CV_OVERRIDE { if (branching_<2) { - throw FLANNException("Branching factor must be at least 2"); + FLANN_THROW(cv::Error::StsError, "Branching factor must be at least 2"); } free_indices(); diff --git a/modules/flann/include/opencv2/flann/index_testing.h b/modules/flann/include/opencv2/flann/index_testing.h index f3d147588d..207adef449 100644 --- a/modules/flann/include/opencv2/flann/index_testing.h +++ b/modules/flann/include/opencv2/flann/index_testing.h @@ -93,7 +93,7 @@ float search_with_ground_truth(NNIndex& index, const Matrix resultSet(nn+skipMatches); diff --git a/modules/flann/include/opencv2/flann/kdtree_index.h b/modules/flann/include/opencv2/flann/kdtree_index.h index acc87a3198..ea3550ad1d 100644 --- a/modules/flann/include/opencv2/flann/kdtree_index.h +++ b/modules/flann/include/opencv2/flann/kdtree_index.h @@ -37,7 +37,6 @@ #include #include -#include "general.h" #include "nn_index.h" #include "dynamic_bitset.h" #include "matrix.h" diff --git a/modules/flann/include/opencv2/flann/kdtree_single_index.h b/modules/flann/include/opencv2/flann/kdtree_single_index.h index e571403b10..ed95c3db7d 100644 --- a/modules/flann/include/opencv2/flann/kdtree_single_index.h +++ b/modules/flann/include/opencv2/flann/kdtree_single_index.h @@ -37,7 +37,6 @@ #include #include -#include "general.h" #include "nn_index.h" #include "matrix.h" #include "result_set.h" diff --git a/modules/flann/include/opencv2/flann/kmeans_index.h b/modules/flann/include/opencv2/flann/kmeans_index.h index 6f63629d05..10b272daaa 100644 --- a/modules/flann/include/opencv2/flann/kmeans_index.h +++ b/modules/flann/include/opencv2/flann/kmeans_index.h @@ -381,7 +381,7 @@ public: chooseCenters = &KMeansIndex::chooseCentersKMeanspp; } else { - throw FLANNException("Unknown algorithm for choosing initial centers."); + FLANN_THROW(cv::Error::StsBadArg, "Unknown algorithm for choosing initial centers."); } cb_index_ = 0.4f; @@ -453,7 +453,7 @@ public: void buildIndex() CV_OVERRIDE { if (branching_<2) { - throw FLANNException("Branching factor must be at least 2"); + FLANN_THROW(cv::Error::StsError, "Branching factor must be at least 2"); } free_indices(); @@ -570,7 +570,7 @@ public: { int numClusters = centers.rows; if (numClusters<1) { - throw FLANNException("Number of clusters must be at least 1"); + FLANN_THROW(cv::Error::StsBadArg, "Number of clusters must be at least 1"); } DistanceType variance; diff --git a/modules/flann/include/opencv2/flann/linear_index.h b/modules/flann/include/opencv2/flann/linear_index.h index 8a0f10fd86..6428c0d7ef 100644 --- a/modules/flann/include/opencv2/flann/linear_index.h +++ b/modules/flann/include/opencv2/flann/linear_index.h @@ -33,7 +33,6 @@ //! @cond IGNORED -#include "general.h" #include "nn_index.h" namespace cvflann diff --git a/modules/flann/include/opencv2/flann/lsh_index.h b/modules/flann/include/opencv2/flann/lsh_index.h index 9ac30136ff..9ff86b8b66 100644 --- a/modules/flann/include/opencv2/flann/lsh_index.h +++ b/modules/flann/include/opencv2/flann/lsh_index.h @@ -42,7 +42,6 @@ #include #include -#include "general.h" #include "nn_index.h" #include "matrix.h" #include "result_set.h" diff --git a/modules/flann/include/opencv2/flann/matrix.h b/modules/flann/include/opencv2/flann/matrix.h index 34893b72c3..fb871bd73c 100644 --- a/modules/flann/include/opencv2/flann/matrix.h +++ b/modules/flann/include/opencv2/flann/matrix.h @@ -35,8 +35,6 @@ #include -#include "general.h" - namespace cvflann { diff --git a/modules/flann/include/opencv2/flann/nn_index.h b/modules/flann/include/opencv2/flann/nn_index.h index fbb4c7924c..f6e17d19fc 100644 --- a/modules/flann/include/opencv2/flann/nn_index.h +++ b/modules/flann/include/opencv2/flann/nn_index.h @@ -31,7 +31,6 @@ #ifndef OPENCV_FLANN_NNINDEX_H #define OPENCV_FLANN_NNINDEX_H -#include "general.h" #include "matrix.h" #include "result_set.h" #include "params.h" diff --git a/modules/flann/include/opencv2/flann/params.h b/modules/flann/include/opencv2/flann/params.h index b8f7331905..a7920d0b71 100644 --- a/modules/flann/include/opencv2/flann/params.h +++ b/modules/flann/include/opencv2/flann/params.h @@ -77,7 +77,7 @@ T get_param(const IndexParams& params, cv::String name) return it->second.cast(); } else { - throw FLANNException(cv::String("Missing parameter '")+name+cv::String("' in the parameters given")); + FLANN_THROW(cv::Error::StsBadArg, cv::String("Missing parameter '")+name+cv::String("' in the parameters given")); } } diff --git a/modules/flann/include/opencv2/flann/random.h b/modules/flann/include/opencv2/flann/random.h index 3bb48b687b..2c1809c3a9 100644 --- a/modules/flann/include/opencv2/flann/random.h +++ b/modules/flann/include/opencv2/flann/random.h @@ -37,8 +37,6 @@ #include #include -#include "general.h" - namespace cvflann { diff --git a/modules/flann/include/opencv2/flann/saving.h b/modules/flann/include/opencv2/flann/saving.h index 53359b4b7b..8b3aeb7f0a 100644 --- a/modules/flann/include/opencv2/flann/saving.h +++ b/modules/flann/include/opencv2/flann/saving.h @@ -112,11 +112,11 @@ inline IndexHeader load_header(FILE* stream) size_t read_size = fread(&header,sizeof(header),1,stream); if (read_size!=(size_t)1) { - throw FLANNException("Invalid index file, cannot read"); + FLANN_THROW(cv::Error::StsError, "Invalid index file, cannot read"); } if (strcmp(header.signature,FLANN_SIGNATURE_)!=0) { - throw FLANNException("Invalid index file, wrong signature"); + FLANN_THROW(cv::Error::StsError, "Invalid index file, wrong signature"); } return header; @@ -150,7 +150,7 @@ void load_value(FILE* stream, T& value, size_t count = 1) { size_t read_cnt = fread(&value, sizeof(value), count, stream); if (read_cnt != count) { - throw FLANNException("Cannot read from file"); + FLANN_THROW(cv::Error::StsParseError, "Cannot read from file"); } } @@ -159,12 +159,12 @@ void load_value(FILE* stream, cvflann::Matrix& value) { size_t read_cnt = fread(&value, sizeof(value), 1, stream); if (read_cnt != 1) { - throw FLANNException("Cannot read from file"); + FLANN_THROW(cv::Error::StsParseError, "Cannot read from file"); } value.data = new T[value.rows*value.cols]; read_cnt = fread(value.data, sizeof(T), value.rows*value.cols, stream); if (read_cnt != (size_t)(value.rows*value.cols)) { - throw FLANNException("Cannot read from file"); + FLANN_THROW(cv::Error::StsParseError, "Cannot read from file"); } } @@ -175,12 +175,12 @@ void load_value(FILE* stream, std::vector& value) size_t size; size_t read_cnt = fread(&size, sizeof(size_t), 1, stream); if (read_cnt!=1) { - throw FLANNException("Cannot read from file"); + FLANN_THROW(cv::Error::StsError, "Cannot read from file"); } value.resize(size); read_cnt = fread(&value[0], sizeof(T), size, stream); if (read_cnt != size) { - throw FLANNException("Cannot read from file"); + FLANN_THROW(cv::Error::StsError, "Cannot read from file"); } } diff --git a/modules/flann/src/precomp.hpp b/modules/flann/src/precomp.hpp index 099a6abce1..66de0c1a9c 100644 --- a/modules/flann/src/precomp.hpp +++ b/modules/flann/src/precomp.hpp @@ -13,7 +13,6 @@ #include "opencv2/flann/index_testing.h" #include "opencv2/flann/params.h" #include "opencv2/flann/saving.h" -#include "opencv2/flann/general.h" // index types #include "opencv2/flann/all_indices.h" From c526705f4f72fbd5720fb739ae7f01eb2d45d7b4 Mon Sep 17 00:00:00 2001 From: Francesco Petrogalli Date: Fri, 18 Dec 2020 15:08:02 +0000 Subject: [PATCH 6/7] [cv::transform] Enable CV_SIMD for the 16U case on AArch64. --- modules/core/src/matmul.simd.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/core/src/matmul.simd.hpp b/modules/core/src/matmul.simd.hpp index 38973ea1a4..c828e2906d 100644 --- a/modules/core/src/matmul.simd.hpp +++ b/modules/core/src/matmul.simd.hpp @@ -1537,7 +1537,7 @@ transform_8u( const uchar* src, uchar* dst, const float* m, int len, int scn, in static void transform_16u( const ushort* src, ushort* dst, const float* m, int len, int scn, int dcn ) { -#if CV_SIMD && !defined(__aarch64__) && !defined(_M_ARM64) +#if CV_SIMD if( scn == 3 && dcn == 3 ) { int x = 0; From a6f14ca97c2634ee21309b047d5fb140c975c483 Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Sun, 20 Dec 2020 17:42:47 +0000 Subject: [PATCH 7/7] js(build): fix generator with Python3 - class_info.props is a 'list' --- modules/js/generator/embindgen.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/js/generator/embindgen.py b/modules/js/generator/embindgen.py index 8a25e42065..c5cca14524 100644 --- a/modules/js/generator/embindgen.py +++ b/modules/js/generator/embindgen.py @@ -820,7 +820,7 @@ class JSWrapperGenerator(object): # Generate bindings for properties - for property in sorted(class_info.props): + for property in class_info.props: _class_property = class_property_enum_template if property.tp in type_dict else class_property_template class_bindings.append(_class_property.substitute(js_name=property.name, cpp_name='::'.join( [class_info.cname, property.name])))