From b7a053b0e5682f4c2bbfa9c7365df0cbbf080203 Mon Sep 17 00:00:00 2001 From: Raj Natarajan Date: Mon, 26 Dec 2016 00:44:43 -0600 Subject: [PATCH 01/54] Issue-7310: Updated imwrite doc to correct default setting for IMWRITE_PNG_COMPRESSION and clarified existing doc a bit. --- modules/imgcodecs/include/opencv2/imgcodecs.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/imgcodecs/include/opencv2/imgcodecs.hpp b/modules/imgcodecs/include/opencv2/imgcodecs.hpp index 6359de6e51..79805b2ed3 100644 --- a/modules/imgcodecs/include/opencv2/imgcodecs.hpp +++ b/modules/imgcodecs/include/opencv2/imgcodecs.hpp @@ -85,7 +85,7 @@ enum ImwriteFlags { IMWRITE_JPEG_RST_INTERVAL = 4, //!< JPEG restart interval, 0 - 65535, default is 0 - no restart. IMWRITE_JPEG_LUMA_QUALITY = 5, //!< Separate luma quality level, 0 - 100, default is 0 - don't use. IMWRITE_JPEG_CHROMA_QUALITY = 6, //!< Separate chroma quality level, 0 - 100, default is 0 - don't use. - IMWRITE_PNG_COMPRESSION = 16, //!< For PNG, it can be the compression level from 0 to 9. A higher value means a smaller size and longer compression time. Default value is 3. Also strategy is changed to IMWRITE_PNG_STRATEGY_DEFAULT (Z_DEFAULT_STRATEGY). + IMWRITE_PNG_COMPRESSION = 16, //!< For PNG, it can be the compression level from 0 to 9. A higher value means a smaller size and longer compression time. If specified, strategy is changed to IMWRITE_PNG_STRATEGY_DEFAULT (Z_DEFAULT_STRATEGY). Default value is 1 (best speed setting). IMWRITE_PNG_STRATEGY = 17, //!< One of cv::ImwritePNGFlags, default is IMWRITE_PNG_STRATEGY_DEFAULT. IMWRITE_PNG_BILEVEL = 18, //!< Binary level PNG, 0 or 1, default is 0. IMWRITE_PXM_BINARY = 32, //!< For PPM, PGM, or PBM, it can be a binary format flag, 0 or 1. Default value is 1. From d015b55e6bdd5fb923acbd6d5f868be22c8e91d5 Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Wed, 28 Dec 2016 13:06:28 +0300 Subject: [PATCH 02/54] highgui: preserve waitKey -1 return value --- modules/highgui/src/window.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/highgui/src/window.cpp b/modules/highgui/src/window.cpp index 9306f8ef5e..35ce8ca265 100644 --- a/modules/highgui/src/window.cpp +++ b/modules/highgui/src/window.cpp @@ -218,7 +218,7 @@ int cv::waitKey(int delay) if (use_legacy > 0) return code; #endif - return code & 0xff; + return (code != -1) ? (code & 0xff) : -1; } int cv::createTrackbar(const String& trackbarName, const String& winName, From 5fad2a3f24b6b1e41a4f6783decaf08967de5c0d Mon Sep 17 00:00:00 2001 From: wykvictor Date: Thu, 29 Dec 2016 16:46:35 +0800 Subject: [PATCH 03/54] Speedup MedianFilter::apply() when calling repeatedly Speedup MedianFilter::apply(), avoid to newly create the two GpuMat every time calling filter->apply(), which is very time consuming. --- modules/cudafilters/src/filtering.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/modules/cudafilters/src/filtering.cpp b/modules/cudafilters/src/filtering.cpp index 21efde0103..d01504b2dd 100644 --- a/modules/cudafilters/src/filtering.cpp +++ b/modules/cudafilters/src/filtering.cpp @@ -1068,6 +1068,8 @@ namespace private: int windowSize; int partitions; + GpuMat devHist; + GpuMat devCoarseHist; }; MedianFilter::MedianFilter(int srcType, int _windowSize, int _partitions) : @@ -1098,10 +1100,13 @@ namespace // Note - these are hardcoded in the actual GPU kernel. Do not change these values. int histSize=256, histCoarseSize=8; - - BufferPool pool(_stream); - GpuMat devHist = pool.getBuffer(1, src.cols*histSize*partitions,CV_32SC1); - GpuMat devCoarseHist = pool.getBuffer(1,src.cols*histCoarseSize*partitions,CV_32SC1); + int devHistCols = src.cols*histSize*partitions, devCoarseHistCols = src.cols*histCoarseSize*partitions; + if(devHist.empty() || devCoarseHist.empty() || devHist.cols != devHistCols || devCoarseHist.cols != devCoarseHistCols) + { + BufferPool pool(_stream); + devHist = pool.getBuffer(1, devHistCols, CV_32SC1); + devCoarseHist = pool.getBuffer(1, devCoarseHistCols, CV_32SC1); + } devHist.setTo(0, _stream); devCoarseHist.setTo(0, _stream); From c6f666a02bfc30e6dff6f2687551424701e33063 Mon Sep 17 00:00:00 2001 From: Yakun Wang Date: Thu, 29 Dec 2016 18:29:44 +0800 Subject: [PATCH 04/54] BufferPool is used for temporary buffer, use mat create directly --- modules/cudafilters/src/filtering.cpp | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/modules/cudafilters/src/filtering.cpp b/modules/cudafilters/src/filtering.cpp index d01504b2dd..1afd9cd763 100644 --- a/modules/cudafilters/src/filtering.cpp +++ b/modules/cudafilters/src/filtering.cpp @@ -1100,13 +1100,9 @@ namespace // Note - these are hardcoded in the actual GPU kernel. Do not change these values. int histSize=256, histCoarseSize=8; - int devHistCols = src.cols*histSize*partitions, devCoarseHistCols = src.cols*histCoarseSize*partitions; - if(devHist.empty() || devCoarseHist.empty() || devHist.cols != devHistCols || devCoarseHist.cols != devCoarseHistCols) - { - BufferPool pool(_stream); - devHist = pool.getBuffer(1, devHistCols, CV_32SC1); - devCoarseHist = pool.getBuffer(1, devCoarseHistCols, CV_32SC1); - } + + devHist.create(1, src.cols*histSize*partitions, CV_32SC1); + devCoarseHist.create(1, src.cols*histCoarseSize*partitions, CV_32SC1); devHist.setTo(0, _stream); devCoarseHist.setTo(0, _stream); From 579ffbf97e35527becf95f56571dce46e1182ab1 Mon Sep 17 00:00:00 2001 From: utibenkei Date: Sat, 31 Dec 2016 01:54:07 +0900 Subject: [PATCH 05/54] Added Java wrapping for tracking module --- .../misc/java/src/java/core+MatOfRect2d.java | 81 ++++++++++++++ .../core/misc/java/src/java/core+Rect2d.java | 100 ++++++++++++++++++ modules/java/generator/gen_java.py | 6 +- modules/java/generator/src/cpp/converters.cpp | 13 +++ modules/java/generator/src/cpp/converters.h | 3 + .../generator/src/java/utils+Converters.java | 37 +++++++ 6 files changed, 239 insertions(+), 1 deletion(-) create mode 100644 modules/core/misc/java/src/java/core+MatOfRect2d.java create mode 100644 modules/core/misc/java/src/java/core+Rect2d.java diff --git a/modules/core/misc/java/src/java/core+MatOfRect2d.java b/modules/core/misc/java/src/java/core+MatOfRect2d.java new file mode 100644 index 0000000000..71c4b1aef6 --- /dev/null +++ b/modules/core/misc/java/src/java/core+MatOfRect2d.java @@ -0,0 +1,81 @@ +package org.opencv.core; + +import java.util.Arrays; +import java.util.List; + + +public class MatOfRect2d extends Mat { + // 64FC4 + private static final int _depth = CvType.CV_64F; + private static final int _channels = 4; + + public MatOfRect2d() { + super(); + } + + protected MatOfRect2d(long addr) { + super(addr); + if( !empty() && checkVector(_channels, _depth) < 0 ) + throw new IllegalArgumentException("Incompatible Mat"); + //FIXME: do we need release() here? + } + + public static MatOfRect2d fromNativeAddr(long addr) { + return new MatOfRect2d(addr); + } + + public MatOfRect2d(Mat m) { + super(m, Range.all()); + if( !empty() && checkVector(_channels, _depth) < 0 ) + throw new IllegalArgumentException("Incompatible Mat"); + //FIXME: do we need release() here? + } + + public MatOfRect2d(Rect2d...a) { + super(); + fromArray(a); + } + + public void alloc(int elemNumber) { + if(elemNumber>0) + super.create(elemNumber, 1, CvType.makeType(_depth, _channels)); + } + + public void fromArray(Rect2d...a) { + if(a==null || a.length==0) + return; + int num = a.length; + alloc(num); + double buff[] = new double[num * _channels]; + for(int i=0; i lr) { + Rect2d ap[] = lr.toArray(new Rect2d[0]); + fromArray(ap); + } + + public List toList() { + Rect2d[] ar = toArray(); + return Arrays.asList(ar); + } +} diff --git a/modules/core/misc/java/src/java/core+Rect2d.java b/modules/core/misc/java/src/java/core+Rect2d.java new file mode 100644 index 0000000000..cb83a97727 --- /dev/null +++ b/modules/core/misc/java/src/java/core+Rect2d.java @@ -0,0 +1,100 @@ +package org.opencv.core; + +//javadoc:Rect2d_ +public class Rect2d { + + public double x, y, width, height; + + public Rect2d(double x, double y, double width, double height) { + this.x = x; + this.y = y; + this.width = width; + this.height = height; + } + + public Rect2d() { + this(0, 0, 0, 0); + } + + public Rect2d(Point p1, Point p2) { + x = (double) (p1.x < p2.x ? p1.x : p2.x); + y = (double) (p1.y < p2.y ? p1.y : p2.y); + width = (double) (p1.x > p2.x ? p1.x : p2.x) - x; + height = (double) (p1.y > p2.y ? p1.y : p2.y) - y; + } + + public Rect2d(Point p, Size s) { + this((double) p.x, (double) p.y, (double) s.width, (double) s.height); + } + + public Rect2d(double[] vals) { + set(vals); + } + + public void set(double[] vals) { + if (vals != null) { + x = vals.length > 0 ? (double) vals[0] : 0; + y = vals.length > 1 ? (double) vals[1] : 0; + width = vals.length > 2 ? (double) vals[2] : 0; + height = vals.length > 3 ? (double) vals[3] : 0; + } else { + x = 0; + y = 0; + width = 0; + height = 0; + } + } + + public Rect2d clone() { + return new Rect2d(x, y, width, height); + } + + public Point tl() { + return new Point(x, y); + } + + public Point br() { + return new Point(x + width, y + height); + } + + public Size size() { + return new Size(width, height); + } + + public double area() { + return width * height; + } + + public boolean contains(Point p) { + return x <= p.x && p.x < x + width && y <= p.y && p.y < y + height; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + long temp; + temp = Double.doubleToLongBits(height); + result = prime * result + (int) (temp ^ (temp >>> 32)); + temp = Double.doubleToLongBits(width); + result = prime * result + (int) (temp ^ (temp >>> 32)); + temp = Double.doubleToLongBits(x); + result = prime * result + (int) (temp ^ (temp >>> 32)); + temp = Double.doubleToLongBits(y); + result = prime * result + (int) (temp ^ (temp >>> 32)); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (!(obj instanceof Rect2d)) return false; + Rect2d it = (Rect2d) obj; + return x == it.x && y == it.y && width == it.width && height == it.height; + } + + @Override + public String toString() { + return "{" + x + ", " + y + ", " + width + "x" + height + "}"; + } +} diff --git a/modules/java/generator/gen_java.py b/modules/java/generator/gen_java.py index fc8cc1440b..3c8da0b450 100755 --- a/modules/java/generator/gen_java.py +++ b/modules/java/generator/gen_java.py @@ -207,6 +207,7 @@ type_dict = { "vector_KeyPoint" : { "j_type" : "MatOfKeyPoint", "jn_type" : "long", "jni_type" : "jlong", "jni_var" : "std::vector %(n)s", "suffix" : "J" }, "vector_DMatch" : { "j_type" : "MatOfDMatch", "jn_type" : "long", "jni_type" : "jlong", "jni_var" : "std::vector %(n)s", "suffix" : "J" }, "vector_Rect" : { "j_type" : "MatOfRect", "jn_type" : "long", "jni_type" : "jlong", "jni_var" : "std::vector %(n)s", "suffix" : "J" }, + "vector_Rect2d" : { "j_type" : "MatOfRect2d", "jn_type" : "long", "jni_type" : "jlong", "jni_var" : "std::vector %(n)s", "suffix" : "J" }, "vector_uchar" : { "j_type" : "MatOfByte", "jn_type" : "long", "jni_type" : "jlong", "jni_var" : "std::vector %(n)s", "suffix" : "J" }, "vector_char" : { "j_type" : "MatOfByte", "jn_type" : "long", "jni_type" : "jlong", "jni_var" : "std::vector %(n)s", "suffix" : "J" }, "vector_int" : { "j_type" : "MatOfInt", "jn_type" : "long", "jni_type" : "jlong", "jni_var" : "std::vector %(n)s", "suffix" : "J" }, @@ -261,6 +262,9 @@ type_dict = { "Rect" : { "j_type" : "Rect", "jn_args" : (("int", ".x"), ("int", ".y"), ("int", ".width"), ("int", ".height")), "jni_var" : "Rect %(n)s(%(n)s_x, %(n)s_y, %(n)s_width, %(n)s_height)", "jni_type" : "jdoubleArray", "suffix" : "IIII"}, + "Rect2d" : { "j_type" : "Rect2d", "jn_args" : (("double", ".x"), ("double", ".y"), ("double", ".width"), ("double", ".height")), + "jni_var" : "Rect %(n)s(%(n)s_x, %(n)s_y, %(n)s_width, %(n)s_height)", "jni_type" : "jdoubleArray", + "suffix" : "DDDD"}, "Size" : { "j_type" : "Size", "jn_args" : (("double", ".width"), ("double", ".height")), "jni_var" : "Size %(n)s((int)%(n)s_width, (int)%(n)s_height)", "jni_type" : "jdoubleArray", "suffix" : "DD"}, @@ -825,7 +829,7 @@ class ClassInfo(GeneralInfo): j_type = type_dict[ctype]['j_type'] elif ctype in ("Algorithm"): j_type = ctype - if j_type in ( "CvType", "Mat", "Point", "Point3", "Range", "Rect", "RotatedRect", "Scalar", "Size", "TermCriteria", "Algorithm" ): + if j_type in ( "CvType", "Mat", "Point", "Point3", "Range", "Rect", "Rect2d", "RotatedRect", "Scalar", "Size", "TermCriteria", "Algorithm" ): self.imports.add("org.opencv.core." + j_type) if j_type == 'String': self.imports.add("java.lang.String") diff --git a/modules/java/generator/src/cpp/converters.cpp b/modules/java/generator/src/cpp/converters.cpp index 3c771ce734..7ce7456525 100644 --- a/modules/java/generator/src/cpp/converters.cpp +++ b/modules/java/generator/src/cpp/converters.cpp @@ -92,6 +92,19 @@ void vector_Rect_to_Mat(std::vector& v_rect, Mat& mat) mat = Mat(v_rect, true); } +//vector_Rect2d + +void Mat_to_vector_Rect2d(Mat& mat, std::vector& v_rect) +{ + v_rect.clear(); + CHECK_MAT(mat.type()==CV_64FC4 && mat.cols==1); + v_rect = (std::vector) mat; +} + +void vector_Rect2d_to_Mat(std::vector& v_rect, Mat& mat) +{ + mat = Mat(v_rect, true); +} //vector_Point void Mat_to_vector_Point(Mat& mat, std::vector& v_point) diff --git a/modules/java/generator/src/cpp/converters.h b/modules/java/generator/src/cpp/converters.h index 257f9449e3..25077b10c2 100644 --- a/modules/java/generator/src/cpp/converters.h +++ b/modules/java/generator/src/cpp/converters.h @@ -19,6 +19,9 @@ void vector_char_to_Mat(std::vector& v_char, cv::Mat& mat); void Mat_to_vector_Rect(cv::Mat& mat, std::vector& v_rect); void vector_Rect_to_Mat(std::vector& v_rect, cv::Mat& mat); +void Mat_to_vector_Rect2d(cv::Mat& mat, std::vector& v_rect); +void vector_Rect2d_to_Mat(std::vector& v_rect, cv::Mat& mat); + void Mat_to_vector_Point(cv::Mat& mat, std::vector& v_point); void Mat_to_vector_Point2f(cv::Mat& mat, std::vector& v_point); diff --git a/modules/java/generator/src/java/utils+Converters.java b/modules/java/generator/src/java/utils+Converters.java index bd3bb64927..c0575a6665 100644 --- a/modules/java/generator/src/java/utils+Converters.java +++ b/modules/java/generator/src/java/utils+Converters.java @@ -14,6 +14,7 @@ import org.opencv.core.MatOfPoint3f; import org.opencv.core.Point; import org.opencv.core.Point3; import org.opencv.core.Rect; +import org.opencv.core.Rect2d; import org.opencv.core.DMatch; import org.opencv.core.KeyPoint; @@ -435,6 +436,42 @@ public class Converters { } } + public static Mat vector_Rect2d_to_Mat(List rs) { + Mat res; + int count = (rs != null) ? rs.size() : 0; + if (count > 0) { + res = new Mat(count, 1, CvType.CV_64FC4); + double[] buff = new double[4 * count]; + for (int i = 0; i < count; i++) { + Rect2d r = rs.get(i); + buff[4 * i] = r.x; + buff[4 * i + 1] = r.y; + buff[4 * i + 2] = r.width; + buff[4 * i + 3] = r.height; + } + res.put(0, 0, buff); + } else { + res = new Mat(); + } + return res; + } + + public static void Mat_to_vector_Rect2d(Mat m, List rs) { + if (rs == null) + throw new java.lang.IllegalArgumentException("rs == null"); + int count = m.rows(); + if (CvType.CV_64FC4 != m.type() || m.cols() != 1) + throw new java.lang.IllegalArgumentException( + "CvType.CV_64FC4 != m.type() || m.rows()!=1\n" + m); + + rs.clear(); + double[] buff = new double[4 * count]; + m.get(0, 0, buff); + for (int i = 0; i < count; i++) { + rs.add(new Rect2d(buff[4 * i], buff[4 * i + 1], buff[4 * i + 2], buff[4 * i + 3])); + } + } + public static Mat vector_KeyPoint_to_Mat(List kps) { Mat res; int count = (kps != null) ? kps.size() : 0; From 1c3b9d75911819f951654db8bafcd696196d649f Mon Sep 17 00:00:00 2001 From: Duncan Barber Date: Wed, 4 Jan 2017 21:24:25 +0000 Subject: [PATCH 06/54] Tiny documentation fix in stereoCalibrate Modified the (R2,T2) computation documentation in the stereoCalibrate function documentation to display on two lines for clarity --- modules/calib3d/include/opencv2/calib3d.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/calib3d/include/opencv2/calib3d.hpp b/modules/calib3d/include/opencv2/calib3d.hpp index 362e81f8bf..5a0e020d31 100644 --- a/modules/calib3d/include/opencv2/calib3d.hpp +++ b/modules/calib3d/include/opencv2/calib3d.hpp @@ -979,8 +979,8 @@ This means that, given ( \f$R_1\f$,\f$T_1\f$ ), it should be possible to compute need to know the position and orientation of the second camera relative to the first camera. This is what the described function does. It computes ( \f$R\f$,\f$T\f$ ) so that: -\f[R_2=R*R_1 -T_2=R*T_1 + T,\f] +\f[R_2=R*R_1\f] +\f[T_2=R*T_1 + T,\f] Optionally, it computes the essential matrix E: From d33d37ffd9af0367aa3ee637a3f4252ac1271930 Mon Sep 17 00:00:00 2001 From: Tetragramm Date: Wed, 4 Jan 2017 18:38:46 -0600 Subject: [PATCH 07/54] Add check for all zero moments. If one of the shapes is empty, the match would return zero distance between the shapes even when the other one had content. It now returns DBL_MAX if no moments had value. --- modules/imgproc/src/matchcontours.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/modules/imgproc/src/matchcontours.cpp b/modules/imgproc/src/matchcontours.cpp index 1a371677bf..f848bd59a8 100644 --- a/modules/imgproc/src/matchcontours.cpp +++ b/modules/imgproc/src/matchcontours.cpp @@ -50,6 +50,7 @@ double cv::matchShapes(InputArray contour1, InputArray contour2, int method, dou double eps = 1.e-5; double mmm; double result = 0; + bool anyResults = false; HuMoments( moments(contour1), ma ); HuMoments( moments(contour2), mb ); @@ -80,6 +81,7 @@ double cv::matchShapes(InputArray contour1, InputArray contour2, int method, dou ama = 1. / (sma * log10( ama )); amb = 1. / (smb * log10( amb )); result += fabs( -ama + amb ); + anyResults = true; } } break; @@ -108,6 +110,7 @@ double cv::matchShapes(InputArray contour1, InputArray contour2, int method, dou ama = sma * log10( ama ); amb = smb * log10( amb ); result += fabs( -ama + amb ); + anyResults = true; } } break; @@ -138,6 +141,7 @@ double cv::matchShapes(InputArray contour1, InputArray contour2, int method, dou mmm = fabs( (ama - amb) / ama ); if( result < mmm ) result = mmm; + anyResults = true; } } break; @@ -145,6 +149,9 @@ double cv::matchShapes(InputArray contour1, InputArray contour2, int method, dou CV_Error( CV_StsBadArg, "Unknown comparison method" ); } + if (!anyResults) + result = DBL_MAX; + return result; } From a891caa755595b00f68b69462af07d3d3cbad2d2 Mon Sep 17 00:00:00 2001 From: catree Date: Thu, 5 Jan 2017 16:05:53 +0100 Subject: [PATCH 08/54] Use directly the doxygen snippet command for the Changing the contrast and brightness of an image tutorial. Extend the tutorial with a pratical example and with a gamma correction method to adjust the brightness of an image. --- .../basic_linear_transform.markdown | 160 ++++++++++-------- .../Basic_Linear_Transform_Tutorial_gamma.png | Bin 0 -> 92059 bytes ...ar_Transform_Tutorial_gamma_correction.jpg | Bin 0 -> 276052 bytes ...c_Linear_Transform_Tutorial_hist_alpha.png | Bin 0 -> 3192 bytes ...ic_Linear_Transform_Tutorial_hist_beta.png | Bin 0 -> 3531 bytes ...r_Transform_Tutorial_histogram_compare.png | Bin 0 -> 1448 bytes ...m_Tutorial_linear_transform_correction.jpg | Bin 0 -> 227228 bytes .../ImgProc/BasicLinearTransforms.cpp | 75 ++++---- .../changing_contrast_brightness_image.cpp | 91 ++++++++++ 9 files changed, 220 insertions(+), 106 deletions(-) create mode 100644 doc/tutorials/core/basic_linear_transform/images/Basic_Linear_Transform_Tutorial_gamma.png create mode 100644 doc/tutorials/core/basic_linear_transform/images/Basic_Linear_Transform_Tutorial_gamma_correction.jpg create mode 100644 doc/tutorials/core/basic_linear_transform/images/Basic_Linear_Transform_Tutorial_hist_alpha.png create mode 100644 doc/tutorials/core/basic_linear_transform/images/Basic_Linear_Transform_Tutorial_hist_beta.png create mode 100644 doc/tutorials/core/basic_linear_transform/images/Basic_Linear_Transform_Tutorial_histogram_compare.png create mode 100644 doc/tutorials/core/basic_linear_transform/images/Basic_Linear_Transform_Tutorial_linear_transform_correction.jpg create mode 100644 samples/cpp/tutorial_code/ImgProc/changing_contrast_brightness_image/changing_contrast_brightness_image.cpp diff --git a/doc/tutorials/core/basic_linear_transform/basic_linear_transform.markdown b/doc/tutorials/core/basic_linear_transform/basic_linear_transform.markdown index bb0ffd8978..05dd4db13f 100644 --- a/doc/tutorials/core/basic_linear_transform/basic_linear_transform.markdown +++ b/doc/tutorials/core/basic_linear_transform/basic_linear_transform.markdown @@ -10,6 +10,7 @@ In this tutorial you will learn how to: - Initialize a matrix with zeros - Learn what @ref cv::saturate_cast does and why it is useful - Get some cool info about pixel transformations +- Improve the brightness of an image on a practical example Theory ------ @@ -53,87 +54,29 @@ Code ---- - The following code performs the operation \f$g(i,j) = \alpha \cdot f(i,j) + \beta\f$ : -@code{.cpp} -#include -#include - -using namespace cv; - -double alpha; /*< Simple contrast control */ -int beta; /*< Simple brightness control */ - -int main( int argc, char** argv ) -{ - /// Read image given by user - Mat image = imread( argv[1] ); - Mat new_image = Mat::zeros( image.size(), image.type() ); - - /// Initialize values - std::cout<<" Basic Linear Transforms "<>alpha; - std::cout<<"* Enter the beta value [0-100]: "; std::cin>>beta; - - /// Do the operation new_image(i,j) = alpha*image(i,j) + beta - for( int y = 0; y < image.rows; y++ ) { - for( int x = 0; x < image.cols; x++ ) { - for( int c = 0; c < 3; c++ ) { - new_image.at(y,x)[c] = - saturate_cast( alpha*( image.at(y,x)[c] ) + beta ); - } - } - } - - /// Create Windows - namedWindow("Original Image", 1); - namedWindow("New Image", 1); - - /// Show stuff - imshow("Original Image", image); - imshow("New Image", new_image); - - /// Wait until user press some key - waitKey(); - return 0; -} -@endcode +@include BasicLinearTransforms.cpp Explanation ----------- -# We begin by creating parameters to save \f$\alpha\f$ and \f$\beta\f$ to be entered by the user: - @code{.cpp} - double alpha; - int beta; - @endcode + @snippet BasicLinearTransforms.cpp basic-linear-transform-parameters + -# We load an image using @ref cv::imread and save it in a Mat object: - @code{.cpp} - Mat image = imread( argv[1] ); - @endcode + @snippet BasicLinearTransforms.cpp basic-linear-transform-load -# Now, since we will make some transformations to this image, we need a new Mat object to store it. Also, we want this to have the following features: - Initial pixel values equal to zero - Same size and type as the original image - @code{.cpp} - Mat new_image = Mat::zeros( image.size(), image.type() ); - @endcode + @snippet BasicLinearTransforms.cpp basic-linear-transform-output We observe that @ref cv::Mat::zeros returns a Matlab-style zero initializer based on *image.size()* and *image.type()* -# Now, to perform the operation \f$g(i,j) = \alpha \cdot f(i,j) + \beta\f$ we will access to each pixel in image. Since we are operating with BGR images, we will have three values per pixel (B, G and R), so we will also access them separately. Here is the piece of code: - @code{.cpp} - for( int y = 0; y < image.rows; y++ ) { - for( int x = 0; x < image.cols; x++ ) { - for( int c = 0; c < 3; c++ ) { - new_image.at(y,x)[c] = - saturate_cast( alpha*( image.at(y,x)[c] ) + beta ); - } - } - } - @endcode + @snippet BasicLinearTransforms.cpp basic-linear-transform-operation Notice the following: - To access each pixel in the images we are using this syntax: *image.at\(y,x)[c]* where *y* is the row, *x* is the column and *c* is R, G or B (0, 1 or 2). @@ -142,15 +85,7 @@ Explanation values are valid. -# Finally, we create windows and show the images, the usual way. - @code{.cpp} - namedWindow("Original Image", 1); - namedWindow("New Image", 1); - - imshow("Original Image", image); - imshow("New Image", new_image); - - waitKey(0); - @endcode + @snippet BasicLinearTransforms.cpp basic-linear-transform-display @note Instead of using the **for** loops to access each pixel, we could have simply used this command: @@ -176,3 +111,82 @@ Result - We get this: ![](images/Basic_Linear_Transform_Tutorial_Result_big.jpg) + +Practical example +---- + +In this paragraph, we will put into practice what we have learned to correct an underexposed image by adjusting the brightness +and the contrast of the image. We will also see another technique to correct the brightness of an image called +gamma correction. + +### Brightness and contrast adjustments + +Increasing (/ decreasing) the \f$\beta\f$ value will add (/ subtract) a constant value to every pixel. Pixel values outside of the [0 ; 255] +range will be saturated (i.e. a pixel value higher (/ lesser) than 255 (/ 0) will be clamp to 255 (/ 0)). + +![In light gray, histogram of the original image, in dark gray when brightness = 80 in Gimp](images/Basic_Linear_Transform_Tutorial_hist_beta.png) + +The histogram represents for each color level the number of pixels with that color level. A dark image will have many pixels with +low color value and thus the histogram will present a peak in his left part. When adding a constant bias, the histogram is shifted to the +right as we have added a constant bias to all the pixels. + +The \f$\alpha\f$ parameter will modify how the levels spread. If \f$ \alpha < 1 \f$, the color levels will be compressed and the result +will be an image with less contrast. + +![In light gray, histogram of the original image, in dark gray when contrast < 0 in Gimp](images/Basic_Linear_Transform_Tutorial_hist_alpha.png) + +Note that these histograms have been obtained using the Brightness-Contrast tool in the Gimp software. The brightness tool should be +identical to the \f$\beta\f$ bias parameters but the contrast tool seems to differ to the \f$\alpha\f$ gain where the output range +seems to be centered with Gimp (as you can notice in the previous histogram). + +It can occur that playing with the \f$\beta\f$ bias will improve the brightness but in the same time the image will appear with a +slight veil as the contrast will be reduced. The \f$\alpha\f$ gain can be used to diminue this effect but due to the saturation, +we will lose some details in the original bright regions. + +### Gamma correction + +[Gamma correction](https://en.wikipedia.org/wiki/Gamma_correction) can be used to correct the brightness of an image by using a non +linear transformation between the input values and the mapped output values: + +\f[O = \left( \frac{I}{255} \right)^{\gamma} \times 255\f] + +As this relation is non linear, the effect will not be the same for all the pixels and will depend to their original value. + +![Plot for different values of gamma](images/Basic_Linear_Transform_Tutorial_gamma.png) + +When \f$ \gamma < 1 \f$, the original dark regions will be brighter and the histogram will be shifted to the right whereas it will +be the opposite with \f$ \gamma > 1 \f$. + +### Correct an underexposed image + +The following image has been corrected with: \f$ \alpha = 1.3 \f$ and \f$ \beta = 40 \f$. + +![By Visem (Own work) [CC BY-SA 3.0], via Wikimedia Commons](images/Basic_Linear_Transform_Tutorial_linear_transform_correction.jpg) + +The overall brightness has been improved but you can notice that the clouds are now greatly saturated due to the numerical saturation +of the implementation used. A custom method that preserves the original color range can of course be implemented instead. + +The following image has been corrected with: \f$ \gamma = 0.4 \f$. + +![By Visem (Own work) [CC BY-SA 3.0], via Wikimedia Commons](images/Basic_Linear_Transform_Tutorial_gamma_correction.jpg) + +The gamma correction should tend to add less saturation effect but should introduce some other type of color artifacts instead. + +![Left: histogram after alpha, beta correction ; Center: histogram of the original image ; Right: histogram after the gamma correction](images/Basic_Linear_Transform_Tutorial_histogram_compare.png) + +The previous figure compares the histograms for the three images (the y-ranges are not the same between the three histograms). +You can notice that most of the pixel values are in the lower part of the histogram for the original image. After \f$ \alpha \f$, +\f$ \beta \f$ correction, we can observe a big peak at 255 due to the saturation as well as a shift in the right. +After gamma correction, the histogram is shifted to the right but the pixels in the dark regions are more shifted +(see the gamma curves [figure](Basic_Linear_Transform_Tutorial_gamma.png)) than those in the bright regions. + +In this tutorial, you have seen two simple methods to adjust the contrast and the brightness of an image. **They are basic techniques +and are not intended to be used as a replacement of a raster graphics editor!** + +### Code + +Code for the tutorial is [here](changing_contrast_brightness_image.cpp). Code for the gamma correction: + +@snippet changing_contrast_brightness_image.cpp changing-contrast-brightness-gamma-correction + +A look-up table is used to improve the performance of the computation as only 256 values needs to be calculated once. diff --git a/doc/tutorials/core/basic_linear_transform/images/Basic_Linear_Transform_Tutorial_gamma.png b/doc/tutorials/core/basic_linear_transform/images/Basic_Linear_Transform_Tutorial_gamma.png new file mode 100644 index 0000000000000000000000000000000000000000..50cd5860accf411687c149d2635ec48a0b3de8ab GIT binary patch literal 92059 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 z∓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 KlBH&T_5T3A=`S(> literal 0 HcmV?d00001 diff --git a/doc/tutorials/core/basic_linear_transform/images/Basic_Linear_Transform_Tutorial_gamma_correction.jpg b/doc/tutorials/core/basic_linear_transform/images/Basic_Linear_Transform_Tutorial_gamma_correction.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7ade82d85e07f979e60a6c68b0e9d28bbebd2efd GIT binary patch literal 276052 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≥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

=>AX%)Wi@?XN}c_q*8cI~lQ2>g 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%0DK^i$VUh}C+$VJPFX|1&tH{~ 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

71E(^+B z@y^VzU%8z*;A1AY#d7XAkvSocX_mz}hE~5k&P`eFV!&)N?-{7k&BRfRXECM?R!YBO z8O>R$)vLr$7S-}&7>$@tAf?#{JZb^K1|4gQ@e%I%r@JfE%Vo!zvjE9gxMkCYL!1nw zPei2}J0f>4DJz=of6w_2@Xdr(cy748Tn`;WZMpe_=$*?h>}GnfoZ=`Sz2{K{idD zx`v0mbr0nEFt@QkRDX2sgi&X))VNCNR2cTE^xcr|9ZIK}V% znM2%WZrsMumJV@_@NOml09tAsuXq}=WLo3r9(ac>0e|G<;ywW;)b{ete*XZJhB8UC z#+!Sr*#a6=+Se5bP6^0F0|i7L?N!}x-cicVxXkH(pdrc%BrfJOha>F_6I03i5irdU zh>My%=ayYmCUx-ldqX553OoJ0%fndVXmW)@vyCqNeZ=_~sk=S+Ig~R?DIPnfSYQUV zY%1m_;72-)(Z{n8cS|S|L}R?S%yZaSIjBWa&@taWA&_&t{{S-$Q{{UXn^aKV><|nI+GKM>Y zNmSUGH6&}f0kvSIGBV|8rw+gJy@|aa5m8u_3bMo~HoF_#QvpTSq>9MBQfP_QBF_$r zmUK_KYWOV7T06Y63wUIA9`PAw+iNKWPjDtrc3Cg?34Bg%)Cx2(cEE@lp)nZrNC?O;}DcN%?OVu za<=AbxaKWzS&2utb6nzB@&hy=h|#gcCE89oVYV-}3aY`wEqxk;4-W)d5qJxCDR%B+ z@jS;3b1iwCw8Il9Sha>2qnATE+g#HAS!UMfunzR*wFKcsqTuW=SX$0pOiDH7omFUH7A*(u9htb7)@SxcL02Sghn2;`^oHvJA>#0`?7h$Z|S@RDRm0c)e z9b3Fr{L-daaK1+RQB02IhZ_y&4D)WvJR-KM0v3Z&Ue>eW(vTuaMVxjd`aLs2F{iQg<^>6Pjqg){Upq)cGc>e&B$ga7E)}|Hj$=y3v zFCwszzj-Sm9o@3LpytND;2f0s*#7_$^kA&CRiE4{G#o4+8=J0^vO2ix!AWbpS6o2$ z+`}uy$|poJ@Mrj!K7(^Z$8!cqBPe^$B^VF)FrX-s{7e44RSYy%Z}DF+H()_dPX7RC zRM4sy@ZO08HPT`2PUeh^9uv@&54&F_EY8Gxo}dTf*z(?q~42Sa(=4 zQtYi|Um5=ZZeQK@+qWA0Oku30lviI6jioMUMiA2Ou4b25i1LE7w= z=s1=<;fbvkvd#^RYnhtzUN*1?6DwA$8HrRFPq3fVH7vcBHvL7fG6*@v{6?Kufah8G zZXa32ORs$K_bOLh%D?tLrn3$dru=-sMiDm%*^#p?V5nxQ8-vRO-0~@4aF!dc4^s^$ zr3$&4S3KU*rKzPrt5h^$d&Y&e%+7L(=@3JgB}OR%>m3=tXfb?47cEPLPEjCt2(`_5 z@7@=5pt>1VrEVftF0!(YA&FISZAPKB4Qk^ou(LKz8mYup(hy+c?%<_Vw)ej=*{MZ3 zp2I9UJp%Ov;xgElg+}om5|y!usbHO*!reUFq}g)-Ivb8aIT?ByYAnVR96z%G6W$LS zj=PV^Wn+S7g=o!&fa4}qVGox@T;w$Ir`I#I<6-9^R z4crRU4a!;$D5~lS=P^55^1=s%2r`MCOjLI2TKFYb+T#3N0|nl*SjPN9orKRNnQyK0 z)T2FHe|KIXF?kovY%j9h*qjS#^ItH%R2PE;8X774J)kuQM>qcfP^thxQxd@OfL;gz zDWb8&Q3DTZM8T8tOq;WL8@|W!0&^f11({}_fA{YTaT}^_RrvhExSt1{;}KIvnxDT} z-}NwJ953G-H84y_UZ+(76W$LSj=PS}cz72w zYKqqVx8lxWDHz=;z#ll^h-zM|({y9_g$~6yp4b=McNyy)W^UX+%?2>&B&23~0iw52E1xFu8%<_RTmx{scy)#0Q{{{V(l0Pj~VX7O3LY`84@ha~3N z3R!o1vJlZ7buN8eyWuP5X_`T-W5lxMR$!1y^deh0y&(<(X~CJ)tzxvaZUN-O}b2S|13T{0Xbx8W`pZ#6k>54E>W)G(8v8 z+uZjkmlZR_6tmvn!d+Qrf+bR1`e6l(5t9$Z+B#+0BJms?O(SXVDMoS@W3QQ!tZ9K> zE+!j7crO0{*A-SLj&r!@lsK1K)`pEhJ1aF*tRsL;o@G{m@Cl#q;faOn{{H~oL1cuU z7j+VATK4_S>aj6`-{sfT!$j=1OvtQmqm7{jO-uHJ2%=St(qoakwo>VG{ZBIUI-m+n z1PDP$q0@fwwrQ@`{{VP_9lWVIr|_5m@<34rUH$-X>tw3QZnm{S-XLqinSvQszfTcO3a4qGk`w81{r{ zLz!X}WvCcd@w)#2T&sM6s6}n_PgNO=cCuCUr@vL0-@@LW`-q`{=KYV%vQQAo&%eLL zVl%ciJGdQmNze; zlwa`2iIm)`8p~JIw%#|3L(Wh#k&A5Zknw=dqQOeHJkvO;b-0fSvY1@kv~s}1a#L3; zlq#Duf-z(~mAAMiR5mkra>W+P#${X62?{)lU8X866FeAZN;CMBuwk$w++p(S2Eu!n zDW~Qj++2Bq)8bIal2etUdk2Y70B{y$s|L>gp$ME8#K@i*t2jt@TY2_}MUwF-m^opC zGc^Jb+ICzRIOcU3^l;+7Ze4d8?VK|y=3IO)?+wl(gF21jaAM`Cd-3)47RA7AGNYn@ za{iMhV7t@ATt>GsshLu-S}RnqxvOg6*4mUbul?#O@PE%~suSKi!Ig-03USWgGYu5- z&tW*kHNk%p>Zo2hi>qT~yvkjkWY-X|h55CrpPHT~CjBvA2<@>z*m&-HjLJI=i~isy zCrXI}SKPzY$c;((kKS#ZZ%He=NE@nM8*X#xH7$&|i1Qd~TP~&gCCsX0{Sm{&D<)eU z%vS~7@yBjG;p>rBd0jBajZm}sVMqhXN3eV98S^KVyu&=O#2Dr5yZ-EbU zh@jv_ER+pgMNo6Itd)I#u4QJZ>|OI*ej>WU>$tb!nU^dp!3&1}0OY3kHDeNqQkQEH zQ*2Vc=4PmRTOZ0brnoWtzuiHq!2TDc{{Rq25r-`NOK2jgx`A6wDwlq5`IT=14t$jV z01y=tE>}Kvypba5lOtDB(x$wYEz|s>jLK2X4zK;~6Q)aTa{G4@c&SjEmpIuyIP+z5 z+|%-1CQQaCTzpn4!aHNIRrV>0>kMn@maqz$;J64@oYBxnavbi z04U2hEGuqjYI{c(R&+#Vcsb@56eW{{LCHj03Y$Gl?_u>fMgg{t*Xj*4dk5BP|; z^byQN4t&mPI|*J#JD>V_clYHh{F20S+xxR~i+^}){27>tRM7XC6v6C?O*#?NGIm7@ zoTjl-EgpVngY^I=g`>sB3u*E7MMHeW>IfpHAZGpS-th zZdvgfwq!_FF(@c}LMjGk1~DnAmvZV|dIiL&aY}OoIFWg6&j%lJxQsZetV$*baMk|& zW>6b}V9WWAF~>Mupq4jFmTtVqIe`p0!%@41-qwF`Kwvl)?v4Ha`@ysYJLG1tU*r3kjytep&iaQdYXw^Q%l^4@L%cCw*}E|j3c~RH{{Za5;c~y2*a*qM z_}$mUTU7Edstxn`e9Od}WTE8b{-amV31X&2fAtG1)L>t_2F(8e$OTxUrsG>7h=GyQ z3K_EkjWtKV)aI*Mhy)enc$q{vYm`vV8FIL85&Ph0fks82Ft>w~Yeo5~vBkf~MgalE zTx6-ayxiU0!(PNG%%9r-0D<`b0F!S&Lb|E`0X^=9xJ0O|RJTzbn0w!jWtkPwQwLON z+ian6No%wIOWe}gYC?#Vf?w~5$FOV&tc)`9iaa?Oa0`9)GtXBXAHDDSiYef}<#X zqidbV-`W{^ajAu?xLwMLRsR69EgFwPVXGCXgD+135`$+cpi)Y};^h$VYCXkFPLuFb z%8$f-f5`509G|?y`u=6faK%M7#Qo3i&ED>QVx;D;xHO?pQrM9$Z#oWHip?gM(^%A^ z^GTMmrsY>9J&={|I5j$lm#BnRET3FIhv@eo?3H_u?-8d8Io4P;g~Ur=5H6e#nS%}` z)+-%R0g76T{{RxA&^gTI>7rd{>Sc@-y7wc{HexD`VBlB|{{R#DO{Xwly^Gj~iEe1S z%q;>j!eQ=MkAW}&k7#xuC~7!z!6)AL@eMsDQ-ETlE^bym8%?%FrUS)7!%XqK7b_;( z-crg_fy~XJZ5O8eKw+0oNBm{yuwh}^R)6*o^SL@jNYKAA>N+p4e0;#g$S~~ahJ4D) zueg@UaJH&3>OCg$U(XWOuJS8}XvcO|A=8hgJ>GxhAVGrnM;-MkRtk6#2q*~pDjv`Z z(##d8?<#ym&FkIK8uIYIDu?YXuA!w(S8e)^O*U-ikWju)-YOL$RiIqj4Q6U6P-$Gv zM3Hi2Y6uBi*FMDC?$6B0DHoCZ7-?q1*`FP2;umb0?!y!+0b!=Rfd0&RGFbsJ?aL}U zd5A+Z1TKwaY=KH>^o}lN0-~`8ml&voRxE=FrxSdL&+tecw_iK{?r=+W-VFZ$K`2_w z`^5a9_zIt2w4$shB**m-f9d+anT^*0rPoX*(1RlNiimv*?geC|$~++xsmkU4r&Bou zY%G$v<|MM$TE@OL)O{Yn&ljKf)Zg`E+tHp7)6OPRye7-3d*vv)y7|d2+6=&_GVSW32I~@*89d7y&ZBIV z8`$NkRZO~$T^ALzAC3-BkI>)XcQbX_`^Ek?;!`PP!M{vCZ{3PCvcQ3MvhHObxFy}p zIcO9iz{=94r?(NE?V#vrcx@zbIIZA*x>NSKJ9G zaf0WYxopa{X8e$Yp0F-zD;BTJKdx~c5D*pPOHpRTg}x$7X4m5{n4DHiN4)+e-;Yw? zzxn1n;V_6_lUbArjl^1*qa0sS=Is(XF@xYHPbKZD3T|XDuNwaVe$TAD1{(38J(nm2 zJQGizRzxXbHS*we*FQ1(UidN3WTLU;>$`??302;K@reE z)S~0!V?)HhU>mYqRqPH-bxCRrK9QuHu3|}N&g2LeSVkcL9=0%3EF!i&;8X~drXJ|2 zhp>X6j*t!d;stycH?Xs*ie=)xV*LbbZ@JK)QOaMWvf%Xu>0I`eCW$WLxX{rURGUw?30Mt>< zZPiPRw_=6onYxi%)C(_!c=U1*0|1agP7j&PsG1(|`o_Y9|bf*THc;?Pw z(G6%jAp3Ec4eBY)Tvpy9wB&U5Ec?H>R3_Y$lN7r+r;7goFu?pP+B(5tG7zNK8SWJ7 zY$pzR<9{;GP9I{g?D~OxFLf>EGLwz z4``=Y!aB)bCf%OVHc&38g8;=_nVz0?DA$_1;w#k!b9pdeB-)$}%vmDa-76c^vA|lP zeS>cPp}!{8{C~9_e8gqHj^SxVrg45}AUfYuDK(1o+Ywj5s}tPwSonls1>UFkC>DtJ zv(dS#jYGNkG505eT_={b!-3@^i|$%1^tS;T4#}Q$O7izh^Pzz$&NT^}zN5p;t;#+V zZGF)BjzcifF!H=X@pC7Q7YUr2ZaF}xg3Q`ANm7pc@i4Sx-5e2B3zThA)y$;Uxt5Cx zdqnekxfx>}ZT=?2Z@c@;-^WwsFhnR84oJPgD~E_`T{RH8+piGWK3MFv$qZV@h-^f1 zahsSsd!Rz1;1G{5L?E|j;pKnGDqi7$Fvt`NwyFn6Dj(sLyvv$(FX=2pX`A9=Wm6?8Y7SjNQQgf3 z6_;^F7+LcfUv(D49Wu9=Hc-apQI=wFxwySx<8v=@98W0BTF7{uSAsYSWnIgEa;*i! zRhq)VV|X8Mup6197#|fmwJC;5)_G<++8q$0Y;Z_YSlJ(F_!^IdYt0XG_3O`ZXyoo& zVi%ZdwGs$xs6hCio+bO z>JVBQ*T4Qs?F%+`dG2q%Q1_g|rZpB8UGH`KN)+#Efec>$U|T2(s@47f0FMy23cOwn zbVc2bJ=59yOTqE%tC5oRY0mzq7(hH@`UzWJ<=oS$WxPs3vt966 zEqM)o(@oW7F{x+*J_U39dI1!$Y>ExO;+3VicFp7pQ&`hg#Bi5eg0mQ|P?&@-`6?ui zkqh7EU$#SqaT-C3YNO4U9~~iIaOOQr4N|Mn#28=2d(Qw~BOvR>$P1b2Y+{75zaV=uDVgafKuB^%U{1a3qOP9xN!mf6^_%BkNc0~ucBnr^zf*~4yBkdm$!Ey0j za>`{3-lM{f-iU#%-Evl#eIGC@J`n(;!XyERI9?;PR1jrGF{0t%`I=zLVEbk^@w5JA zeq+|$rVn-JH4KFXRHu6LEjimyLOP}%KNEaKm_is^txBp63+yS!yj;Y2!+xX79oqDS zDXsr2GVig+#-r7(Zn0oE~4SKX@NjfzM=y8wTUb9 zqK%;o93OzelziNBoI@V}09P=q7Ly3uw0J1!nSct(sgall{3(y#1cIEH-FbWe0K|K$ zI%7a!YX#?0yy~J=F1Vi-n+)2CR{iHMPylbTXo?fwDqHZC>JDgweAIF1sfjQ0hIhEO zjx848!*kN{=wNFRHHvx7=3tApL9Li4G%3(N%*I@pcV!T$i2HEi8H4q}6R{KP4&3>ujj zcQemM%;MbrR+z>&@ zc&D#2^Wg9yF2deyW`~qB{3DU-+wu6{dz6n>XOeRvRp4c{leqrh;sw#bj$2|ZuaZ$K z#4()Oz1V65FfPu^gjWdD$L|IrO#6D53Z0yPsucn}wH!`XxP?luvNPfZA-0_V0QO;D zCGvk424Tin+xN{uj%d>J$2_oeVpzcOUzl^44O9OBOX_dfLEP)wIT%>b607A|mox-W z<3@RV#u<%9CDt$HeS1N54smt!iH~+gSJ@jyv;BA{jy{s5?z)FNW+QIk?xRd1z4a1IRpf#kIVVu*4m?exP!+`u z%jQU)Dh^ju0oCGMD`vA9MV-gv8rv&4ugvHCa3z_|%y}u3{{SW3?+B$97&IL*Dk_=n zERUoA0Adx<$7H32bC^HMW8jfq3UL*sR}O9^5$JUQ4-%(dn}|K3?~gFwON%Rn3}&G* zmwwX2SmFDk4K_JBiL%e$UlNm;eEF$tlB`C@=EcpKW9&;=`%SUB2QjO^GNK)G9lJFJ zJkmbty6x{RI@wv=vuu$G8he6 zoWn(P>5>SWgj-{lE9rluiDU$=IR^4Pky?4(BbT=x@WZ$cMjY?)4jaQ}BYSWv{{X#4 zKv}}7xxIC8LoJpWF!NQk`hbA4D1w~i?ydlOQ&jnvv$pOAbDxMphls<*@!lsNNvz9v z=NH6vbxj^se&BVUvrVHa*sTZg23IJpVz2p5poK*oU+Etx3ai11Yb*(j)M|XGzrVyf z_%9KtitQO#p{M3Qv040)QEhfffn#+40Ay|etlbx2#{4f`JoDxQ=a9x*n0A+e>$BhX zg&wl4FW!40i| z9$D|0f>axe#v=#@p4Rn0jC}t9a`^|v<=kF*f*6*{APCZ(lHe)t)N*xN8}N)`u#J-V zN#X@&UJG3zECyU#!!A*`#AR6bZPN#`$b=_lSC$b#Pwc;GRRzEc#34hcyvV$ zuTf%}n{}81TWw*Ahr)^%%PL(;bx}M;%~LOTd4lHBK*peWgxUkYL2*cXN*?gVQ0K(5 zKyBx!`)X;{n4o)mC-U}K#XG^>NRe{ft%d0sbpfW+l_NC z?At(_rqjmyfHpI24;P2S=2D1iYrvroLfl$n{6%p#OBu@dxA>LznP!{JSTYv>04@Ij zu6GdUm-d#U!&kGf#B}p~P3m2XZ7@!-@dSF3n~Nr*gMD)`0m6UF+nCu^WTtw)I~e9# zZvq(m>+ew=Ncl-y{RUQ8H!A7escmv&ULpm<3v*Gb1X_aC6|x>v4k&1cG%+h$Qy5E- z)O3L|-h7J~{{UhK4E-%%`q}O3r&6Ue?z~G(j8e~|AzU}5MZ&m=rN`x%C|`+07F&IL z%v%+3a+#*N2&&un?^>Cpa=LcMO`~+cg?k;6s?)f44Ja@#jYU=POFFrM3&C{*2AY`@ zCOh11O+=g<(X_*vMY0(NkKlc!rujorYs=)VtVme5kBIO{1aJEwyuB(1p6culf89Xd z?%6R&u673VTltzzDdB1V0I6PsZM5If8%^+FPxYVNBUV{wF@*`f8=Hy^E{Do1HE_yW zaVmwqZ}i|-#OQ_DuJI~XBB`{gR$$e`K^uD1(C)Jguv|IyJ=IQU2ZW`uE-TT9_n06{ z15d=s4(3WFW>B`ODkvfq#Z8L;0EluM2)x{?jsf>fxw?%`ankvVfp?e!L{j{Hh@<~VSkvjfwK_Vc)SpZF1PN*dLB$sY3!OG zZA5@mmZj-Rd&x4dIDLSbBU4&|=JLd}2ZK|zr^F?9?FRu>7-CKmQ#p!}<+v-OEpr;8 zVpc`+OM`d0t;Z=|ff5(MYROMRb3ko?nc&`GT8Xuv2YP615Jwx`Pcb?5mkE{Ak)Zeb@MKJ4Liqw_E<)a z9rMg)z-F#4t3`#nYL62HP1p0(3q`tupC7l}A|=AD>6zf7_Me?fAPUfV;wsnhHhf;; zhdgn=5~f%~KY5rd6-NA>K~1|8y+7K8%w0wfDOu)fC6ZslAQLP1d7GCiGXO)3rHF$+ zClDyA-g|>>1?Uf$D6k$0<3DhiU<$47T#x`(vx!v9S(Z*}Tm(IroT5L=7OU z9@~Mg`dY;3;iJifg7^jG!Ms2X1qI!YeNA-$X^hmWx?)~vX`rNIaReW1W%kUiFdv9; ztXGuJDU&p4Krg9O%P8_?inK-a0PEMG?;n^lH=MZfw+*BXT(pvcNz3zZO$SMZnrGnn7ycu zJGUG=ymdGRj^(P*M(l#z8n$p>+^PJ)1CJ9DekJ|NdHT(Y%9=D`s=c!bWAK6Ld0$Y% z3Y5SBftj3rTop8V4xn+g+nIw&Yr4!;wFr0f6GdWHU_R3)9B}4iV(Tz%0GU8$zb72x zhWM68_9-r0?ebUsltRN5IKSl;-kw8dxQV%Lig5m;92F&E-}!~RhCvdy&l5`TWe%zA z$M|Am&aBqSgQ|wl;S1LdQO6%uFfagLvKp*bd6SqRJX8%MDi|G~h>5QVw9kLC6U9rU??#uVcaHxq@JL!#N$xgigEjGrZXn{EtCttF`vf z{LI!hpOh*KE@Eor@?z-xDCaShS*ESp?RwFPR47C|fGh>|1&Y&IxxTCv&ae}fH*&&+H zRZpYl8B{WX{{U2UneflH5Ll{7HFDG!1qW9#>2rq*FAyHp*!kc45Hm8R`6ZQV_{WGD zK;7VnuRqI;{7R9AHYdc%(p~`MW5m1wC)7y|+2(0d5H{v)QuBTB87DA1is45gY6dFh zNp_UKbHUWL64WaK@!V@D1t>G^E|dY@pW+8b??pYMxYPWBoO{YBs9ON|_l1d7ngHB; zeixQyk7e7E$wmkQ*DWnt0sJKkt`@L4oXP-7f4u(yaYYTYUOA0@2G~H4S?|4mWf=AH z5BrH|M`&t4GtN>Z4CaR@SEG(}V<(7KuB~p`?$7UuLaDpG?#1|+(pe=^Dq`JBFSF5Q~;{)P-!`ezJcgi z-XdOgJ(%?iVh6ld!;hHV%wV+TWv|IzAd^I9s0ZB!G8Yesy5>^uWjM_0fmn4`=d<{mZQrN|SCgE~IPsDG1@z|R_^$pFpS>2Dr?#!(PuMfh_^Qw za=SLeNz|$h;2si-Kss4iMZDKg*`>Dg5L8|u@%s{}UR6>H$ocaD0wP^e+Vy_Aky4tO zLf7z}KG)Q1W3U-A)UucbRf82bfHrUOFIpNP-J%QvuMlCcWk_)WOI@QA^6VdzDF-IY z@}9Q>OLpqZkF$@G4O=tzPY3}=NNg5!TQL5El-Rw3`)VL-mWE8+0*<8vW+|QHKS-dx z+rxQ2C0=gZMdv*^J(;xAqOn`?0Akd&y8M6k8Vp73lti-Tr|v!Au58N`hYdZ{P{NwX z#x(>v(CrGC&oQVR3Y3Cq$&P9o0~WWvkK!9-a8%hxfDOzyOOnI_Rva+21;dS(T*PGH z9#Vx?94fpS)VkNy?|S!!Xcb{z{9I#0p#Gs9<+NOX#NkmkE1QP*qAih#ARUzB9i2xI zMoW&K9bNo!Ij}YiFEw!vX5@>D)sBV)tKm!rpPKwX+(f`&J3OGMrAwotA!r5Mz`aUW>E02sSLC<|M;V6U1P7}U02Iv3Ia_aYj-rIp`FZ~URHprj zH^jp++Ds#9YTypyVh?21hB(pGE^5S-E@Y<@3Ap%9Tg=MiYsyiowTRTbz}sG8s|0x~ z3_9mNW}8&T?VjOTqdxH}&N_uPw893Z-1bq3r9(y5w>bxB5Ib+Ed^vXtZ5*PWOX_77 z&l0P)=1cN56ZV|B2Edg@8;%m(F%V_PQkoDg_j4o=1Ck+eM8rY5YMGFgm;t{{Gxvj0 zZ_r}jryhxp>0lR7Wbx)!3^EaRUrI~HCQCn@O{?B;<^Ez8V93#(M#?WqYwvUVK8|Ci zjYay_u&otSH%KF+Pxs;q?S2hK*0s`e2m&zdMv~0}{i+QlGGFD~v@T?FA+^OIN?_%NuVp zi~ZooBnSoG*jl4FFZhr5g{;x=6DZriGK5l@1tw}A6;9r8app3RaBkq@Y~=jKCo6ez zB5SPXuN5dOa6vXaVrJBIgEtE7Vi`Ln0qeq-txh2&qLtjCy%h)Tl`H|0y@!|(&GWYPcE@D~*%e(lP zJgG*;tG&Wb zjO!~|3~r*X0zpTkIU@Ec2>W-$S6A@Q`;1OJ@ZKLlTFz%-5~#^Mff~EG(V`aA!I#D>3th!| zmoKRJTkU?D^tp41arHvI32A(KqoqZZFS}%N#4h5qjxL6leTia;4M`V3v7~$Yox>@6 zS%03cUZNIB`MrI<(6^%QG=63ol&y?sRNZPA+8!)fnFSn0`ZAWiDt|p2tKTVr+l-Q9 zI)}aj90GxT3P&bynOj?Q+nnZVKGJ)f!>b9A64uaY*6J&4G;64< zc3EYk9yJp#o4f6br%=`*LtP@G3UFioBQ^4j)Y4F7)Hr$Ax9;;1&{S_{%ml+7IEI~7 zVdafYsVRFoRc6_=4-K;k0bwZf0Gw>0b8l_Tk<+An!8O)g`b0Fo0K^To9eY8<_dLot zelGcj$`EJp7g=yj()<&|?5-Cx?D%G()n7&|TlEZ1L%2MVElxd0X6_!C^lm|}W&4YM zgEIvH`HqbXtl}ZD4#ipArs3_l85uEJxPzSPHF($PzY^uwFi=2W!8zLJOPO2B#_ z803hYC$yJE6^+YvIxsRCaF*^VMqKGEGXmMKc;mcBoRh)(mbzYQOFP(z-o{{Vc-@l?)Z`-T9bs+@m`e|UT<{kJoK z+fttL{h;%0AXE7W*(Qr=-~Bx-PSt$6m{EASQt_hML<9All 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

8_F+yzc2xG`Gu@^Gp67*UCBn0F(vO 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

    RJ1jhnRp0NM%Qr9dBfu~HuFav9+s%0| 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

    T6e>HKArLA*41F;HdjJYbe&r!sHvmVQ~-Z-mY# zFO3}H69ELaxTHXh0EZX-VKN1LJIaAdI}9o_M~&cxcQISOahfV$&LFvcz(cO%{V_{I z6OSFs_s729@4s@iwj)E^4tMiII=fOx=HPXeO<08#tlKqiba>(75o-Wn+;&m$KdU7ecA56PM?$4tHX z%A9Q^RC+cW%<5>$Z@mbnIwB*_ ztOCW#@;u(*!h){ePQP{jS_VWBk1yHYIhw_>i_ar$1RkMYseqNb3$`H8 z-np9;`21s=aYgjfdHrwzUnxwBw$$Hs-;^{;VBL%O*1cd5-P^)K{%%n16T`vJKfLE6 z2~)^!m^O~!Oa5jHBmm`u4YOT7_c-0@s{!$n@+BGK!0JSV3n?5QoQvXHFm-;H14D7* z@AzWRdPalc@rJ9l9qsipahjT!3}2MIz+qEjN;{;WNJuf!9?2LFGf8!5M zVtz&Yfmtm2)0xNDD2s$P-KMpbD^Cl%rr0+?UnIb*SQV^>8hiA@&rEM=<6Lc%nU9B9 zp#t&z{curLQ5L1^#(0c}U}N`VX%?p`>VAH?rh>)aTXMES40K)tW}g{)h)7Qd<7~?! z5lYJPH_N+t*Cr|8Akf(#I)ob9@OtOIyA$*an=bd*}YYRXl=h3(Wsp!j*{P3 z9u>1HFa5sQhPggl4@LmWM*+o08}Wds@aBS-*7*Mb++#v0UP13u5)c|T_esW$VF}rH zda>_=irh;$sBF`#eExHZ=BTC-9sPUvmLibUSCmTcaP!V2O?*!J%5>Xjj0@QOJ^s0% z71vH(znE$C$L(va{>&B;vXhQ-PD~f95Kg(qsb1e0auoqLyg|^2fzRI^B2Y0A{gWBN z2cz?jwCnMPNRJ1s04Gn*CAPji_{MNvF}!7`0@mW#U4MwJVexR-5qTanQAi*MEB^p4 z2znm4{9~&w%qY$4Tf{{ka6@abS4#f?Sl3K>@?wp4=o*_sUR&x4#waP+40_-F#4SZ1 zzHSHv}y(eq#u(0F{n!XZk+E6kn%57-Y_9*1+d~`5K4;jd?x;K6>(AzvGv4t z52G1FUZ(yGB_c#1yS(Kf*eE&<@#MCfmvqLV*HO3M@2sKGY_AzGQFKgzRXpfqQPQpD z`TAu+7YLQfmQh<^J3sR;O%E$m8GU62i%<8Pad{BEIf(HR0@4Q#Km83p?*dPVg_*3H(B8Y3tu>SygI#MY>P6Ou*wip2IV}SE_{5O;?NXdan}lL6OMR!??U%K%4gN8~Ct)^h*VTE;qd^6wy|=~td%#xB z+Wv4&$T*s~1vcBVn*8O-4im85@5cDVP(a%{-a`%IASXYJ=+Ud9^>N{w*Cu@B&@mC_ z^ZVy0LSBwC*`Hh(39MXfz5B+8PWOto?ZvKJ5ZN;nWC-qYd{+vRjl-PHUNn_Bck)trJJa`B?l z=f1zZPT<+|==x^aD!K|J9|>N)vz5+>EZ_=<-V7m*41ncztW7tg|I`xm&2)M2Qxsc>f0Kj$}*gO9Kg9UhjR>*2E zTzK9F6d1uY`)f6RM6|Pij=$C_L~M}L`m>kK_wOG)up9`@TxO0PtG@6MOTao2RJy-L z8xXHkmmDUJO7TfJpZa~V-oyyI8s5#~I!*d{KK}sH{N?AvG&7gL{2%s&?e!Urt};y> zsolMvvUVpDe^Bcaxc8CHCjo|%bI!d?XvZkq#XW!S zJP6aOHgM-}we^Bqw9}uH#a{7PY+}Tei{feU+{W7MymgELyYsn}o6cyjSPC`b;v-FV ze~byNPnQ9pf^jeTrH`I*Ba>hw@p6M+LUHR5B9`Wp-V-YizvBqLb^Fd}MYuGf{BevR zAB!L74+%bAf6ltkoNxn9y82)QCc5SM#tsVA-Q!=&fg|e&0#a`86oFt2R@(r&OJwhp z$7VbzAa%?B^VT3NF3*P^%Af%?8=L}h`RsuT1>>Fm{&L6)^9*4!J9)vjv5Ih8iwQcE zx^SNcO4VSt(?$}2c{#(*>e-_8j5$%EKH-eW3Ae+K>j)5NNbm1)mIxv^Jbn7ZSj#r? z^uaa2b)`-)lu~H5JfD8DUZMu=;_C=x2o$^L7BsHTntH_$)Oicrki{%fqqF|!VM#-) za1H}NA@qKjnRGNwb-fZWJl2K2Jj|HzT_|dWzOf3t)PXFI6Mc`TjOyZmAT*mwcY9^Dv4luQF=$;Z^jAzOqd&mUX#!)?<@Z|RCPDee~p zsLc@GvQPyy3`oZR08T121%sSFam)-_W+

    U|SLun-Qeovk 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 G&;Qx6!G>M{ literal 0 HcmV?d00001 diff --git a/doc/tutorials/core/basic_linear_transform/images/Basic_Linear_Transform_Tutorial_hist_alpha.png b/doc/tutorials/core/basic_linear_transform/images/Basic_Linear_Transform_Tutorial_hist_alpha.png new file mode 100644 index 0000000000000000000000000000000000000000..21185a16d3ef5160b3655e09dcd87612c909a090 GIT binary patch literal 3192 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 literal 0 HcmV?d00001 diff --git a/doc/tutorials/core/basic_linear_transform/images/Basic_Linear_Transform_Tutorial_histogram_compare.png b/doc/tutorials/core/basic_linear_transform/images/Basic_Linear_Transform_Tutorial_histogram_compare.png new file mode 100644 index 0000000000000000000000000000000000000000..c2494dc22ef3a7aa064bcaf1d66b06b4dfe310f2 GIT binary patch literal 1448 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År@(67@zJy7 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 +using namespace std; using namespace cv; -double alpha; /**< Simple contrast control */ -int beta; /**< Simple brightness control */ - /** * @function main * @brief Main function */ int main( int, char** argv ) { - /// Read image given by user - Mat image = imread( argv[1] ); - Mat new_image = Mat::zeros( image.size(), image.type() ); + //! [basic-linear-transform-parameters] + double alpha = 1.0; /*< Simple contrast control */ + int beta = 0; /*< Simple brightness control */ + //! [basic-linear-transform-parameters] - /// Initialize values - std::cout<<" Basic Linear Transforms "<>alpha; - std::cout<<"* Enter the beta value [0-100]: "; std::cin>>beta; + /// Read image given by user + //! [basic-linear-transform-load] + Mat image = imread( argv[1] ); + //! [basic-linear-transform-load] + //! [basic-linear-transform-output] + Mat new_image = Mat::zeros( image.size(), image.type() ); + //! [basic-linear-transform-output] + /// Initialize values + cout << " Basic Linear Transforms " << endl; + cout << "-------------------------" << endl; + cout << "* Enter the alpha value [1.0-3.0]: "; cin >> alpha; + cout << "* Enter the beta value [0-100]: "; cin >> beta; - /// Do the operation new_image(i,j) = alpha*image(i,j) + beta - /// Instead of these 'for' loops we could have used simply: - /// image.convertTo(new_image, -1, alpha, beta); - /// but we wanted to show you how to access the pixels :) - for( int y = 0; y < image.rows; y++ ) - { for( int x = 0; x < image.cols; x++ ) - { for( int c = 0; c < 3; c++ ) - { - new_image.at(y,x)[c] = saturate_cast( alpha*( image.at(y,x)[c] ) + beta ); - } - } - } + /// Do the operation new_image(i,j) = alpha*image(i,j) + beta + /// Instead of these 'for' loops we could have used simply: + /// image.convertTo(new_image, -1, alpha, beta); + /// but we wanted to show you how to access the pixels :) + //! [basic-linear-transform-operation] + for( int y = 0; y < image.rows; y++ ) { + for( int x = 0; x < image.cols; x++ ) { + for( int c = 0; c < 3; c++ ) { + new_image.at(y,x)[c] = + saturate_cast( alpha*( image.at(y,x)[c] ) + beta ); + } + } + } + //! [basic-linear-transform-operation] - /// Create Windows - namedWindow("Original Image", 1); - namedWindow("New Image", 1); + //! [basic-linear-transform-display] + /// Create Windows + namedWindow("Original Image", WINDOW_AUTOSIZE); + namedWindow("New Image", WINDOW_AUTOSIZE); - /// Show stuff - imshow("Original Image", image); - imshow("New Image", new_image); + /// Show stuff + imshow("Original Image", image); + imshow("New Image", new_image); - - /// Wait until user press some key - waitKey(); - return 0; + /// Wait until user press some key + waitKey(); + //! [basic-linear-transform-display] + return 0; } diff --git a/samples/cpp/tutorial_code/ImgProc/changing_contrast_brightness_image/changing_contrast_brightness_image.cpp b/samples/cpp/tutorial_code/ImgProc/changing_contrast_brightness_image/changing_contrast_brightness_image.cpp new file mode 100644 index 0000000000..7fc28f03d1 --- /dev/null +++ b/samples/cpp/tutorial_code/ImgProc/changing_contrast_brightness_image/changing_contrast_brightness_image.cpp @@ -0,0 +1,91 @@ +#include +#include "opencv2/imgcodecs.hpp" +#include "opencv2/highgui.hpp" + +using namespace std; +using namespace cv; + +namespace +{ +/** Global Variables */ +int alpha = 100; +int beta = 100; +int gamma_cor = 100; +Mat img_original, img_corrected, img_gamma_corrected; + +void basicLinearTransform(const Mat &img, const double alpha_, const int beta_) +{ + Mat res; + img.convertTo(res, -1, alpha_, beta_); + + hconcat(img, res, img_corrected); +} + +void gammaCorrection(const Mat &img, const double gamma_) +{ + CV_Assert(gamma_ >= 0); + //![changing-contrast-brightness-gamma-correction] + Mat lookUpTable(1, 256, CV_8U); + uchar* p = lookUpTable.ptr(); + for( int i = 0; i < 256; ++i) + p[i] = saturate_cast(pow(i / 255.0, gamma_) * 255.0); + + Mat res = img.clone(); + LUT(img, lookUpTable, res); + //![changing-contrast-brightness-gamma-correction] + + hconcat(img, res, img_gamma_corrected); +} + +void on_linear_transform_alpha_trackbar(int, void *) +{ + double alpha_value = alpha / 100.0; + int beta_value = beta - 100; + basicLinearTransform(img_original, alpha_value, beta_value); +} + +void on_linear_transform_beta_trackbar(int, void *) +{ + double alpha_value = alpha / 100.0; + int beta_value = beta - 100; + basicLinearTransform(img_original, alpha_value, beta_value); +} + +void on_gamma_correction_trackbar(int, void *) +{ + double gamma_value = gamma_cor / 100.0; + gammaCorrection(img_original, gamma_value); +} +} + +int main( int, char** argv ) +{ + img_original = imread( argv[1] ); + img_corrected = Mat(img_original.rows, img_original.cols*2, img_original.type()); + img_gamma_corrected = Mat(img_original.rows, img_original.cols*2, img_original.type()); + + hconcat(img_original, img_original, img_corrected); + hconcat(img_original, img_original, img_gamma_corrected); + + namedWindow("Brightness and contrast adjustments", WINDOW_AUTOSIZE); + namedWindow("Gamma correction", WINDOW_AUTOSIZE); + + createTrackbar("Alpha gain (contrast)", "Brightness and contrast adjustments", &alpha, 500, on_linear_transform_alpha_trackbar); + createTrackbar("Beta bias (brightness)", "Brightness and contrast adjustments", &beta, 200, on_linear_transform_beta_trackbar); + createTrackbar("Gamma correction", "Gamma correction", &gamma_cor, 200, on_gamma_correction_trackbar); + + while (true) + { + imshow("Brightness and contrast adjustments", img_corrected); + imshow("Gamma correction", img_gamma_corrected); + + int c = waitKey(30); + if (c == 27) + break; + } + + imwrite("linear_transform_correction.png", img_corrected); + imwrite("gamma_correction.png", img_gamma_corrected); + + return 0; +} From f1aae52daf66b85e80e446aadc51ec44e935124d Mon Sep 17 00:00:00 2001 From: Tomoaki Teshima Date: Tue, 18 Oct 2016 10:23:47 +0900 Subject: [PATCH 09/54] clean up unused #if --- modules/calib3d/src/compat_ptsetreg.cpp | 4 -- modules/calib3d/src/fisheye.cpp | 24 ----------- modules/calib3d/src/triangulate.cpp | 46 ---------------------- modules/calib3d/test/test_chesscorners.cpp | 10 ----- 4 files changed, 84 deletions(-) diff --git a/modules/calib3d/src/compat_ptsetreg.cpp b/modules/calib3d/src/compat_ptsetreg.cpp index 774129e421..6e67000b3b 100644 --- a/modules/calib3d/src/compat_ptsetreg.cpp +++ b/modules/calib3d/src/compat_ptsetreg.cpp @@ -313,11 +313,7 @@ void CvLevMarq::step() if( !err ) completeSymm( _JtJN, completeSymmFlag ); -#if 1 _JtJN.diag() *= 1. + lambda; -#else - _JtJN.diag() += lambda; -#endif solve(_JtJN, _JtErr, nonzero_param, solveMethod); int j = 0; diff --git a/modules/calib3d/src/fisheye.cpp b/modules/calib3d/src/fisheye.cpp index 32dc15c3f2..2b65d6b329 100644 --- a/modules/calib3d/src/fisheye.cpp +++ b/modules/calib3d/src/fisheye.cpp @@ -542,19 +542,6 @@ void cv::fisheye::estimateNewCameraMatrixForUndistortRectify(InputArray K, Input pptr[6] = Vec2d(0, h); pptr[7] = Vec2d(0, h/2); -#if 0 - const int N = 10; - cv::Mat points(1, N * 4, CV_64FC2); - Vec2d* pptr = points.ptr(); - for(int i = 0, k = 0; i < 10; ++i) - { - pptr[k++] = Vec2d(w/2, 0) - Vec2d(w/8, 0) + Vec2d(w/4/N*i, 0); - pptr[k++] = Vec2d(w/2, h-1) - Vec2d(w/8, h-1) + Vec2d(w/4/N*i, h-1); - pptr[k++] = Vec2d(0, h/2) - Vec2d(0, h/8) + Vec2d(0, h/4/N*i); - pptr[k++] = Vec2d(w-1, h/2) - Vec2d(w-1, h/8) + Vec2d(w-1, h/4/N*i); - } -#endif - fisheye::undistortPoints(points, points, K, D, R); cv::Scalar center_mass = mean(points); cv::Vec2d cn(center_mass.val); @@ -580,17 +567,6 @@ void cv::fisheye::estimateNewCameraMatrixForUndistortRectify(InputArray K, Input maxx = std::max(maxx, std::abs(pptr[i][0]-cn[0])); } -#if 0 - double minx = -DBL_MAX, miny = -DBL_MAX, maxx = DBL_MAX, maxy = DBL_MAX; - for(size_t i = 0; i < points.total(); ++i) - { - if (i % 4 == 0) miny = std::max(miny, pptr[i][1]); - if (i % 4 == 1) maxy = std::min(maxy, pptr[i][1]); - if (i % 4 == 2) minx = std::max(minx, pptr[i][0]); - if (i % 4 == 3) maxx = std::min(maxx, pptr[i][0]); - } -#endif - double f1 = w * 0.5/(minx); double f2 = w * 0.5/(maxx); double f3 = h * 0.5 * aspect_ratio/(miny); diff --git a/modules/calib3d/src/triangulate.cpp b/modules/calib3d/src/triangulate.cpp index 33c7fd774d..5bdf10e4b8 100644 --- a/modules/calib3d/src/triangulate.cpp +++ b/modules/calib3d/src/triangulate.cpp @@ -114,52 +114,6 @@ cvTriangulatePoints(CvMat* projMatr1, CvMat* projMatr2, CvMat* projPoints1, CvMa cvmSet(points4D,2,i,matrV(3,2));/* Z */ cvmSet(points4D,3,i,matrV(3,3));/* W */ } - -#if 0 - double err = 0; - /* Points was reconstructed. Try to reproject points */ - /* We can compute reprojection error if need */ - { - int i; - CvMat point3D; - double point3D_dat[4]; - point3D = cvMat(4,1,CV_64F,point3D_dat); - - CvMat point2D; - double point2D_dat[3]; - point2D = cvMat(3,1,CV_64F,point2D_dat); - - for( i = 0; i < numPoints; i++ ) - { - double W = cvmGet(points4D,3,i); - - point3D_dat[0] = cvmGet(points4D,0,i)/W; - point3D_dat[1] = cvmGet(points4D,1,i)/W; - point3D_dat[2] = cvmGet(points4D,2,i)/W; - point3D_dat[3] = 1; - - /* !!! Project this point for each camera */ - for( int currCamera = 0; currCamera < 2; currCamera++ ) - { - cvMatMul(projMatrs[currCamera], &point3D, &point2D); - - float x,y; - float xr,yr,wr; - x = (float)cvmGet(projPoints[currCamera],0,i); - y = (float)cvmGet(projPoints[currCamera],1,i); - - wr = (float)point2D_dat[2]; - xr = (float)(point2D_dat[0]/wr); - yr = (float)(point2D_dat[1]/wr); - - float deltaX,deltaY; - deltaX = (float)fabs(x-xr); - deltaY = (float)fabs(y-yr); - err += deltaX*deltaX + deltaY*deltaY; - } - } - } -#endif } diff --git a/modules/calib3d/test/test_chesscorners.cpp b/modules/calib3d/test/test_chesscorners.cpp index 781eec2ffb..64a2d69c37 100644 --- a/modules/calib3d/test/test_chesscorners.cpp +++ b/modules/calib3d/test/test_chesscorners.cpp @@ -268,14 +268,6 @@ void CV_ChessboardDetectorTest::run_batch( const string& filename ) #ifndef WRITE_POINTS double err = calcError(v, expected); -#if 0 - if( err > rough_success_error_level ) - { - ts.printf( cvtest::TS::LOG, "bad accuracy of corner guesses\n" ); - ts.set_failed_test_info( cvtest::TS::FAIL_BAD_ACCURACY ); - continue; - } -#endif max_rough_error = MAX( max_rough_error, err ); #endif if( pattern == CHESSBOARD ) @@ -287,14 +279,12 @@ void CV_ChessboardDetectorTest::run_batch( const string& filename ) err = calcError(v, expected); sum_error += err; count++; -#if 1 if( err > precise_success_error_level ) { ts->printf( cvtest::TS::LOG, "Image %s: bad accuracy of adjusted corners %f\n", img_file.c_str(), err ); ts->set_failed_test_info( cvtest::TS::FAIL_BAD_ACCURACY ); return; } -#endif ts->printf(cvtest::TS::LOG, "Error on %s is %f\n", img_file.c_str(), err); max_precise_error = MAX( max_precise_error, err ); #endif From 46fa9a6bd4be75dd5af6c2295b8f940675327ee1 Mon Sep 17 00:00:00 2001 From: StevenPuttemans Date: Fri, 6 Jan 2017 11:19:47 +0100 Subject: [PATCH 10/54] fix some issues with skipping files and old redundant code --- apps/annotation/opencv_annotation.cpp | 48 +++++++++------------------ 1 file changed, 15 insertions(+), 33 deletions(-) diff --git a/apps/annotation/opencv_annotation.cpp b/apps/annotation/opencv_annotation.cpp index febe9fc95d..5d1eedeccd 100644 --- a/apps/annotation/opencv_annotation.cpp +++ b/apps/annotation/opencv_annotation.cpp @@ -59,12 +59,7 @@ Adapted by: Puttemans Steven - April 2016 - Vectorize the process to enable bett #include #include - -#if defined(_WIN32) - #include -#else - #include -#endif +#include using namespace std; using namespace cv; @@ -249,34 +244,20 @@ int main( int argc, const char** argv ) int resizeFactor = parser.get("resizeFactor"); int const maxWindowHeight = parser.get("maxWindowHeight") > 0 ? parser.get("maxWindowHeight") : -1; - // Check if the folder actually exists - // If -1 is returned then the folder actually exists, and thus you can continue - // In all other cases there was a folder creation and thus the folder did not exist - #if defined(_WIN32) - if(_mkdir(image_folder.c_str()) != -1){ - // Generate an error message - cerr << "The image folder given does not exist. Please check again!" << endl; - // Remove the created folder again, to ensure a second run with same code fails again - _rmdir(image_folder.c_str()); - return 0; - } - #else - if(mkdir(image_folder.c_str(), 0777) != -1){ - // Generate an error message - cerr << "The image folder given does not exist. Please check again!" << endl; - // Remove the created folder again, to ensure a second run with same code fails again - remove(image_folder.c_str()); - return 0; - } - #endif - // Start by processing the data // Return the image filenames inside the image folder - vector< vector > annotations; + map< String, vector > annotations; vector filenames; String folder(image_folder); glob(folder, filenames); + // Add key tips on how to use the software when running it + cout << "* mark rectangles with the left mouse button," << endl; + cout << "* press 'c' to accept a selection," << endl; + cout << "* press 'd' to delete the latest selection," << endl; + cout << "* press 'n' to proceed with next image," << endl; + cout << "* press 'esc' to stop." << endl; + // Loop through each image stored in the images folder // Create and temporarily store the annotations // At the end write everything to the annotations file @@ -306,7 +287,7 @@ int main( int argc, const char** argv ) current_annotations[j].height = current_annotations[j].height * resizeFactor; } } - annotations.push_back(current_annotations); + annotations[filenames[i]] = current_annotations; // Check if the ESC key was hit, then exit earlier then expected if(stop){ @@ -323,10 +304,11 @@ int main( int argc, const char** argv ) } // Store the annotations, write to the output file - for(int i = 0; i < (int)annotations.size(); i++){ - output << filenames[i] << " " << annotations[i].size(); - for(int j=0; j < (int)annotations[i].size(); j++){ - Rect temp = annotations[i][j]; + for(map >::iterator it = annotations.begin(); it != annotations.end(); it++){ + vector &anno = it->second; + output << it->first << " " << anno.size(); + for(size_t j=0; j < anno.size(); j++){ + Rect temp = anno[j]; output << " " << temp.x << " " << temp.y << " " << temp.width << " " << temp.height; } output << endl; From e6f27240d5e5fc49f9d079a34abaccf2bee72654 Mon Sep 17 00:00:00 2001 From: LaurentBerger Date: Sun, 8 Jan 2017 15:24:29 +0100 Subject: [PATCH 11/54] dd a note in findcontours doc --- modules/imgproc/include/opencv2/imgproc.hpp | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/imgproc/include/opencv2/imgproc.hpp b/modules/imgproc/include/opencv2/imgproc.hpp index 95e5a1592b..243d72b32e 100644 --- a/modules/imgproc/include/opencv2/imgproc.hpp +++ b/modules/imgproc/include/opencv2/imgproc.hpp @@ -3744,6 +3744,7 @@ CV_EXPORTS_W int connectedComponentsWithStats(InputArray image, OutputArray labe The function retrieves contours from the binary image using the algorithm @cite Suzuki85 . The contours are a useful tool for shape analysis and object detection and recognition. See squares.cpp in the OpenCV sample directory. +@note Since opencv 3.2 source image is not modified by this function. @param image Source, an 8-bit single-channel image. Non-zero pixels are treated as 1's. Zero pixels remain 0's, so the image is treated as binary . You can use cv::compare, cv::inRange, cv::threshold , From b3c77e664d853e425f8966fbd1f3be993b22df99 Mon Sep 17 00:00:00 2001 From: atinfinity Date: Mon, 9 Jan 2017 19:51:33 +0900 Subject: [PATCH 12/54] added to check the support of AVX2 --- modules/core/src/stat.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/core/src/stat.cpp b/modules/core/src/stat.cpp index 5cdae20871..e1fddb220d 100644 --- a/modules/core/src/stat.cpp +++ b/modules/core/src/stat.cpp @@ -4253,6 +4253,7 @@ int normHamming(const uchar* a, int n) result += vgetq_lane_s32 (vreinterpretq_s32_u64(bitSet2),2); } #elif CV_AVX2 + if (USE_AVX2) { __m256i _r0 = _mm256_setzero_si256(); __m256i _0 = _mm256_setzero_si256(); @@ -4303,6 +4304,7 @@ int normHamming(const uchar* a, const uchar* b, int n) result += vgetq_lane_s32 (vreinterpretq_s32_u64(bitSet2),2); } #elif CV_AVX2 + if (USE_AVX2) { __m256i _r0 = _mm256_setzero_si256(); __m256i _0 = _mm256_setzero_si256(); From e16e141c38ed53a5f9157e6768f9891f4ebf803a Mon Sep 17 00:00:00 2001 From: catree Date: Tue, 3 Jan 2017 22:28:19 +0100 Subject: [PATCH 13/54] Add OpenCV parallel_for_ tutorial. --- .../how_to_use_OpenCV_parallel_for_.markdown | 183 ++++++++++++++++++ ...nCV_parallel_for_640px-Mandelset_hires.png | Bin 0 -> 16752 bytes ..._to_use_OpenCV_parallel_for_Mandelbrot.png | Bin 0 -> 63249 bytes ...parallel_for_sqrt_scale_transformation.png | Bin 0 -> 33815 bytes .../core/table_of_content_core.markdown | 7 + .../how_to_use_OpenCV_parallel_for_.cpp | 122 ++++++++++++ 6 files changed, 312 insertions(+) create mode 100644 doc/tutorials/core/how_to_use_OpenCV_parallel_for_/how_to_use_OpenCV_parallel_for_.markdown create mode 100644 doc/tutorials/core/how_to_use_OpenCV_parallel_for_/images/how_to_use_OpenCV_parallel_for_640px-Mandelset_hires.png create mode 100644 doc/tutorials/core/how_to_use_OpenCV_parallel_for_/images/how_to_use_OpenCV_parallel_for_Mandelbrot.png create mode 100644 doc/tutorials/core/how_to_use_OpenCV_parallel_for_/images/how_to_use_OpenCV_parallel_for_sqrt_scale_transformation.png create mode 100644 samples/cpp/tutorial_code/core/how_to_use_OpenCV_parallel_for_/how_to_use_OpenCV_parallel_for_.cpp diff --git a/doc/tutorials/core/how_to_use_OpenCV_parallel_for_/how_to_use_OpenCV_parallel_for_.markdown b/doc/tutorials/core/how_to_use_OpenCV_parallel_for_/how_to_use_OpenCV_parallel_for_.markdown new file mode 100644 index 0000000000..f2a511fc21 --- /dev/null +++ b/doc/tutorials/core/how_to_use_OpenCV_parallel_for_/how_to_use_OpenCV_parallel_for_.markdown @@ -0,0 +1,183 @@ +How to use the OpenCV parallel_for_ to parallelize your code {#tutorial_how_to_use_OpenCV_parallel_for_} +================================================================== + +Goal +---- + +The goal of this tutorial is to show you how to use the OpenCV `parallel_for_` framework to easily +parallelize your code. To illustrate the concept, we will write a program to draw a Mandelbrot set +exploiting almost all the CPU load available. +The full tutorial code is [here](https://github.com/opencv/opencv/blob/master/samples/cpp/tutorial_code/core/how_to_use_OpenCV_parallel_for_/how_to_use_OpenCV_parallel_for_.cpp). +If you want more information about multithreading, you will have to refer to a reference book or course as this tutorial is intended +to remain simple. + +Precondition +---- + +The first precondition is to have OpenCV built with a parallel framework. +In OpenCV 3.2, the following parallel frameworks are available in that order: +1. Intel Threading Building Blocks (3rdparty library, should be explicitly enabled) +2. C= Parallel C/C++ Programming Language Extension (3rdparty library, should be explicitly enabled) +3. OpenMP (integrated to compiler, should be explicitly enabled) +4. APPLE GCD (system wide, used automatically (APPLE only)) +5. Windows RT concurrency (system wide, used automatically (Windows RT only)) +6. Windows concurrency (part of runtime, used automatically (Windows only - MSVC++ >= 10)) +7. Pthreads (if available) + +As you can see, several parallel frameworks can be used in the OpenCV library. Some parallel libraries +are third party libraries and have to be explictly built and enabled in CMake (e.g. TBB, C=), others are +automatically available with the platform (e.g. APPLE GCD) but chances are that you should be enable to +have access to a parallel framework either directly or by enabling the option in CMake and rebuild the library. + +The second (weak) precondition is more related to the task you want to achieve as not all computations +are suitable / can be adatapted to be run in a parallel way. To remain simple, tasks that can be splitted +into multiple elementary operations with no memory dependency (no possible race condition) are easily +parallelizable. Computer vision processing are often easily parallelizable as most of the time the processing of +one pixel does not depend to the state of other pixels. + +Simple example: drawing a Mandelbrot set +---- + +We will use the example of drawing a Mandelbrot set to show how from a regular sequential code you can easily adapt +the code to parallize the computation. + +Theory +----------- + +The Mandelbrot set definition has been named in tribute to the mathematician Benoit Mandelbrot by the mathematician +Adrien Douady. It has been famous outside of the mathematics field as the image representation is an example of a +class of fractals, a mathematical set that exhibits a repeating pattern displayed at every scale (even more, a +Mandelbrot set is self-similar as the whole shape can be repeatedly seen at different scale). For a more in-depth +introduction, you can look at the corresponding [Wikipedia article](https://en.wikipedia.org/wiki/Mandelbrot_set). +Here, we will just introduce the formula to draw the Mandelbrot set (from the mentioned Wikipedia article). + +> The Mandelbrot set is the set of values of \f$ c \f$ in the complex plane for which the orbit of 0 under iteration +> of the quadratic map +> \f[\begin{cases} z_0 = 0 \\ z_{n+1} = z_n^2 + c \end{cases}\f] +> remains bounded. +> That is, a complex number \f$ c \f$ is part of the Mandelbrot set if, when starting with \f$ z_0 = 0 \f$ and applying +> the iteration repeatedly, the absolute value of \f$ z_n \f$ remains bounded however large \f$ n \f$ gets. +> This can also be represented as +> \f[\limsup_{n\to\infty}|z_{n+1}|\leqslant2\f] + +Pseudocode +----------- + +A simple algorithm to generate a representation of the Mandelbrot set is called the +["escape time algorithm"](https://en.wikipedia.org/wiki/Mandelbrot_set#Escape_time_algorithm). +For each pixel in the rendered image, we test using the recurrence relation if the complex number is bounded or not +under a maximum number of iterations. Pixels that do not belong to the Mandelbrot set will escape quickly whereas +we assume that the pixel is in the set after a fixed maximum number of iterations. A high value of iterations will +produce a more detailed image but the computation time will increase accordingly. We use the number of iterations +needed to "escape" to depict the pixel value in the image. + +``` +For each pixel (Px, Py) on the screen, do: +{ + x0 = scaled x coordinate of pixel (scaled to lie in the Mandelbrot X scale (-2, 1)) + y0 = scaled y coordinate of pixel (scaled to lie in the Mandelbrot Y scale (-1, 1)) + x = 0.0 + y = 0.0 + iteration = 0 + max_iteration = 1000 + while (x*x + y*y < 2*2 AND iteration < max_iteration) { + xtemp = x*x - y*y + x0 + y = 2*x*y + y0 + x = xtemp + iteration = iteration + 1 + } + color = palette[iteration] + plot(Px, Py, color) +} +``` + +To relate between the pseudocode and the theory, we have: +* \f$ z = x + iy \f$ +* \f$ z^2 = x^2 + i2xy - y^2 \f$ +* \f$ c = x_0 + iy_0 \f$ + +![](images/how_to_use_OpenCV_parallel_for_640px-Mandelset_hires.png) + +On this figure, we recall that the real part of a complex number is on the x-axis and the imaginary part on the y-axis. +You can see that the whole shape can be repeatedly visible if we zoom at particular locations. + +Implementation +----------- + +Escape time algorithm implementation +-------------------------- + +@snippet how_to_use_OpenCV_parallel_for_.cpp mandelbrot-escape-time-algorithm + +Here, we used the [`std::complex`](http://en.cppreference.com/w/cpp/numeric/complex) template class to represent a +complex number. This function performs the test to check if the pixel is in set or not and returns the "escaped" iteration. + +Sequential Mandelbrot implementation +-------------------------- + +@snippet how_to_use_OpenCV_parallel_for_.cpp mandelbrot-sequential + +In this implementation, we sequentially iterate over the pixels in the rendered image to perform the test to check if the +pixel is likely to belong to the Mandelbrot set or not. + +Another thing to do is to transform the pixel coordinate into the Mandelbrot set space with: + +@snippet how_to_use_OpenCV_parallel_for_.cpp mandelbrot-transformation + +Finally, to assign the grayscale value to the pixels, we use the following rule: +* a pixel is black if it reaches the maximum number of iterations (pixel is assumed to be in the Mandelbrot set), +* otherwise we assign a grayscale value depending on the escaped iteration and scaled to fit the grayscale range. + +@snippet how_to_use_OpenCV_parallel_for_.cpp mandelbrot-grayscale-value + +Using a linear scale transformation is not enough to perceive the grayscale variation. To overcome this, we will boost +the perception by using a square root scale transformation (borrowed from Jeremy D. Frens in his +[blog post](http://www.programming-during-recess.net/2016/06/26/color-schemes-for-mandelbrot-sets/)): +\f$ f \left( x \right) = \sqrt{\frac{x}{\text{maxIter}}} \times 255 \f$ + +![](images/how_to_use_OpenCV_parallel_for_sqrt_scale_transformation.png) + +The green curve corresponds to a simple linear scale transformation, the blue one to a square root scale transformation +and you can observe how the lowest values will be boosted when looking at the slope at these positions. + +Parallel Mandelbrot implementation +-------------------------- + +When looking at the sequential implementation, we can notice that each pixel is computed independently. To optimize the +computation, we can perform multiple pixel calculations in parallel, by exploiting the multi-core architecture of modern +processor. To achieve this easily, we will use the OpenCV @ref cv::parallel_for_ framework. + +@snippet how_to_use_OpenCV_parallel_for_.cpp mandelbrot-parallel + +The first thing is to declare a custom class that inherits from @ref cv::ParallelLoopBody and to override the +`virtual void operator ()(const cv::Range& range) const`. + +The range in the `operator ()` represents the subset of pixels that will be treated by an individual thread. +This splitting is done automatically to distribuate equally the computation load. We have to convert the pixel index coordinate +to a 2D `[row, col]` coordinate. Also note that we have to keep a reference on the mat image to be able to modify in-place +the image. + +The parallel execution is called with: + +@snippet how_to_use_OpenCV_parallel_for_.cpp mandelbrot-parallel-call + +Here, the range represents the total number of operations to be executed, so the total number of pixels in the image. +To set the number of threads, you can use: @ref cv::setNumThreads. You can also specify the number of splitting using the +nstripes parameter in @ref cv::parallel_for_. For instance, if your processor has 4 threads, setting `cv::setNumThreads(2)` +or setting `nstripes=2` should be the same as by default it will use all the processor threads available but will split the +workload only on two threads. + +Results +----------- + +You can find the full tutorial code [here](https://github.com/opencv/opencv/blob/master/samples/cpp/tutorial_code/core/how_to_use_OpenCV_parallel_for_/how_to_use_OpenCV_parallel_for_.cpp). +The performance of the parallel implementation depends of the type of CPU you have. For instance, on 4 cores / 8 threads +CPU, you can expect a speed-up of around 6.9X. There are many factors to explain why we do not achieve a speed-up of almost 8X. +Main reasons should be mostly due to: +* the overhead to create and manage the threads, +* background processes running in parallel, +* the difference between 4 hardware cores with 2 logical threads for each core and 8 hardware cores. + +The resulting image produced by the tutorial code (you can modify the code to use more iterations and assign a pixel color +depending on the escaped iteration and using a color palette to get more aesthetic images): +![Mandelbrot set with xMin=-2.1, xMax=0.6, yMin=-1.2, yMax=1.2, maxIterations=500](images/how_to_use_OpenCV_parallel_for_Mandelbrot.png) diff --git a/doc/tutorials/core/how_to_use_OpenCV_parallel_for_/images/how_to_use_OpenCV_parallel_for_640px-Mandelset_hires.png b/doc/tutorials/core/how_to_use_OpenCV_parallel_for_/images/how_to_use_OpenCV_parallel_for_640px-Mandelset_hires.png new file mode 100644 index 0000000000000000000000000000000000000000..2b63916d77ad6dc62239f764e59221894f20e136 GIT binary patch literal 16752 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


    BX<7*3l@68N7j?uOv$&4k(wN+~B$0bJupERT*zG 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 literal 0 HcmV?d00001 diff --git a/doc/tutorials/core/table_of_content_core.markdown b/doc/tutorials/core/table_of_content_core.markdown index 70d9c81a1b..2b9afb8b19 100644 --- a/doc/tutorials/core/table_of_content_core.markdown +++ b/doc/tutorials/core/table_of_content_core.markdown @@ -106,3 +106,10 @@ understanding how to manipulate the images on a pixel level. *Author:* Elena Gvozdeva You will see how to use the IPP Async with OpenCV. + + +- @subpage tutorial_how_to_use_OpenCV_parallel_for_ + + *Compatibility:* \>= OpenCV 2.4.3 + + You will see how to use the OpenCV parallel_for_ to easily parallelize your code. diff --git a/samples/cpp/tutorial_code/core/how_to_use_OpenCV_parallel_for_/how_to_use_OpenCV_parallel_for_.cpp b/samples/cpp/tutorial_code/core/how_to_use_OpenCV_parallel_for_/how_to_use_OpenCV_parallel_for_.cpp new file mode 100644 index 0000000000..c661b919b3 --- /dev/null +++ b/samples/cpp/tutorial_code/core/how_to_use_OpenCV_parallel_for_/how_to_use_OpenCV_parallel_for_.cpp @@ -0,0 +1,122 @@ +#include +#include +#include + +using namespace std; +using namespace cv; + +namespace +{ +//! [mandelbrot-escape-time-algorithm] +int mandelbrot(const complex &z0, const int max) +{ + complex z = z0; + for (int t = 0; t < max; t++) + { + if (z.real()*z.real() + z.imag()*z.imag() > 4.0f) return t; + z = z*z + z0; + } + + return max; +} +//! [mandelbrot-escape-time-algorithm] + +//! [mandelbrot-grayscale-value] +int mandelbrotFormula(const complex &z0, const int maxIter=500) { + int value = mandelbrot(z0, maxIter); + if(maxIter - value == 0) + { + return 0; + } + + return cvRound(sqrt(value / (float) maxIter) * 255); +} +//! [mandelbrot-grayscale-value] + +//! [mandelbrot-parallel] +class ParallelMandelbrot : public ParallelLoopBody +{ +public: + ParallelMandelbrot (Mat &img, const float x1, const float y1, const float scaleX, const float scaleY) + : m_img(img), m_x1(x1), m_y1(y1), m_scaleX(scaleX), m_scaleY(scaleY) + { + } + + virtual void operator ()(const Range& range) const + { + for (int r = range.start; r < range.end; r++) + { + int i = r / m_img.cols; + int j = r % m_img.cols; + + float x0 = j / m_scaleX + m_x1; + float y0 = i / m_scaleY + m_y1; + + complex z0(x0, y0); + uchar value = (uchar) mandelbrotFormula(z0); + m_img.ptr(i)[j] = value; + } + } + + ParallelMandelbrot& operator=(const ParallelMandelbrot &) { + return *this; + }; + +private: + Mat &m_img; + float m_x1; + float m_y1; + float m_scaleX; + float m_scaleY; +}; +//! [mandelbrot-parallel] + +//! [mandelbrot-sequential] +void sequentialMandelbrot(Mat &img, const float x1, const float y1, const float scaleX, const float scaleY) +{ + for (int i = 0; i < img.rows; i++) + { + for (int j = 0; j < img.cols; j++) + { + float x0 = j / scaleX + x1; + float y0 = i / scaleY + y1; + + complex z0(x0, y0); + uchar value = (uchar) mandelbrotFormula(z0); + img.ptr(i)[j] = value; + } + } +} +//! [mandelbrot-sequential] +} + +int main() +{ + //! [mandelbrot-transformation] + Mat mandelbrotImg(4800, 5400, CV_8U); + float x1 = -2.1f, x2 = 0.6f; + float y1 = -1.2f, y2 = 1.2f; + float scaleX = mandelbrotImg.cols / (x2 - x1); + float scaleY = mandelbrotImg.rows / (y2 - y1); + //! [mandelbrot-transformation] + + double t1 = (double) getTickCount(); + //! [mandelbrot-parallel-call] + ParallelMandelbrot parallelMandelbrot(mandelbrotImg, x1, y1, scaleX, scaleY); + parallel_for_(Range(0, mandelbrotImg.rows*mandelbrotImg.cols), parallelMandelbrot); + //! [mandelbrot-parallel-call] + t1 = ((double) getTickCount() - t1) / getTickFrequency(); + cout << "Parallel Mandelbrot: " << t1 << " s" << endl; + + Mat mandelbrotImgSequential(4800, 5400, CV_8U); + double t2 = (double) getTickCount(); + sequentialMandelbrot(mandelbrotImgSequential, x1, y1, scaleX, scaleY); + t2 = ((double) getTickCount() - t2) / getTickFrequency(); + cout << "Sequential Mandelbrot: " << t2 << " s" << endl; + cout << "Speed-up: " << t2/t1 << " X" << endl; + + imwrite("Mandelbrot_parallel.png", mandelbrotImg); + imwrite("Mandelbrot_sequential.png", mandelbrotImgSequential); + + return EXIT_SUCCESS; +} From 7cc0b0f93ea3fa8131b478bc9483199ae933ebe7 Mon Sep 17 00:00:00 2001 From: Tetragramm Date: Tue, 10 Jan 2017 21:38:31 -0600 Subject: [PATCH 14/54] Add case including both moments empty. --- modules/imgproc/src/matchcontours.cpp | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/modules/imgproc/src/matchcontours.cpp b/modules/imgproc/src/matchcontours.cpp index f848bd59a8..2a0c5df330 100644 --- a/modules/imgproc/src/matchcontours.cpp +++ b/modules/imgproc/src/matchcontours.cpp @@ -50,7 +50,7 @@ double cv::matchShapes(InputArray contour1, InputArray contour2, int method, dou double eps = 1.e-5; double mmm; double result = 0; - bool anyResults = false; + bool anyA = false, anyB = false; HuMoments( moments(contour1), ma ); HuMoments( moments(contour2), mb ); @@ -63,6 +63,11 @@ double cv::matchShapes(InputArray contour1, InputArray contour2, int method, dou double ama = fabs( ma[i] ); double amb = fabs( mb[i] ); + if (ama > 0) + anyA = true; + if (amb > 0) + anyB = true; + if( ma[i] > 0 ) sma = 1; else if( ma[i] < 0 ) @@ -81,7 +86,6 @@ double cv::matchShapes(InputArray contour1, InputArray contour2, int method, dou ama = 1. / (sma * log10( ama )); amb = 1. / (smb * log10( amb )); result += fabs( -ama + amb ); - anyResults = true; } } break; @@ -92,6 +96,11 @@ double cv::matchShapes(InputArray contour1, InputArray contour2, int method, dou double ama = fabs( ma[i] ); double amb = fabs( mb[i] ); + if (ama > 0) + anyA = true; + if (amb > 0) + anyB = true; + if( ma[i] > 0 ) sma = 1; else if( ma[i] < 0 ) @@ -110,7 +119,6 @@ double cv::matchShapes(InputArray contour1, InputArray contour2, int method, dou ama = sma * log10( ama ); amb = smb * log10( amb ); result += fabs( -ama + amb ); - anyResults = true; } } break; @@ -121,6 +129,11 @@ double cv::matchShapes(InputArray contour1, InputArray contour2, int method, dou double ama = fabs( ma[i] ); double amb = fabs( mb[i] ); + if (ama > 0) + anyA = true; + if (amb > 0) + anyB = true; + if( ma[i] > 0 ) sma = 1; else if( ma[i] < 0 ) @@ -141,7 +154,6 @@ double cv::matchShapes(InputArray contour1, InputArray contour2, int method, dou mmm = fabs( (ama - amb) / ama ); if( result < mmm ) result = mmm; - anyResults = true; } } break; @@ -149,7 +161,10 @@ double cv::matchShapes(InputArray contour1, InputArray contour2, int method, dou CV_Error( CV_StsBadArg, "Unknown comparison method" ); } - if (!anyResults) + //If anyA and anyB are both true, the result is correct. + //If anyA and anyB are both false, the distance is 0, perfect match. + //If only one is true, then it's a false 0 and return large error. + if (anyA != anyB) result = DBL_MAX; return result; From 7e99911c82f33269cb223b33b646858f79eb2f04 Mon Sep 17 00:00:00 2001 From: Vladislav Sovrasov Date: Wed, 11 Jan 2017 17:17:02 +0300 Subject: [PATCH 15/54] Fix MKL x86 detection on Windows --- cmake/OpenCVFindMKL.cmake | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/cmake/OpenCVFindMKL.cmake b/cmake/OpenCVFindMKL.cmake index f43ce9c286..337456843b 100644 --- a/cmake/OpenCVFindMKL.cmake +++ b/cmake/OpenCVFindMKL.cmake @@ -79,12 +79,13 @@ if(CMAKE_CXX_SIZEOF_DATA_PTR EQUAL 8) include(CheckTypeSize) CHECK_TYPE_SIZE(int _sizeof_int) if (_sizeof_int EQUAL 4) - set(MKL_LP64 "lp64") + set(MKL_ARCH_SUFFIX "lp64") else() - set(MKL_LP64 "ilp64") + set(MKL_ARCH_SUFFIX "ilp64") endif() else() set(MKL_ARCH "ia32") + set(MKL_ARCH_SUFFIX "c") endif() if(${MKL_VERSION_STR} VERSION_GREATER "11.3.0" OR ${MKL_VERSION_STR} VERSION_EQUAL "11.3.0") @@ -94,7 +95,7 @@ if(${MKL_VERSION_STR} VERSION_GREATER "11.3.0" OR ${MKL_VERSION_STR} VERSION_EQU set(mkl_lib_list mkl_core - mkl_intel_${MKL_LP64}) + mkl_intel_${MKL_ARCH_SUFFIX}) if(MKL_WITH_TBB) list(APPEND mkl_lib_list mkl_tbb_thread tbb) @@ -112,7 +113,6 @@ else() mkl_fail() endif() - set(MKL_LIBRARIES "") foreach(lib ${mkl_lib_list}) find_library(${lib} ${lib} ${mkl_lib_find_paths}) @@ -133,4 +133,4 @@ else() #it's ugly but helps to avoid cyclic lib problem set(MKL_LIBRARIES ${MKL_LIBRARIES} ${MKL_LIBRARIES} ${MKL_LIBRARIES} "-lpthread" "-lm" "-ldl") set(MKL_LIBRARIES ${MKL_LIBRARIES} CACHE STRING "MKL libarries") -endif() \ No newline at end of file +endif() From 8b22099da26b4f05fe5198e547ef2975c27284ef Mon Sep 17 00:00:00 2001 From: Tomoaki Teshima Date: Thu, 12 Jan 2017 08:47:28 +0900 Subject: [PATCH 16/54] use universal intrinsic and SSE4 popcount instruction in normHamming - add v_popcount in universal intrinsic - add test for v_popcount - add wrapper of popcount for both MSVC and GCC --- modules/core/include/opencv2/core/cvdef.h | 8 ++ .../include/opencv2/core/hal/intrin_cpp.hpp | 45 ++++++- .../include/opencv2/core/hal/intrin_neon.hpp | 16 +++ .../include/opencv2/core/hal/intrin_sse.hpp | 22 ++++ modules/core/src/stat.cpp | 111 +++++++++++------- modules/core/test/test_intrin.cpp | 18 +++ 6 files changed, 177 insertions(+), 43 deletions(-) diff --git a/modules/core/include/opencv2/core/cvdef.h b/modules/core/include/opencv2/core/cvdef.h index 699b1667b4..810ec56ed3 100644 --- a/modules/core/include/opencv2/core/cvdef.h +++ b/modules/core/include/opencv2/core/cvdef.h @@ -188,8 +188,16 @@ enum CpuFeatures { # if defined __POPCNT__ || (defined _MSC_VER && _MSC_VER >= 1500) # ifdef _MSC_VER # include +# if defined(_M_X64) +# define CV_POPCNT_U64 _mm_popcnt_u64 +# endif +# define CV_POPCNT_U32 _mm_popcnt_u32 # else # include +# if defined(__x86_64__) +# define CV_POPCNT_U64 __builtin_popcountll +# endif +# define CV_POPCNT_U32 __builtin_popcount # endif # define CV_POPCNT 1 # endif diff --git a/modules/core/include/opencv2/core/hal/intrin_cpp.hpp b/modules/core/include/opencv2/core/hal/intrin_cpp.hpp index 93ca397817..e15c97d528 100644 --- a/modules/core/include/opencv2/core/hal/intrin_cpp.hpp +++ b/modules/core/include/opencv2/core/hal/intrin_cpp.hpp @@ -149,7 +149,7 @@ Element-wise binary and unary operations. Most of these operations return only one value. -- Reduce: @ref v_reduce_min, @ref v_reduce_max, @ref v_reduce_sum +- Reduce: @ref v_reduce_min, @ref v_reduce_max, @ref v_reduce_sum, @ref v_popcount - Mask: @ref v_signmask, @ref v_check_all, @ref v_check_any, @ref v_select ### Other math @@ -574,6 +574,49 @@ Scheme: For 32-bit integer and 32-bit floating point types. */ OPENCV_HAL_IMPL_REDUCE_MINMAX_FUNC(v_reduce_max, std::max) +static const unsigned char popCountTable[] = +{ + 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, + 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, + 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, + 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, + 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, + 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, + 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, + 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, + 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, + 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, + 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, + 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, + 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, + 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, + 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, + 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8, +}; +/** @brief Count the 1 bits in the vector and return 4 values + +Scheme: +@code +{A1 A2 A3 ...} => popcount(A1) +@endcode +Any types but result will be in v_uint32x4*/ +template inline v_uint32x4 v_popcount(const v_reg<_Tp, n>& a) +{ + v_uint8x16 b; + b = v_reinterpret_as_u8(a); + for( int i = 0; i < v_uint8x16::nlanes; i++ ) + { + b.s[i] = popCountTable[b.s[i]]; + } + v_uint32x4 c; + for( int i = 0; i < v_uint32x4::nlanes; i++ ) + { + c.s[i] = b.s[i*4] + b.s[i*4+1] + b.s[i*4+2] + b.s[i*4+3]; + } + return c; +} + + //! @cond IGNORED template inline void v_minmax( const v_reg<_Tp, n>& a, const v_reg<_Tp, n>& b, diff --git a/modules/core/include/opencv2/core/hal/intrin_neon.hpp b/modules/core/include/opencv2/core/hal/intrin_neon.hpp index b000733a5f..2bcff2bc15 100644 --- a/modules/core/include/opencv2/core/hal/intrin_neon.hpp +++ b/modules/core/include/opencv2/core/hal/intrin_neon.hpp @@ -813,6 +813,22 @@ OPENCV_HAL_IMPL_NEON_REDUCE_OP_4(v_float32x4, float32x2, float, sum, add, f32) OPENCV_HAL_IMPL_NEON_REDUCE_OP_4(v_float32x4, float32x2, float, max, max, f32) OPENCV_HAL_IMPL_NEON_REDUCE_OP_4(v_float32x4, float32x2, float, min, min, f32) +#define OPENCV_HAL_IMPL_NEON_POPCOUNT(_Tpvec, cast) \ +inline v_uint32x4 v_popcount(const _Tpvec& a) \ +{ \ + uint8x16_t t = vcntq_u8(cast(a.val)); \ + uint16x8_t t0 = vpaddlq_u8(t); /* 16 -> 8 */ \ + uint32x4_t t1 = vpaddlq_u16(t0); /* 8 -> 4 */ \ + return v_uint32x4(t1); \ +} + +OPENCV_HAL_IMPL_NEON_POPCOUNT(v_uint8x16, OPENCV_HAL_NOP) +OPENCV_HAL_IMPL_NEON_POPCOUNT(v_uint16x8, vreinterpretq_u8_u16) +OPENCV_HAL_IMPL_NEON_POPCOUNT(v_uint32x4, vreinterpretq_u8_u32) +OPENCV_HAL_IMPL_NEON_POPCOUNT(v_int8x16, vreinterpretq_u8_s8) +OPENCV_HAL_IMPL_NEON_POPCOUNT(v_int16x8, vreinterpretq_u8_s16) +OPENCV_HAL_IMPL_NEON_POPCOUNT(v_int32x4, vreinterpretq_u8_s32) + inline int v_signmask(const v_uint8x16& a) { int8x8_t m0 = vcreate_s8(CV_BIG_UINT(0x0706050403020100)); diff --git a/modules/core/include/opencv2/core/hal/intrin_sse.hpp b/modules/core/include/opencv2/core/hal/intrin_sse.hpp index fc81dac35d..9ff10c9b47 100644 --- a/modules/core/include/opencv2/core/hal/intrin_sse.hpp +++ b/modules/core/include/opencv2/core/hal/intrin_sse.hpp @@ -1121,6 +1121,28 @@ OPENCV_HAL_IMPL_SSE_REDUCE_OP_4(v_float32x4, float, sum, OPENCV_HAL_ADD) OPENCV_HAL_IMPL_SSE_REDUCE_OP_4(v_float32x4, float, max, std::max) OPENCV_HAL_IMPL_SSE_REDUCE_OP_4(v_float32x4, float, min, std::min) +#define OPENCV_HAL_IMPL_SSE_POPCOUNT(_Tpvec) \ +inline v_uint32x4 v_popcount(const _Tpvec& a) \ +{ \ + __m128i m1 = _mm_set1_epi32(0x55555555); \ + __m128i m2 = _mm_set1_epi32(0x33333333); \ + __m128i m4 = _mm_set1_epi32(0x0f0f0f0f); \ + __m128i p = a.val; \ + p = _mm_add_epi32(_mm_and_si128(_mm_srli_epi32(p, 1), m1), _mm_and_si128(p, m1)); \ + p = _mm_add_epi32(_mm_and_si128(_mm_srli_epi32(p, 2), m2), _mm_and_si128(p, m2)); \ + p = _mm_add_epi32(_mm_and_si128(_mm_srli_epi32(p, 4), m4), _mm_and_si128(p, m4)); \ + p = _mm_adds_epi8(p, _mm_srli_si128(p, 1)); \ + p = _mm_adds_epi8(p, _mm_srli_si128(p, 2)); \ + return v_uint32x4(_mm_and_si128(p, _mm_set1_epi32(0x000000ff))); \ +} + +OPENCV_HAL_IMPL_SSE_POPCOUNT(v_uint8x16) +OPENCV_HAL_IMPL_SSE_POPCOUNT(v_uint16x8) +OPENCV_HAL_IMPL_SSE_POPCOUNT(v_uint32x4) +OPENCV_HAL_IMPL_SSE_POPCOUNT(v_int8x16) +OPENCV_HAL_IMPL_SSE_POPCOUNT(v_int16x8) +OPENCV_HAL_IMPL_SSE_POPCOUNT(v_int32x4) + #define OPENCV_HAL_IMPL_SSE_CHECK_SIGNS(_Tpvec, suffix, pack_op, and_op, signmask, allmask) \ inline int v_signmask(const _Tpvec& a) \ { \ diff --git a/modules/core/src/stat.cpp b/modules/core/src/stat.cpp index e1fddb220d..3336152a44 100644 --- a/modules/core/src/stat.cpp +++ b/modules/core/src/stat.cpp @@ -44,6 +44,7 @@ #include "precomp.hpp" #include #include +#include "opencv2/core/hal/intrin.hpp" #include "opencl_kernels_core.hpp" @@ -4238,22 +4239,8 @@ int normHamming(const uchar* a, int n) { int i = 0; int result = 0; -#if CV_NEON - { - uint32x4_t bits = vmovq_n_u32(0); - for (; i <= n - 16; i += 16) { - uint8x16_t A_vec = vld1q_u8 (a + i); - uint8x16_t bitsSet = vcntq_u8 (A_vec); - uint16x8_t bitSet8 = vpaddlq_u8 (bitsSet); - uint32x4_t bitSet4 = vpaddlq_u16 (bitSet8); - bits = vaddq_u32(bits, bitSet4); - } - uint64x2_t bitSet2 = vpaddlq_u32 (bits); - result = vgetq_lane_s32 (vreinterpretq_s32_u64(bitSet2),0); - result += vgetq_lane_s32 (vreinterpretq_s32_u64(bitSet2),2); - } -#elif CV_AVX2 - if (USE_AVX2) +#if CV_AVX2 + if(USE_AVX2) { __m256i _r0 = _mm256_setzero_si256(); __m256i _0 = _mm256_setzero_si256(); @@ -4274,12 +4261,40 @@ int normHamming(const uchar* a, int n) _r0 = _mm256_add_epi32(_r0, _mm256_shuffle_epi32(_r0, 2)); result = _mm256_extract_epi32_(_mm256_add_epi32(_r0, _mm256_permute2x128_si256(_r0, _r0, 1)), 0); } +#elif CV_POPCNT + if(checkHardwareSupport(CV_CPU_POPCNT)) + { +# if defined CV_POPCNT_U64 + for(; i <= n - 8; i += 8) + { + result += (int)CV_POPCNT_U64(*(uint64*)(a + i)); + } +# endif + for(; i <= n - 4; i += 4) + { + result += CV_POPCNT_U32(*(uint*)(a + i)); + } + } +#elif CV_SIMD128 + if(hasSIMD128()) + { + v_uint32x4 t = v_setzero_u32(); + for(; i <= n - v_uint8x16::nlanes; i += v_uint8x16::nlanes) + { + t += v_popcount(v_load(a + i)); + } + result = v_reduce_sum(t); + } #endif - for( ; i <= n - 4; i += 4 ) - result += popCountTable[a[i]] + popCountTable[a[i+1]] + - popCountTable[a[i+2]] + popCountTable[a[i+3]]; - for( ; i < n; i++ ) + for(; i <= n - 4; i += 4) + { + result += popCountTable[a[i]] + popCountTable[a[i+1]] + + popCountTable[a[i+2]] + popCountTable[a[i+3]]; + } + for(; i < n; i++) + { result += popCountTable[a[i]]; + } return result; } @@ -4287,24 +4302,8 @@ int normHamming(const uchar* a, const uchar* b, int n) { int i = 0; int result = 0; -#if CV_NEON - { - uint32x4_t bits = vmovq_n_u32(0); - for (; i <= n - 16; i += 16) { - uint8x16_t A_vec = vld1q_u8 (a + i); - uint8x16_t B_vec = vld1q_u8 (b + i); - uint8x16_t AxorB = veorq_u8 (A_vec, B_vec); - uint8x16_t bitsSet = vcntq_u8 (AxorB); - uint16x8_t bitSet8 = vpaddlq_u8 (bitsSet); - uint32x4_t bitSet4 = vpaddlq_u16 (bitSet8); - bits = vaddq_u32(bits, bitSet4); - } - uint64x2_t bitSet2 = vpaddlq_u32 (bits); - result = vgetq_lane_s32 (vreinterpretq_s32_u64(bitSet2),0); - result += vgetq_lane_s32 (vreinterpretq_s32_u64(bitSet2),2); - } -#elif CV_AVX2 - if (USE_AVX2) +#if CV_AVX2 + if(USE_AVX2) { __m256i _r0 = _mm256_setzero_si256(); __m256i _0 = _mm256_setzero_si256(); @@ -4328,12 +4327,40 @@ int normHamming(const uchar* a, const uchar* b, int n) _r0 = _mm256_add_epi32(_r0, _mm256_shuffle_epi32(_r0, 2)); result = _mm256_extract_epi32_(_mm256_add_epi32(_r0, _mm256_permute2x128_si256(_r0, _r0, 1)), 0); } +#elif CV_POPCNT + if(checkHardwareSupport(CV_CPU_POPCNT)) + { +# if defined CV_POPCNT_U64 + for(; i <= n - 8; i += 8) + { + result += (int)CV_POPCNT_U64(*(uint64*)(a + i) ^ *(uint64*)(b + i)); + } +# endif + for(; i <= n - 4; i += 4) + { + result += CV_POPCNT_U32(*(uint*)(a + i) ^ *(uint*)(b + i)); + } + } +#elif CV_SIMD128 + if(hasSIMD128()) + { + v_uint32x4 t = v_setzero_u32(); + for(; i <= n - v_uint8x16::nlanes; i += v_uint8x16::nlanes) + { + t += v_popcount(v_load(a + i) ^ v_load(b + i)); + } + result = v_reduce_sum(t); + } #endif - for( ; i <= n - 4; i += 4 ) - result += popCountTable[a[i] ^ b[i]] + popCountTable[a[i+1] ^ b[i+1]] + - popCountTable[a[i+2] ^ b[i+2]] + popCountTable[a[i+3] ^ b[i+3]]; - for( ; i < n; i++ ) + for(; i <= n - 4; i += 4) + { + result += popCountTable[a[i] ^ b[i]] + popCountTable[a[i+1] ^ b[i+1]] + + popCountTable[a[i+2] ^ b[i+2]] + popCountTable[a[i+3] ^ b[i+3]]; + } + for(; i < n; i++) + { result += popCountTable[a[i] ^ b[i]]; + } return result; } diff --git a/modules/core/test/test_intrin.cpp b/modules/core/test/test_intrin.cpp index 66b2083a37..0ec24ef1fb 100644 --- a/modules/core/test/test_intrin.cpp +++ b/modules/core/test/test_intrin.cpp @@ -404,6 +404,18 @@ template struct TheTest return *this; } + TheTest & test_popcount() + { + static unsigned popcountTable[] = {0, 1, 2, 4, 5, 7, 9, 12, 13, 15, 17, 20, 22, 25, 28, 32, 33}; + Data dataA; + R a = dataA; + + unsigned resB = (unsigned)v_reduce_sum(v_popcount(a)); + EXPECT_EQ(popcountTable[R::nlanes], resB); + + return *this; + } + TheTest & test_absdiff() { typedef typename V_RegTrait128::u_reg Ru; @@ -798,6 +810,7 @@ TEST(hal_intrin, uint8x16) { .test_min_max() .test_absdiff() .test_mask() + .test_popcount() .test_pack<1>().test_pack<2>().test_pack<3>().test_pack<8>() .test_pack_u<1>().test_pack_u<2>().test_pack_u<3>().test_pack_u<8>() .test_unpack() @@ -819,6 +832,7 @@ TEST(hal_intrin, int8x16) { .test_absdiff() .test_abs() .test_mask() + .test_popcount() .test_pack<1>().test_pack<2>().test_pack<3>().test_pack<8>() .test_unpack() .test_extract<0>().test_extract<1>().test_extract<8>().test_extract<15>() @@ -844,6 +858,7 @@ TEST(hal_intrin, uint16x8) { .test_absdiff() .test_reduce() .test_mask() + .test_popcount() .test_pack<1>().test_pack<2>().test_pack<7>().test_pack<16>() .test_pack_u<1>().test_pack_u<2>().test_pack_u<7>().test_pack_u<16>() .test_unpack() @@ -870,6 +885,7 @@ TEST(hal_intrin, int16x8) { .test_abs() .test_reduce() .test_mask() + .test_popcount() .test_pack<1>().test_pack<2>().test_pack<7>().test_pack<16>() .test_unpack() .test_extract<0>().test_extract<1>().test_extract<4>().test_extract<7>() @@ -894,6 +910,7 @@ TEST(hal_intrin, uint32x4) { .test_absdiff() .test_reduce() .test_mask() + .test_popcount() .test_pack<1>().test_pack<2>().test_pack<15>().test_pack<32>() .test_unpack() .test_extract<0>().test_extract<1>().test_extract<2>().test_extract<3>() @@ -910,6 +927,7 @@ TEST(hal_intrin, int32x4) { .test_mul() .test_abs() .test_cmp() + .test_popcount() .test_shift<1>().test_shift<8>() .test_logic() .test_min_max() From f94e64a0ae12463de03281bb4434044872337612 Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Thu, 12 Jan 2017 14:38:47 +0300 Subject: [PATCH 17/54] cuda: fix CUDA tests initialization --- modules/ts/include/opencv2/ts.hpp | 7 ++++++- modules/ts/include/opencv2/ts/cuda_test.hpp | 6 ++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/modules/ts/include/opencv2/ts.hpp b/modules/ts/include/opencv2/ts.hpp index c573905c6f..a1981926ff 100644 --- a/modules/ts/include/opencv2/ts.hpp +++ b/modules/ts/include/opencv2/ts.hpp @@ -604,12 +604,17 @@ void dumpOpenCLDevice(); void parseCustomOptions(int argc, char **argv); -#define CV_TEST_MAIN(resourcesubdir, ...) \ +#define CV_TEST_INIT0_NOOP (void)0 + +#define CV_TEST_MAIN(resourcesubdir, ...) CV_TEST_MAIN_EX(resourcesubdir, NOOP, __VA_ARGS__) + +#define CV_TEST_MAIN_EX(resourcesubdir, INIT0, ...) \ int main(int argc, char **argv) \ { \ using namespace cvtest; \ TS* ts = TS::ptr(); \ ts->init(resourcesubdir); \ + __CV_TEST_EXEC_ARGS(CV_TEST_INIT0_ ## INIT0) \ ::testing::InitGoogleTest(&argc, argv); \ cvtest::printVersionInfo(); \ TEST_DUMP_OCL_INFO \ diff --git a/modules/ts/include/opencv2/ts/cuda_test.hpp b/modules/ts/include/opencv2/ts/cuda_test.hpp index b459bb358f..2780927304 100644 --- a/modules/ts/include/opencv2/ts/cuda_test.hpp +++ b/modules/ts/include/opencv2/ts/cuda_test.hpp @@ -351,8 +351,10 @@ namespace cv { namespace cuda #ifdef HAVE_CUDA -#define CV_CUDA_TEST_MAIN(resourcesubdir) \ - CV_TEST_MAIN(resourcesubdir, cvtest::parseCudaDeviceOptions(argc, argv), cvtest::printCudaInfo(), cv::setUseOptimized(false)) +#define CV_TEST_INIT0_CUDA cvtest::parseCudaDeviceOptions(argc, argv), cvtest::printCudaInfo(), cv::setUseOptimized(false) + +#define CV_CUDA_TEST_MAIN(resourcesubdir, ...) \ + CV_TEST_MAIN_EX(resourcesubdir, CUDA, __VA_ARGS__) #else // HAVE_CUDA From b7630a088b25bf7e7cf88878510c1a09c8b840ee Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Thu, 12 Jan 2017 19:14:51 +0300 Subject: [PATCH 18/54] cmake: add global defines to enable useful macros --- cmake/OpenCVModule.cmake | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cmake/OpenCVModule.cmake b/cmake/OpenCVModule.cmake index 742a287ec9..ebeb25cf2b 100644 --- a/cmake/OpenCVModule.cmake +++ b/cmake/OpenCVModule.cmake @@ -224,6 +224,10 @@ macro(ocv_add_module _name) endif() if((NOT OPENCV_MODULE_${the_module}_IS_PART_OF_WORLD AND NOT ${the_module} STREQUAL opencv_world) OR NOT ${BUILD_opencv_world}) project(${the_module}) + add_definitions( + -D_USE_MATH_DEFINES # M_PI constant in MSVS + -D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS # to use C libraries from C++ code (ffmpeg) + ) endif() endif() endmacro() From 8c66531c42c5c37ae2647a96f84e13abe2119e02 Mon Sep 17 00:00:00 2001 From: mshabunin Date: Thu, 12 Jan 2017 19:12:54 +0300 Subject: [PATCH 19/54] imgproc/CLAHE/ocl: Removed unnecessary __local variable --- modules/imgproc/src/opencl/clahe.cl | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/modules/imgproc/src/opencl/clahe.cl b/modules/imgproc/src/opencl/clahe.cl index 187933ce0c..ba69085634 100644 --- a/modules/imgproc/src/opencl/clahe.cl +++ b/modules/imgproc/src/opencl/clahe.cl @@ -186,21 +186,13 @@ __kernel void calcLut(__global __const uchar * src, const int srcStep, #else clipped = smem[0]; #endif - - // broadcast evaluated value - - __local int totalClipped; - - if (tid == 0) - totalClipped = clipped; barrier(CLK_LOCAL_MEM_FENCE); // redistribute clipped samples evenly - - int redistBatch = totalClipped / 256; + int redistBatch = clipped / 256; tHistVal += redistBatch; - int residual = totalClipped - redistBatch * 256; + int residual = clipped - redistBatch * 256; int rStep = 256 / residual; if (rStep < 1) rStep = 1; From 256aa5332626464f6b6548946ae708062b79de5d Mon Sep 17 00:00:00 2001 From: Nicholas Nadeau Date: Mon, 16 Jan 2017 05:03:49 -0500 Subject: [PATCH 20/54] Merge pull request #7994 from nnadeau:master Fixed exceptions, print statements, and long types for gen_pattern.py to be Python 3 compatible (#7994) * fixed exceptions and print statements to be python 3 compatible; removed long type checks (py3 uses int); whitespace reformatting * Pulled latest svgfig from upstream https://github.com/jpivarski/svgfig/commit/f3179a8926508bf0f9021fd4e1f9731c95524a38 --- doc/pattern_tools/gen_pattern.py | 8 +-- doc/pattern_tools/svgfig.py | 104 +++++++++++++++++-------------- 2 files changed, 60 insertions(+), 52 deletions(-) diff --git a/doc/pattern_tools/gen_pattern.py b/doc/pattern_tools/gen_pattern.py index 85b3ea4955..34512bad27 100755 --- a/doc/pattern_tools/gen_pattern.py +++ b/doc/pattern_tools/gen_pattern.py @@ -70,9 +70,9 @@ def main(): opts, args = getopt.getopt(sys.argv[1:], "Ho:c:r:T:u:s:R:w:h:a:", ["help","output=","columns=","rows=", "type=","units=","square_size=","radius_rate=", "page_width=","page_height=", "page_size="]) - except getopt.error, msg: - print msg - print "for help use --help" + except getopt.error as msg: + print(msg) + print("for help use --help") sys.exit(2) output = "out.svg" columns = 8 @@ -89,7 +89,7 @@ def main(): # process options for o, a in opts: if o in ("-H", "--help"): - print __doc__ + print(__doc__) sys.exit(0) elif o in ("-r", "--rows"): rows = int(a) diff --git a/doc/pattern_tools/svgfig.py b/doc/pattern_tools/svgfig.py index c690c9ff08..5e1b1df45d 100755 --- a/doc/pattern_tools/svgfig.py +++ b/doc/pattern_tools/svgfig.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python - # svgfig.py copyright (C) 2008 Jim Pivarski # # This program is free software; you can redistribute it and/or @@ -21,6 +19,15 @@ import re, codecs, os, platform, copy, itertools, math, cmath, random, sys, copy _epsilon = 1e-5 +if sys.version_info >= (3,0): + long = int + basestring = (str,bytes) + +# Fix Python 2.x. +try: + UNICODE_EXISTS = bool(type(unicode)) +except NameError: + unicode = lambda s: str(s) if re.search("windows", platform.system(), re.I): try: @@ -49,20 +56,21 @@ def rgb(r, g, b, maximum=1.): max(0, min(b*255./maximum, 255))) def attr_preprocess(attr): + attrCopy = attr.copy() for name in attr.keys(): name_colon = re.sub("__", ":", name) if name_colon != name: - attr[name_colon] = attr[name] - del attr[name] + attrCopy[name_colon] = attrCopy[name] + del attrCopy[name] name = name_colon name_dash = re.sub("_", "-", name) if name_dash != name: - attr[name_dash] = attr[name] - del attr[name] + attrCopy[name_dash] = attrCopy[name] + del attrCopy[name] name = name_dash - return attr + return attrCopy class SVG: @@ -128,7 +136,7 @@ class SVG: """ def __init__(self, *t_sub, **attr): if len(t_sub) == 0: - raise TypeError, "SVG element must have a t (SVG type)" + raise TypeError( "SVG element must have a t (SVG type)") # first argument is t (SVG type) self.t = t_sub[0] @@ -262,7 +270,7 @@ class SVG: Returns a breadth-first generator over the SVG. If depth_limit is a number, stop recursion at that depth.""" - raise NotImplementedError, "Got an algorithm for breadth-first searching a tree without effectively copying the tree?" + raise NotImplementedError( "Got an algorithm for breadth-first searching a tree without effectively copying the tree?") def __iter__(self): return self.depth_first() @@ -558,7 +566,7 @@ def canvas_outline(*sub, **attr): svg = canvas(*sub, **attr) match = re.match(r"[, \t]*([0-9e.+\-]+)[, \t]+([0-9e.+\-]+)[, \t]+([0-9e.+\-]+)[, \t]+([0-9e.+\-]+)[, \t]*", svg["viewBox"]) if match is None: - raise ValueError, "canvas viewBox is incorrectly formatted" + raise ValueError( "canvas viewBox is incorrectly formatted") x, y, width, height = [float(x) for x in match.groups()] svg.prepend(SVG("rect", x=x, y=y, width=width, height=height, stroke="none", fill="cornsilk")) svg.append(SVG("rect", x=x, y=y, width=width, height=height, stroke="black", fill="none")) @@ -675,7 +683,7 @@ def totrans(expr, vars=("x", "y"), globals=None, locals=None): return output else: - raise TypeError, "must be a function of 2 or 1 variables" + raise TypeError( "must be a function of 2 or 1 variables") if len(vars) == 2: g = math.__dict__ @@ -696,7 +704,7 @@ def totrans(expr, vars=("x", "y"), globals=None, locals=None): return output2 else: - raise TypeError, "vars must have 2 or 1 elements" + raise TypeError( "vars must have 2 or 1 elements") def window(xmin, xmax, ymin, ymax, x=0, y=0, width=100, height=100, @@ -735,10 +743,10 @@ def window(xmin, xmax, ymin, ymax, x=0, y=0, width=100, height=100, iy2 = ymax if xlogbase is not None and (ix1 <= 0. or ix2 <= 0.): - raise ValueError, "x range incompatible with log scaling: (%g, %g)" % (ix1, ix2) + raise ValueError ("x range incompatible with log scaling: (%g, %g)" % (ix1, ix2)) if ylogbase is not None and (iy1 <= 0. or iy2 <= 0.): - raise ValueError, "y range incompatible with log scaling: (%g, %g)" % (iy1, iy2) + raise ValueError ("y range incompatible with log scaling: (%g, %g)" % (iy1, iy2)) def maybelog(t, it1, it2, ot1, ot2, logbase): if t <= 0.: @@ -813,7 +821,7 @@ class Fig: self.trans = kwds["trans"]; del kwds["trans"] if len(kwds) != 0: - raise TypeError, "Fig() got unexpected keyword arguments %s" % kwds.keys() + raise TypeError ("Fig() got unexpected keyword arguments %s" % kwds.keys()) def SVG(self, trans=None): """Apply the transformation "trans" and return an SVG object. @@ -931,7 +939,7 @@ class Plot: self.text_attr = kwds["text_attr"]; del kwds["text_attr"] self.axis_attr = kwds["axis_attr"]; del kwds["axis_attr"] if len(kwds) != 0: - raise TypeError, "Plot() got unexpected keyword arguments %s" % kwds.keys() + raise TypeError ("Plot() got unexpected keyword arguments %s" % kwds.keys()) def SVG(self, trans=None): """Apply the transformation "trans" and return an SVG object.""" @@ -1039,7 +1047,7 @@ class Frame: self.axis_attr.update(kwds["axis_attr"]); del kwds["axis_attr"] if len(kwds) != 0: - raise TypeError, "Frame() got unexpected keyword arguments %s" % kwds.keys() + raise TypeError( "Frame() got unexpected keyword arguments %s" % kwds.keys()) def SVG(self): """Apply the window transformation and return an SVG object.""" @@ -1101,7 +1109,7 @@ class Frame: def pathtoPath(svg): """Converts SVG("path", d="...") into Path(d=[...]).""" if not isinstance(svg, SVG) or svg.t != "path": - raise TypeError, "Only SVG objects can be converted into Paths" + raise TypeError ("Only SVG objects can be converted into Paths") attr = dict(svg.attr) d = attr["d"] del attr["d"] @@ -1235,7 +1243,7 @@ class Path: errstring = "Path command \"%s\" requires a number at index %d" % (command, index) num1, index, pathdata = self.parse_number(index, pathdata) if num1 is None: - raise ValueError, errstring + raise ValueError ( errstring) while num1 is not None: output.append((command, num1)) @@ -1248,11 +1256,11 @@ class Path: num2, index, pathdata = self.parse_number(index, pathdata) if num1 is None: - raise ValueError, errstring + raise ValueError ( errstring) while num1 is not None: if num2 is None: - raise ValueError, errstring + raise ValueError ( errstring) output.append((command, num1, num2, False)) num1, index, pathdata = self.parse_number(index, pathdata) @@ -1267,11 +1275,11 @@ class Path: num4, index, pathdata = self.parse_number(index, pathdata) if num1 is None: - raise ValueError, errstring + raise ValueError ( errstring ) while num1 is not None: if num2 is None or num3 is None or num4 is None: - raise ValueError, errstring + raise ValueError (errstring) output.append((command, num1, num2, False, num3, num4, False)) num1, index, pathdata = self.parse_number(index, pathdata) @@ -1290,11 +1298,11 @@ class Path: num6, index, pathdata = self.parse_number(index, pathdata) if num1 is None: - raise ValueError, errstring + raise ValueError(errstring) while num1 is not None: if num2 is None or num3 is None or num4 is None or num5 is None or num6 is None: - raise ValueError, errstring + raise ValueError(errstring) output.append((command, num1, num2, False, num3, num4, False, num5, num6, False)) @@ -1317,11 +1325,11 @@ class Path: num7, index, pathdata = self.parse_number(index, pathdata) if num1 is None: - raise ValueError, errstring + raise ValueError(errstring) while num1 is not None: if num2 is None or num3 is None or num4 is None or num5 is None or num6 is None or num7 is None: - raise ValueError, errstring + raise ValueError(errstring) output.append((command, num1, num2, False, num3, num4, num5, num6, num7, False)) @@ -1344,7 +1352,7 @@ class Path: output = [] for datum in self.d: if not isinstance(datum, (tuple, list)): - raise TypeError, "pathdata elements must be tuples/lists" + raise TypeError("pathdata elements must be tuples/lists") command = datum[0] @@ -1722,7 +1730,7 @@ class Curve: try: # the best way to keep all the information while sampling is to make a linked list if not (self.low < self.high): - raise ValueError, "low must be less than high" + raise ValueError("low must be less than high") low, high = self.Sample(float(self.low)), self.Sample(float(self.high)) low.link(None, high) high.link(low, None) @@ -1913,10 +1921,10 @@ class Poly: vx[i], vy[i] = 0., 0. else: - raise ValueError, "mode must be \"lines\", \"bezier\", \"velocity\", \"foreback\", \"smooth\", or an abbreviation" + raise ValueError("mode must be \"lines\", \"bezier\", \"velocity\", \"foreback\", \"smooth\", or an abbreviation") d = [] - indexes = range(len(self.d)) + indexes = list(range(len(self.d))) if self.loop and len(self.d) > 0: indexes.append(0) @@ -2220,7 +2228,7 @@ class Line(Curve): defs.append(make_marker(self.arrow_start, "arrow_start")) line.attr["marker-start"] = "url(#%s)" % self.arrow_start else: - raise TypeError, "arrow_start must be False/None or an id string for the new marker" + raise TypeError("arrow_start must be False/None or an id string for the new marker") if self.arrow_end != False and self.arrow_end is not None: if isinstance(self.arrow_end, SVG): @@ -2230,7 +2238,7 @@ class Line(Curve): defs.append(make_marker(self.arrow_end, "arrow_end")) line.attr["marker-end"] = "url(#%s)" % self.arrow_end else: - raise TypeError, "arrow_end must be False/None or an id string for the new marker" + raise TypeError("arrow_end must be False/None or an id string for the new marker") return SVG("g", defs, line) @@ -2316,7 +2324,7 @@ class LineGlobal: defs.append(make_marker(self.arrow_start, "arrow_start")) line.attr["marker-start"] = "url(#%s)" % self.arrow_start else: - raise TypeError, "arrow_start must be False/None or an id string for the new marker" + raise TypeError("arrow_start must be False/None or an id string for the new marker") if self.arrow_end != False and self.arrow_end is not None: if isinstance(self.arrow_end, SVG): @@ -2326,7 +2334,7 @@ class LineGlobal: defs.append(make_marker(self.arrow_end, "arrow_end")) line.attr["marker-end"] = "url(#%s)" % self.arrow_end else: - raise TypeError, "arrow_end must be False/None or an id string for the new marker" + raise TypeError("arrow_end must be False/None or an id string for the new marker") return SVG("g", defs, line) @@ -2681,7 +2689,7 @@ class Ticks: elif isinstance(self.arrow_start, basestring): defs.append(make_marker(self.arrow_start, "arrow_start")) else: - raise TypeError, "arrow_start must be False/None or an id string for the new marker" + raise TypeError("arrow_start must be False/None or an id string for the new marker") if self.arrow_end != False and self.arrow_end is not None: if isinstance(self.arrow_end, SVG): @@ -2689,7 +2697,7 @@ class Ticks: elif isinstance(self.arrow_end, basestring): defs.append(make_marker(self.arrow_end, "arrow_end")) else: - raise TypeError, "arrow_end must be False/None or an id string for the new marker" + raise TypeError("arrow_end must be False/None or an id string for the new marker") output.append(defs) @@ -2757,7 +2765,7 @@ class Ticks: format = self.labels else: - raise TypeError, "labels must be None/False, True, a format string, or a number->string function" + raise TypeError("labels must be None/False, True, a format string, or a number->string function") # Now for the ticks ticks = self.ticks @@ -2793,7 +2801,7 @@ class Ticks: return ticks, [] else: - raise TypeError, "miniticks must be None/False, True, a number of desired miniticks, or a list of numbers" + raise TypeError("miniticks must be None/False, True, a number of desired miniticks, or a list of numbers") # Cases 3 & 4: ticks is iterable elif getattr(ticks, "__iter__", False): @@ -2830,10 +2838,10 @@ class Ticks: return ticks, [] else: - raise TypeError, "miniticks must be None/False, True, a number of desired miniticks, or a list of numbers" + raise TypeError("miniticks must be None/False, True, a number of desired miniticks, or a list of numbers") else: - raise TypeError, "ticks must be None/False, a number of desired ticks, a list of numbers, or a dictionary of explicit markers" + raise TypeError("ticks must be None/False, a number of desired ticks, a list of numbers, or a dictionary of explicit markers") def compute_ticks(self, N, format): """Return less than -N or exactly N optimal linear ticks. @@ -2841,9 +2849,9 @@ class Ticks: Normally only used internally. """ if self.low >= self.high: - raise ValueError, "low must be less than high" + raise ValueError("low must be less than high") if N == 1: - raise ValueError, "N can be 0 or >1 to specify the exact number of ticks or negative to specify a maximum" + raise ValueError("N can be 0 or >1 to specify the exact number of ticks or negative to specify a maximum") eps = _epsilon * (self.high - self.low) @@ -2948,7 +2956,7 @@ class Ticks: original_ticks.sort() if self.low > original_ticks[0] + _epsilon or self.high < original_ticks[-1] - _epsilon: - raise ValueError, "original_ticks {%g...%g} extend beyond [%g, %g]" % (original_ticks[0], original_ticks[-1], self.low, self.high) + raise ValueError("original_ticks {%g...%g} extend beyond [%g, %g]" % (original_ticks[0], original_ticks[-1], self.low, self.high)) granularities = [] for i in range(len(original_ticks)-1): @@ -2975,9 +2983,9 @@ class Ticks: Normally only used internally. """ if self.low >= self.high: - raise ValueError, "low must be less than high" + raise ValueError("low must be less than high") if N == 1: - raise ValueError, "N can be 0 or >1 to specify the exact number of ticks or negative to specify a maximum" + raise ValueError("N can be 0 or >1 to specify the exact number of ticks or negative to specify a maximum") eps = _epsilon * (self.high - self.low) @@ -3032,7 +3040,7 @@ class Ticks: Normally only used internally. """ if self.low >= self.high: - raise ValueError, "low must be less than high" + raise ValueError("low must be less than high") lowN = math.floor(math.log(self.low, base)) highN = math.ceil(math.log(self.high, base)) @@ -3166,7 +3174,7 @@ class LineAxis(Line, Ticks): def interpret(self): if self.exclude is not None and not (isinstance(self.exclude, (tuple, list)) and len(self.exclude) == 2 and isinstance(self.exclude[0], (int, long, float)) and isinstance(self.exclude[1], (int, long, float))): - raise TypeError, "exclude must either be None or (low, high)" + raise TypeError("exclude must either be None or (low, high)") ticks, miniticks = Ticks.interpret(self) if self.exclude is None: From a8e5d1d9fdae183762d4e06a7e25473d10ef1974 Mon Sep 17 00:00:00 2001 From: logic1988 <1988heqian@163.com> Date: Mon, 16 Jan 2017 18:19:24 +0800 Subject: [PATCH 21/54] Merge pull request #7978 from logic1988:master Fix error usage in HitMiss tutorial, and improved the visualization results (#7978) * Fix error usage in HitMiss tutorial, and improved the visualization results Fix error usage in HitMiss tutorial, and improved the visualization results * Update HitMiss.cpp * Update HitMiss.cpp --- samples/cpp/tutorial_code/ImgProc/HitMiss.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/samples/cpp/tutorial_code/ImgProc/HitMiss.cpp b/samples/cpp/tutorial_code/ImgProc/HitMiss.cpp index 0463aabe39..806eec489e 100644 --- a/samples/cpp/tutorial_code/ImgProc/HitMiss.cpp +++ b/samples/cpp/tutorial_code/ImgProc/HitMiss.cpp @@ -15,7 +15,7 @@ int main(){ 0, 255, 0, 255, 0, 0, 255, 0, 0, 255, 255, 255, 0, 0, 0, 0); - Mat kernel = (Mat_(3, 3) << + Mat kernel = (Mat_(3, 3) << 0, 1, 0, 1, -1, 1, 0, 1, 0); @@ -23,10 +23,15 @@ int main(){ Mat output_image; morphologyEx(input_image, output_image, MORPH_HITMISS, kernel); - namedWindow("Original", CV_WINDOW_NORMAL); + const int rate = 10; + kernel = (kernel + 1) * 127; + kernel.convertTo(kernel, CV_8U); + cv::resize(kernel, kernel, cv::Size(), rate, rate, INTER_NEAREST); + imshow("kernel", kernel); + cv::resize(input_image, input_image, cv::Size(), rate, rate, INTER_NEAREST); imshow("Original", input_image); - namedWindow("Hit or Miss", CV_WINDOW_NORMAL); + cv::resize(output_image, output_image, cv::Size(), rate, rate, INTER_NEAREST); imshow("Hit or Miss", output_image); waitKey(0); return 0; -} \ No newline at end of file +} From 89a740a62f66a2f55b7f3e87bad96e10d880f523 Mon Sep 17 00:00:00 2001 From: berak Date: Tue, 17 Jan 2017 11:57:50 +0100 Subject: [PATCH 22/54] Merge pull request #8019 from berak:patch-2 ml: fix small typo in lr.cpp (#8019) --- modules/ml/src/lr.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/ml/src/lr.cpp b/modules/ml/src/lr.cpp index 57fcac7ef0..c3c314228b 100644 --- a/modules/ml/src/lr.cpp +++ b/modules/ml/src/lr.cpp @@ -579,7 +579,7 @@ void LogisticRegressionImpl::write(FileStorage& fs) const CV_Error(CV_StsBadArg,"file can't open. Check file path"); } writeFormat(fs); - string desc = "Logisitic Regression Classifier"; + string desc = "Logistic Regression Classifier"; fs<<"classifier"<params.alpha; fs<<"iterations"<params.num_iters; From 2b44c0b6493726c465152e1db82cd8e65944d0db Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Fri, 23 Dec 2016 14:50:33 +0300 Subject: [PATCH 23/54] cmake: fix lapack - added compile check with multiple tries for different configurations - restored find_package(LAPACK) - avoided modification of OPENCV_LINKER_LIBS --- cmake/OpenCVFindLAPACK.cmake | 213 +++++++++++++++++++++++----------- cmake/checks/lapack_check.cpp | 14 +++ modules/core/CMakeLists.txt | 2 +- 3 files changed, 162 insertions(+), 67 deletions(-) create mode 100644 cmake/checks/lapack_check.cpp diff --git a/cmake/OpenCVFindLAPACK.cmake b/cmake/OpenCVFindLAPACK.cmake index dfacf24328..0bee1b4c90 100644 --- a/cmake/OpenCVFindLAPACK.cmake +++ b/cmake/OpenCVFindLAPACK.cmake @@ -1,78 +1,159 @@ -macro(_find_file_in_dirs VAR NAME DIRS) - find_path(${VAR} ${NAME} ${DIRS} NO_DEFAULT_PATH) - set(${VAR} ${${VAR}}/${NAME}) - unset(${VAR} CACHE) +macro(_find_header_file_in_dirs VAR NAME) + unset(${VAR}) + unset(${VAR} CACHE) + if(" ${ARGN}" STREQUAL " ") + check_include_file("${NAME}" HAVE_${VAR}) + if(HAVE_${VAR}) + set(${VAR} "${NAME}") # fallback + else() + set(${VAR} "") + endif() + else() + find_path(${VAR} "${NAME}" ${ARGN} NO_DEFAULT_PATH) + if(${VAR}) + set(${VAR} "${${VAR}}/${NAME}") + unset(${VAR} CACHE) + else() + unset(${VAR} CACHE) + set(${VAR} "") + endif() + endif() +endmacro() + +macro(ocv_lapack_check) + string(REGEX REPLACE "[^a-zA-Z0-9_]" "_" _lapack_impl "${LAPACK_IMPL}") + message(STATUS "LAPACK(${LAPACK_IMPL}): LAPACK_LIBRARIES: ${LAPACK_LIBRARIES}") + _find_header_file_in_dirs(OPENCV_CBLAS_H_PATH_${_lapack_impl} "${LAPACK_CBLAS_H}" "${LAPACK_INCLUDE_DIR}") + _find_header_file_in_dirs(OPENCV_LAPACKE_H_PATH_${_lapack_impl} "${LAPACK_LAPACKE_H}" "${LAPACK_INCLUDE_DIR}") + if(NOT OPENCV_CBLAS_H_PATH_${_lapack_impl} OR NOT OPENCV_LAPACKE_H_PATH_${_lapack_impl}) + message(WARNING "LAPACK(${LAPACK_IMPL}): CBLAS/LAPACK headers are not found in '${LAPACK_INCLUDE_DIR}'") + unset(LAPACK_LIBRARIES) + else() + # adding proxy opencv_lapack.h header + set(CBLAS_H_PROXY_PATH ${CMAKE_BINARY_DIR}/opencv_lapack.h) + set(_lapack_include_str "\#include \"${OPENCV_CBLAS_H_PATH_${_lapack_impl}}\"") + if(NOT "${OPENCV_CBLAS_H_PATH_${_lapack_impl}}" STREQUAL "${OPENCV_LAPACKE_H_PATH_${_lapack_impl}}") + set(_lapack_include_str "${_lapack_include_str}\n#include \"${OPENCV_LAPACKE_H_PATH_${_lapack_impl}}\"") + endif() + # update file contents (if required) + set(__content_str "") + if(EXISTS "${CBLAS_H_PROXY_PATH}") + file(READ "${CBLAS_H_PROXY_PATH}" __content_str) + endif() + if(NOT " ${__content_str}" STREQUAL " ${_lapack_include_str}") + file(WRITE "${CBLAS_H_PROXY_PATH}" "${_lapack_include_str}") + endif() + + try_compile(__VALID_LAPACK + "${OpenCV_BINARY_DIR}" + "${OpenCV_SOURCE_DIR}/cmake/checks/lapack_check.cpp" + CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:STRING=${LAPACK_INCLUDE_DIR}\;${CMAKE_BINARY_DIR}" + "-DLINK_DIRECTORIES:STRING=${LAPACK_LINK_LIBRARIES}" + "-DLINK_LIBRARIES:STRING=${LAPACK_LIBRARIES}" + OUTPUT_VARIABLE TRY_OUT + ) + if(NOT __VALID_LAPACK) + #message(FATAL_ERROR "LAPACK: check build log:\n${TRY_OUT}") + message(STATUS "LAPACK(${LAPACK_IMPL}): Can't build LAPACK check code. This LAPACK version is not supported.") + unset(LAPACK_LIBRARIES) + else() + message(STATUS "LAPACK(${LAPACK_IMPL}): Support is enabled.") + ocv_include_directories(${LAPACK_INCLUDE_DIR}) + set(HAVE_LAPACK 1) + endif() + endif() endmacro() if(WITH_LAPACK) - ocv_update(LAPACK_IMPL "Unknown") - if(NOT LAPACK_LIBRARIES) - include(cmake/OpenCVFindMKL.cmake) - if(HAVE_MKL) - set(LAPACK_INCLUDE_DIR ${MKL_INCLUDE_DIRS}) - set(LAPACK_LIBRARIES ${MKL_LIBRARIES} ) - set(LAPACK_CBLAS_H "mkl_cblas.h" ) - set(LAPACK_LAPACKE_H "mkl_lapack.h" ) - set(LAPACK_IMPL "MKL") - endif() + ocv_update(LAPACK_IMPL "Unknown") + if(NOT OPENCV_LAPACK_FIND_PACKAGE_ONLY) + if(NOT LAPACK_LIBRARIES AND NOT OPENCV_LAPACK_DISABLE_MKL) + include(cmake/OpenCVFindMKL.cmake) + if(HAVE_MKL) + set(LAPACK_INCLUDE_DIR ${MKL_INCLUDE_DIRS}) + set(LAPACK_LIBRARIES ${MKL_LIBRARIES}) + set(LAPACK_CBLAS_H "mkl_cblas.h") + set(LAPACK_LAPACKE_H "mkl_lapack.h") + set(LAPACK_IMPL "MKL") + ocv_lapack_check() + endif() endif() if(NOT LAPACK_LIBRARIES) - include(cmake/OpenCVFindOpenBLAS.cmake) - if(OpenBLAS_FOUND) - set(LAPACK_INCLUDE_DIR ${OpenBLAS_INCLUDE_DIR} ) - set(LAPACK_LIBRARIES ${OpenBLAS_LIB} ) - set(LAPACK_CBLAS_H "cblas.h" ) - set(LAPACK_LAPACKE_H "lapacke.h" ) - set(LAPACK_IMPL "OpenBLAS") - endif() + include(cmake/OpenCVFindOpenBLAS.cmake) + if(OpenBLAS_FOUND) + set(LAPACK_INCLUDE_DIR ${OpenBLAS_INCLUDE_DIR}) + set(LAPACK_LIBRARIES ${OpenBLAS_LIB}) + set(LAPACK_CBLAS_H "cblas.h") + set(LAPACK_LAPACKE_H "lapacke.h") + set(LAPACK_IMPL "OpenBLAS") + ocv_lapack_check() + endif() endif() if(NOT LAPACK_LIBRARIES AND UNIX) - include(cmake/OpenCVFindAtlas.cmake) - if(ATLAS_FOUND) - set(LAPACK_INCLUDE_DIR ${Atlas_INCLUDE_DIR}) - set(LAPACK_LIBRARIES ${Atlas_LIBRARIES} ) - set(LAPACK_CBLAS_H "cblas.h" ) - set(LAPACK_LAPACKE_H "lapacke.h" ) - set(LAPACK_IMPL "Atlas") - endif() + include(cmake/OpenCVFindAtlas.cmake) + if(ATLAS_FOUND) + set(LAPACK_INCLUDE_DIR ${Atlas_INCLUDE_DIR}) + set(LAPACK_LIBRARIES ${Atlas_LIBRARIES}) + set(LAPACK_CBLAS_H "cblas.h") + set(LAPACK_LAPACKE_H "lapacke.h") + set(LAPACK_IMPL "Atlas") + ocv_lapack_check() + endif() endif() + endif() - if(NOT LAPACK_LIBRARIES AND APPLE) - set(LAPACK_INCLUDE_DIR "Accelerate") - set(LAPACK_LIBRARIES "-framework Accelerate") - set(LAPACK_CBLAS_H "cblas.h" ) - set(LAPACK_LAPACKE_H "lapacke.h" ) - set(LAPACK_IMPL "Apple") + if(NOT LAPACK_LIBRARIES) + if(WIN32 AND NOT OPENCV_LAPACK_SHARED_LIBS) + set(BLA_STATIC 1) endif() - - set(LAPACK_INCLUDE_DIR ${LAPACK_INCLUDE_DIR} CACHE PATH "Path to BLAS include dir" FORCE) - set(LAPACK_CBLAS_H ${LAPACK_CBLAS_H} CACHE STRING "Alternative name of cblas.h" FORCE) - set(LAPACK_LAPACKE_H ${LAPACK_LAPACKE_H} CACHE STRING "Alternative name of lapacke.h" FORCE) - set(LAPACK_LIBRARIES ${LAPACK_LIBRARIES} CACHE STRING "Names of BLAS & LAPACK binaries (.so, .dll, .a, .lib)" FORCE) - set(LAPACK_IMPL ${LAPACK_IMPL} CACHE STRING "Lapack implementation id" FORCE) - - if(LAPACK_LIBRARIES) #adding proxy cblas.h header - message(STATUS "LAPACK_IMPL: ${LAPACK_IMPL}, LAPACK_LIBRARIES: ${LAPACK_LIBRARIES}") - if("${LAPACK_IMPL}" STREQUAL "Apple") - set(CBLAS_H_PATH "Accelerate/Accelerate.h") - set(LAPACKE_H_PATH "Accelerate/Accelerate.h") - else() - _find_file_in_dirs(CBLAS_H_PATH "${LAPACK_CBLAS_H}" "${LAPACK_INCLUDE_DIR}") - _find_file_in_dirs(LAPACKE_H_PATH "${LAPACK_LAPACKE_H}" "${LAPACK_INCLUDE_DIR}") - endif() - if(NOT CBLAS_H_PATH OR NOT LAPACKE_H_PATH) - message(WARNING "CBLAS/LAPACK headers are not found in '${LAPACK_INCLUDE_DIR}'") - endif() - ocv_include_directories(${LAPACK_INCLUDE_DIR}) - list(APPEND OPENCV_LINKER_LIBS ${LAPACK_LIBRARIES}) - set(HAVE_LAPACK 1) - - set(CBLAS_H_PROXY_PATH ${CMAKE_BINARY_DIR}/opencv_lapack.h) - set(_include_str "\#include \"${CBLAS_H_PATH}\"") - if("${CBLAS_H_PATH}" STREQUAL "${LAPACKE_H_PATH}") - else() - set(_include_str "${_include_str}\n\#include \"${LAPACKE_H_PATH}\"") - endif() - file(WRITE ${CBLAS_H_PROXY_PATH} ${_include_str}) + find_package(LAPACK) + if(LAPACK_FOUND) + if(NOT DEFINED LAPACKE_INCLUDE_DIR) + find_path(LAPACKE_INCLUDE_DIR "lapacke.h") + endif() + if(NOT DEFINED MKL_LAPACKE_INCLUDE_DIR) + find_path(MKL_LAPACKE_INCLUDE_DIR "mkl_lapack.h") + endif() + if(MKL_LAPACKE_INCLUDE_DIR AND NOT OPENCV_LAPACK_DISABLE_MKL) + set(LAPACK_INCLUDE_DIR ${MKL_LAPACKE_INCLUDE_DIR}) + set(LAPACK_CBLAS_H "mkl_cblas.h") + set(LAPACK_LAPACKE_H "mkl_lapack.h") + set(LAPACK_IMPL "LAPACK/MKL") + ocv_lapack_check() + endif() + if(LAPACKE_INCLUDE_DIR AND NOT HAVE_LAPACK) + set(LAPACK_INCLUDE_DIR ${LAPACKE_INCLUDE_DIR}) + set(LAPACK_CBLAS_H "cblas.h") + set(LAPACK_LAPACKE_H "lapacke.h") + set(LAPACK_IMPL "LAPACK/Generic") + ocv_lapack_check() + elseif(APPLE) + set(LAPACK_CBLAS_H "Accelerate/Accelerate.h") + set(LAPACK_LAPACKE_H "Accelerate/Accelerate.h") + set(LAPACK_IMPL "LAPACK/Apple") + ocv_lapack_check() + else() + unset(LAPACK_LIBRARIES CACHE) + endif() endif() + endif() + + if(NOT LAPACK_LIBRARIES AND APPLE AND NOT OPENCV_LAPACK_FIND_PACKAGE_ONLY) + set(LAPACK_INCLUDE_DIR "") + set(LAPACK_LIBRARIES "-framework Accelerate") + set(LAPACK_CBLAS_H "Accelerate/Accelerate.h") + set(LAPACK_LAPACKE_H "Accelerate/Accelerate.h") + set(LAPACK_IMPL "Apple") + ocv_lapack_check() + endif() + + if(NOT HAVE_LAPACK AND LAPACK_LIBRARIES) + ocv_lapack_check() + endif() + + set(LAPACK_INCLUDE_DIR ${LAPACK_INCLUDE_DIR} CACHE PATH "Path to BLAS include dir" FORCE) + set(LAPACK_CBLAS_H ${LAPACK_CBLAS_H} CACHE STRING "Alternative name of cblas.h" FORCE) + set(LAPACK_LAPACKE_H ${LAPACK_LAPACKE_H} CACHE STRING "Alternative name of lapacke.h" FORCE) + set(LAPACK_LIBRARIES ${LAPACK_LIBRARIES} CACHE STRING "Names of BLAS & LAPACK binaries (.so, .dll, .a, .lib)" FORCE) + set(LAPACK_IMPL ${LAPACK_IMPL} CACHE STRING "Lapack implementation id" FORCE) endif() diff --git a/cmake/checks/lapack_check.cpp b/cmake/checks/lapack_check.cpp new file mode 100644 index 0000000000..0457c44d68 --- /dev/null +++ b/cmake/checks/lapack_check.cpp @@ -0,0 +1,14 @@ +#include "opencv_lapack.h" + +static char* check_fn1 = (char*)sgesv_; +static char* check_fn2 = (char*)sposv_; +static char* check_fn3 = (char*)spotrf_; +static char* check_fn4 = (char*)sgesdd_; + +int main(int argc, char* argv[]) +{ + (void)argv; + if(argc > 1000) + return check_fn1[0] + check_fn2[0] + check_fn3[0] + check_fn4[0]; + return 0; +} diff --git a/modules/core/CMakeLists.txt b/modules/core/CMakeLists.txt index 0485a08ad3..41da825457 100644 --- a/modules/core/CMakeLists.txt +++ b/modules/core/CMakeLists.txt @@ -1,7 +1,7 @@ set(the_description "The Core Functionality") ocv_add_module(core "${OPENCV_HAL_LINKER_LIBS}" - PRIVATE_REQUIRED ${ZLIB_LIBRARIES} "${OPENCL_LIBRARIES}" "${VA_LIBRARIES}" + PRIVATE_REQUIRED ${ZLIB_LIBRARIES} "${OPENCL_LIBRARIES}" "${VA_LIBRARIES}" "${LAPACK_LIBRARIES}" OPTIONAL opencv_cudev WRAP java python) From 3668a01fca0858c32b4083dfd0215eb7bd8fa263 Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Tue, 17 Jan 2017 15:52:45 +0300 Subject: [PATCH 24/54] eliminate warnings hal_internal.cpp(101): warning C4267: 'initializing': conversion from 'size_t' to 'int', possible loss of data --- modules/core/src/hal_internal.cpp | 34 +++++++++++++++---------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/modules/core/src/hal_internal.cpp b/modules/core/src/hal_internal.cpp index b2b6dc3626..345ca42dc6 100644 --- a/modules/core/src/hal_internal.cpp +++ b/modules/core/src/hal_internal.cpp @@ -98,7 +98,7 @@ set_value(fptype *dst, size_t dst_ld, fptype value, size_t m, size_t n) template static inline int lapack_LU(fptype* a, size_t a_step, int m, fptype* b, size_t b_step, int n, int* info) { - int lda = a_step / sizeof(fptype), sign = 0; + int lda = (int)(a_step / sizeof(fptype)), sign = 0; int* piv = new int[m]; transpose_square_inplace(a, lda, m); @@ -114,7 +114,7 @@ lapack_LU(fptype* a, size_t a_step, int m, fptype* b, size_t b_step, int n, int* } else { - int ldb = b_step / sizeof(fptype); + int ldb = (int)(b_step / sizeof(fptype)); fptype* tmpB = new fptype[m*n]; transpose(b, ldb, tmpB, m, m, n); @@ -153,7 +153,7 @@ template static inline int lapack_Cholesky(fptype* a, size_t a_step, int m, fptype* b, size_t b_step, int n, bool* info) { int lapackStatus = 0; - int lda = a_step / sizeof(fptype); + int lda = (int)(a_step / sizeof(fptype)); char L[] = {'L', '\0'}; if(b) @@ -167,7 +167,7 @@ lapack_Cholesky(fptype* a, size_t a_step, int m, fptype* b, size_t b_step, int n } else { - int ldb = b_step / sizeof(fptype); + int ldb = (int)(b_step / sizeof(fptype)); fptype* tmpB = new fptype[m*n]; transpose(b, ldb, tmpB, m, m, n); @@ -197,9 +197,9 @@ lapack_Cholesky(fptype* a, size_t a_step, int m, fptype* b, size_t b_step, int n template static inline int lapack_SVD(fptype* a, size_t a_step, fptype *w, fptype* u, size_t u_step, fptype* vt, size_t v_step, int m, int n, int flags, int* info) { - int lda = a_step / sizeof(fptype); - int ldv = v_step / sizeof(fptype); - int ldu = u_step / sizeof(fptype); + int lda = (int)(a_step / sizeof(fptype)); + int ldv = (int)(v_step / sizeof(fptype)); + int ldu = (int)(u_step / sizeof(fptype)); int lwork = -1; int* iworkBuf = new int[8*std::min(m, n)]; fptype work1 = 0; @@ -256,7 +256,7 @@ lapack_SVD(fptype* a, size_t a_step, fptype *w, fptype* u, size_t u_step, fptype template static inline int lapack_QR(fptype* a, size_t a_step, int m, int n, int k, fptype* b, size_t b_step, fptype* dst, int* info) { - int lda = a_step / sizeof(fptype); + int lda = (int)(a_step / sizeof(fptype)); char mode[] = { 'N', '\0' }; if(m < n) return CV_HAL_ERROR_NOT_IMPLEMENTED; @@ -303,7 +303,7 @@ lapack_QR(fptype* a, size_t a_step, int m, int n, int k, fptype* b, size_t b_ste { std::vector tmpBMemHolder(m*k); fptype* tmpB = &tmpBMemHolder.front(); - int ldb = b_step / sizeof(fptype); + int ldb = (int)(b_step / sizeof(fptype)); transpose(b, ldb, tmpB, m, m, k); if (typeid(fptype) == typeid(float)) @@ -357,10 +357,10 @@ template static inline int lapack_gemm(const fptype *src1, size_t src1_step, const fptype *src2, size_t src2_step, fptype alpha, const fptype *src3, size_t src3_step, fptype beta, fptype *dst, size_t dst_step, int a_m, int a_n, int d_n, int flags) { - int ldsrc1 = src1_step / sizeof(fptype); - int ldsrc2 = src2_step / sizeof(fptype); - int ldsrc3 = src3_step / sizeof(fptype); - int lddst = dst_step / sizeof(fptype); + int ldsrc1 = (int)(src1_step / sizeof(fptype)); + int ldsrc2 = (int)(src2_step / sizeof(fptype)); + int ldsrc3 = (int)(src3_step / sizeof(fptype)); + int lddst = (int)(dst_step / sizeof(fptype)); int c_m, c_n, d_m; CBLAS_TRANSPOSE transA, transB; @@ -434,10 +434,10 @@ template static inline int lapack_gemm_c(const fptype *src1, size_t src1_step, const fptype *src2, size_t src2_step, fptype alpha, const fptype *src3, size_t src3_step, fptype beta, fptype *dst, size_t dst_step, int a_m, int a_n, int d_n, int flags) { - int ldsrc1 = src1_step / sizeof(std::complex); - int ldsrc2 = src2_step / sizeof(std::complex); - int ldsrc3 = src3_step / sizeof(std::complex); - int lddst = dst_step / sizeof(std::complex); + int ldsrc1 = (int)(src1_step / sizeof(std::complex)); + int ldsrc2 = (int)(src2_step / sizeof(std::complex)); + int ldsrc3 = (int)(src3_step / sizeof(std::complex)); + int lddst = (int)(dst_step / sizeof(std::complex)); int c_m, c_n, d_m; CBLAS_TRANSPOSE transA, transB; std::complex cAlpha(alpha, 0.0); From 896c34fab3fa49ec5d913305040b1eab15589d3a Mon Sep 17 00:00:00 2001 From: Vladislav Sovrasov Date: Tue, 17 Jan 2017 16:40:38 +0300 Subject: [PATCH 25/54] Add support of type headings from YAML1.2 --- modules/core/src/persistence.cpp | 20 ++++++++++++++++++++ modules/core/test/test_io.cpp | 17 +++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/modules/core/src/persistence.cpp b/modules/core/src/persistence.cpp index bf16c2f398..946875f5b1 100644 --- a/modules/core/src/persistence.cpp +++ b/modules/core/src/persistence.cpp @@ -1475,6 +1475,26 @@ icvYMLParseValue( CvFileStorage* fs, char* ptr, CvFileNode* node, ptr++; value_type |= CV_NODE_USER; } + if ( d == '<') //support of full type heading from YAML 1.2 + { + const char* yamlTypeHeading = "' && (size_t)(typeEndPtr - ptr) > headingLenght ) + { + if ( memcmp(ptr, yamlTypeHeading, headingLenght) == 0 ) + { + value_type |= CV_NODE_USER; + *typeEndPtr = ' '; + ptr += headingLenght - 1; + } + } + } endptr = ptr++; do d = *++endptr; diff --git a/modules/core/test/test_io.cpp b/modules/core/test/test_io.cpp index eb02a7b23d..880d5cb1d8 100644 --- a/modules/core/test/test_io.cpp +++ b/modules/core/test/test_io.cpp @@ -996,3 +996,20 @@ TEST(Core_InputOutput, filestorage_vec_vec_io) remove((fileName + formats[i]).c_str()); } } + +TEST(Core_InputOutput, filestorage_yaml_advanvced_type_heading) +{ + String content = "%YAML:1.0\n cameraMatrix: !\n" + " rows: 1\n" + " cols: 1\n" + " dt: d\n" + " data: [ 1. ]"; + + cv::FileStorage fs(content, cv::FileStorage::READ | cv::FileStorage::MEMORY); + + cv::Mat inputMatrix; + cv::Mat actualMatrix = cv::Mat::eye(1, 1, CV_64F); + fs["cameraMatrix"] >> inputMatrix; + + ASSERT_EQ(cv::norm(inputMatrix, actualMatrix, NORM_INF), 0.); +} From e357e2c1b7d8624bf9290b27310b80615b0d3be6 Mon Sep 17 00:00:00 2001 From: catree Date: Tue, 17 Jan 2017 16:09:27 +0100 Subject: [PATCH 26/54] Fix typos in py_houghlines tutorial. Extract the python code in a specific folder. --- .../py_houghlines/py_houghlines.markdown | 100 ++++++------------ .../hough_line_transform.py | 22 ++++ .../probabilistic_hough_line_transform.py | 12 +++ 3 files changed, 66 insertions(+), 68 deletions(-) create mode 100644 samples/python/tutorial_code/imgProc/hough_line_transform/hough_line_transform.py create mode 100644 samples/python/tutorial_code/imgProc/hough_line_transform/probabilistic_hough_line_transform.py diff --git a/doc/py_tutorials/py_imgproc/py_houghlines/py_houghlines.markdown b/doc/py_tutorials/py_imgproc/py_houghlines/py_houghlines.markdown index 5b569ed074..f42d6ad226 100644 --- a/doc/py_tutorials/py_imgproc/py_houghlines/py_houghlines.markdown +++ b/doc/py_tutorials/py_imgproc/py_houghlines/py_houghlines.markdown @@ -5,36 +5,36 @@ Goal ---- In this chapter, - - We will understand the concept of Hough Tranform. - - We will see how to use it detect lines in an image. - - We will see following functions: **cv2.HoughLines()**, **cv2.HoughLinesP()** + - We will understand the concept of the Hough Transform. + - We will see how to use it to detect lines in an image. + - We will see the following functions: **cv2.HoughLines()**, **cv2.HoughLinesP()** Theory ------ -Hough Transform is a popular technique to detect any shape, if you can represent that shape in +The Hough Transform is a popular technique to detect any shape, if you can represent that shape in a mathematical form. It can detect the shape even if it is broken or distorted a little bit. We will see how it works for a line. -A line can be represented as \f$y = mx+c\f$ or in parametric form, as -\f$\rho = x \cos \theta + y \sin \theta\f$ where \f$\rho\f$ is the perpendicular distance from origin to the -line, and \f$\theta\f$ is the angle formed by this perpendicular line and horizontal axis measured in -counter-clockwise ( That direction varies on how you represent the coordinate system. This -representation is used in OpenCV). Check below image: +A line can be represented as \f$y = mx+c\f$ or in a parametric form, as +\f$\rho = x \cos \theta + y \sin \theta\f$ where \f$\rho\f$ is the perpendicular distance from the origin to the +line, and \f$\theta\f$ is the angle formed by this perpendicular line and the horizontal axis measured in +counter-clockwise (That direction varies on how you represent the coordinate system. This +representation is used in OpenCV). Check the image below: ![image](images/houghlines1.svg) -So if line is passing below the origin, it will have a positive rho and angle less than 180. If it -is going above the origin, instead of taking angle greater than 180, angle is taken less than 180, +So if the line is passing below the origin, it will have a positive rho and an angle less than 180. If it +is going above the origin, instead of taking an angle greater than 180, the angle is taken less than 180, and rho is taken negative. Any vertical line will have 0 degree and horizontal lines will have 90 degree. -Now let's see how Hough Transform works for lines. Any line can be represented in these two terms, -\f$(\rho, \theta)\f$. So first it creates a 2D array or accumulator (to hold values of two parameters) +Now let's see how the Hough Transform works for lines. Any line can be represented in these two terms, +\f$(\rho, \theta)\f$. So first it creates a 2D array or accumulator (to hold the values of the two parameters) and it is set to 0 initially. Let rows denote the \f$\rho\f$ and columns denote the \f$\theta\f$. Size of -array depends on the accuracy you need. Suppose you want the accuracy of angles to be 1 degree, you +array depends on the accuracy you need. Suppose you want the accuracy of angles to be 1 degree, you will need 180 columns. For \f$\rho\f$, the maximum distance possible is the diagonal length of the image. So -taking one pixel accuracy, number of rows can be diagonal length of the image. +taking one pixel accuracy, the number of rows can be the diagonal length of the image. Consider a 100x100 image with a horizontal line at the middle. Take the first point of the line. You know its (x,y) values. Now in the line equation, put the values \f$\theta = 0,1,2,....,180\f$ and check @@ -42,57 +42,34 @@ the \f$\rho\f$ you get. For every \f$(\rho, \theta)\f$ pair, you increment value in its corresponding \f$(\rho, \theta)\f$ cells. So now in accumulator, the cell (50,90) = 1 along with some other cells. -Now take the second point on the line. Do the same as above. Increment the the values in the cells +Now take the second point on the line. Do the same as above. Increment the values in the cells corresponding to `(rho, theta)` you got. This time, the cell (50,90) = 2. What you actually do is voting the \f$(\rho, \theta)\f$ values. You continue this process for every point on the line. At each point, the cell (50,90) will be incremented or voted up, while other cells may or may not be voted up. This way, at the end, the cell (50,90) will have maximum votes. So if you search the accumulator for maximum votes, you get the value (50,90) which says, there is a line in this image -at distance 50 from origin and at angle 90 degrees. It is well shown in below animation (Image +at a distance 50 from the origin and at angle 90 degrees. It is well shown in the below animation (Image Courtesy: [Amos Storkey](http://homepages.inf.ed.ac.uk/amos/hough.html) ) ![](images/houghlinesdemo.gif) -This is how hough transform for lines works. It is simple, and may be you can implement it using +This is how hough transform works for lines. It is simple, and may be you can implement it using Numpy on your own. Below is an image which shows the accumulator. Bright spots at some locations -denotes they are the parameters of possible lines in the image. (Image courtesy: [Wikipedia](http://en.wikipedia.org/wiki/Hough_transform)) +denote they are the parameters of possible lines in the image. (Image courtesy: [Wikipedia](http://en.wikipedia.org/wiki/Hough_transform) ) ![](images/houghlines2.jpg) Hough Transform in OpenCV ========================= -Everything explained above is encapsulated in the OpenCV function, \*\*cv2.HoughLines()\*\*. It simply returns an array of :math:(rho, +Everything explained above is encapsulated in the OpenCV function, **cv2.HoughLines()**. It simply returns an array of :math:(rho, theta)\` values. \f$\rho\f$ is measured in pixels and \f$\theta\f$ is measured in radians. First parameter, -Input image should be a binary image, so apply threshold or use canny edge detection before finding +Input image should be a binary image, so apply threshold or use canny edge detection before applying hough transform. Second and third parameters are \f$\rho\f$ and \f$\theta\f$ accuracies -respectively. Fourth argument is the threshold, which means minimum vote it should get for it to be -considered as a line. Remember, number of votes depend upon number of points on the line. So it +respectively. Fourth argument is the threshold, which means the minimum vote it should get to be +considered as a line. Remember, number of votes depends upon the number of points on the line. So it represents the minimum length of line that should be detected. -@code{.py} -import cv2 -import numpy as np - -img = cv2.imread('sudoku.png') -gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) -edges = cv2.Canny(gray,50,150,apertureSize = 3) - -lines = cv2.HoughLines(edges,1,np.pi/180,200) -for line in lines: - rho,theta = line[0] - a = np.cos(theta) - b = np.sin(theta) - x0 = a*rho - y0 = b*rho - x1 = int(x0 + 1000*(-b)) - y1 = int(y0 + 1000*(a)) - x2 = int(x0 - 1000*(-b)) - y2 = int(y0 - 1000*(a)) - - cv2.line(img,(x1,y1),(x2,y2),(0,0,255),2) - -cv2.imwrite('houghlines3.jpg',img) -@endcode +@include hough_line_transform.py Check the results below: ![image](images/houghlines3.jpg) @@ -101,36 +78,23 @@ Probabilistic Hough Transform ----------------------------- In the hough transform, you can see that even for a line with two arguments, it takes a lot of -computation. Probabilistic Hough Transform is an optimization of Hough Transform we saw. It doesn't -take all the points into consideration, instead take only a random subset of points and that is -sufficient for line detection. Just we have to decrease the threshold. See below image which compare -Hough Transform and Probabilistic Hough Transform in hough space. (Image Courtesy : [Franck -Bettinger's home page](http://phdfb1.free.fr/robot/mscthesis/node14.html) +computation. Probabilistic Hough Transform is an optimization of the Hough Transform we saw. It doesn't +take all the points into consideration. Instead, it takes only a random subset of points which is +sufficient for line detection. Just we have to decrease the threshold. See image below which compares +Hough Transform and Probabilistic Hough Transform in Hough space. (Image Courtesy : +[Franck Bettinger's home page](http://phdfb1.free.fr/robot/mscthesis/node14.html) ) ![image](images/houghlines4.png) OpenCV implementation is based on Robust Detection of Lines Using the Progressive Probabilistic -Hough Transform by Matas, J. and Galambos, C. and Kittler, J.V.. The function used is +Hough Transform by Matas, J. and Galambos, C. and Kittler, J.V. @cite Matas00. The function used is **cv2.HoughLinesP()**. It has two new arguments. - **minLineLength** - Minimum length of line. Line segments shorter than this are rejected. -- **maxLineGap** - Maximum allowed gap between line segments to treat them as single line. +- **maxLineGap** - Maximum allowed gap between line segments to treat them as a single line. Best thing is that, it directly returns the two endpoints of lines. In previous case, you got only the parameters of lines, and you had to find all the points. Here, everything is direct and simple. -@code{.py} -import cv2 -import numpy as np - -img = cv2.imread('sudoku.png') -gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) -edges = cv2.Canny(gray,50,150,apertureSize = 3) -lines = cv2.HoughLinesP(edges,1,np.pi/180,100,minLineLength=100,maxLineGap=10) -for line in lines: - x1,y1,x2,y2 = line[0] - cv2.line(img,(x1,y1),(x2,y2),(0,255,0),2) - -cv2.imwrite('houghlines5.jpg',img) -@endcode +@include probabilistic_hough_line_transform.py See the results below: ![image](images/houghlines5.jpg) diff --git a/samples/python/tutorial_code/imgProc/hough_line_transform/hough_line_transform.py b/samples/python/tutorial_code/imgProc/hough_line_transform/hough_line_transform.py new file mode 100644 index 0000000000..0bcf6c5e43 --- /dev/null +++ b/samples/python/tutorial_code/imgProc/hough_line_transform/hough_line_transform.py @@ -0,0 +1,22 @@ +import cv2 +import numpy as np + +img = cv2.imread('../data/sudoku.png') +gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) +edges = cv2.Canny(gray,50,150,apertureSize = 3) + +lines = cv2.HoughLines(edges,1,np.pi/180,200) +for line in lines: + rho,theta = line[0] + a = np.cos(theta) + b = np.sin(theta) + x0 = a*rho + y0 = b*rho + x1 = int(x0 + 1000*(-b)) + y1 = int(y0 + 1000*(a)) + x2 = int(x0 - 1000*(-b)) + y2 = int(y0 - 1000*(a)) + + cv2.line(img,(x1,y1),(x2,y2),(0,0,255),2) + +cv2.imwrite('houghlines3.jpg',img) diff --git a/samples/python/tutorial_code/imgProc/hough_line_transform/probabilistic_hough_line_transform.py b/samples/python/tutorial_code/imgProc/hough_line_transform/probabilistic_hough_line_transform.py new file mode 100644 index 0000000000..2d000a1226 --- /dev/null +++ b/samples/python/tutorial_code/imgProc/hough_line_transform/probabilistic_hough_line_transform.py @@ -0,0 +1,12 @@ +import cv2 +import numpy as np + +img = cv2.imread('../data/sudoku.png') +gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) +edges = cv2.Canny(gray,50,150,apertureSize = 3) +lines = cv2.HoughLinesP(edges,1,np.pi/180,100,minLineLength=100,maxLineGap=10) +for line in lines: + x1,y1,x2,y2 = line[0] + cv2.line(img,(x1,y1),(x2,y2),(0,255,0),2) + +cv2.imwrite('houghlines5.jpg',img) From 00d2e279d77abd79c48413979d4b53020ffd1668 Mon Sep 17 00:00:00 2001 From: catree Date: Tue, 17 Jan 2017 17:47:27 +0100 Subject: [PATCH 27/54] Fix tutorial code link in basic_linear_transform tutorial. Add some resource links. --- .../basic_linear_transform.markdown | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/doc/tutorials/core/basic_linear_transform/basic_linear_transform.markdown b/doc/tutorials/core/basic_linear_transform/basic_linear_transform.markdown index 05dd4db13f..a035199ee9 100644 --- a/doc/tutorials/core/basic_linear_transform/basic_linear_transform.markdown +++ b/doc/tutorials/core/basic_linear_transform/basic_linear_transform.markdown @@ -164,13 +164,13 @@ The following image has been corrected with: \f$ \alpha = 1.3 \f$ and \f$ \beta ![By Visem (Own work) [CC BY-SA 3.0], via Wikimedia Commons](images/Basic_Linear_Transform_Tutorial_linear_transform_correction.jpg) The overall brightness has been improved but you can notice that the clouds are now greatly saturated due to the numerical saturation -of the implementation used. A custom method that preserves the original color range can of course be implemented instead. +of the implementation used ([highlight clipping](https://en.wikipedia.org/wiki/Clipping_(photography)) in photography). The following image has been corrected with: \f$ \gamma = 0.4 \f$. ![By Visem (Own work) [CC BY-SA 3.0], via Wikimedia Commons](images/Basic_Linear_Transform_Tutorial_gamma_correction.jpg) -The gamma correction should tend to add less saturation effect but should introduce some other type of color artifacts instead. +The gamma correction should tend to add less saturation effect as the mapping is non linear and there is no numerical saturation possible as in the previous method. ![Left: histogram after alpha, beta correction ; Center: histogram of the original image ; Right: histogram after the gamma correction](images/Basic_Linear_Transform_Tutorial_histogram_compare.png) @@ -185,8 +185,15 @@ and are not intended to be used as a replacement of a raster graphics editor!** ### Code -Code for the tutorial is [here](changing_contrast_brightness_image.cpp). Code for the gamma correction: +Code for the tutorial is [here](https://github.com/opencv/opencv/blob/master/samples/cpp/tutorial_code/ImgProc/changing_contrast_brightness_image/changing_contrast_brightness_image.cpp). +Code for the gamma correction: @snippet changing_contrast_brightness_image.cpp changing-contrast-brightness-gamma-correction A look-up table is used to improve the performance of the computation as only 256 values needs to be calculated once. + +### Additional resources + +- [Gamma correction in graphics rendering](https://learnopengl.com/#!Advanced-Lighting/Gamma-Correction) +- [Gamma correction and images displayed on CRT monitors](http://www.graphics.cornell.edu/~westin/gamma/gamma.html) +- [Digital exposure techniques](http://www.cambridgeincolour.com/tutorials/digital-exposure-techniques.htm) From a2b6b595c20c15f7babe7e01b68df0e83be8c67f Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Tue, 17 Jan 2017 15:22:56 +0300 Subject: [PATCH 28/54] shape: force column-based vector --- modules/python/test/test_shape.py | 23 +++++++++++++++++++++++ modules/shape/src/haus_dis.cpp | 7 +++++++ modules/shape/src/sc_dis.cpp | 7 +++++++ modules/shape/test/test_shape.cpp | 19 +++++++++++++++++++ 4 files changed, 56 insertions(+) create mode 100644 modules/python/test/test_shape.py diff --git a/modules/python/test/test_shape.py b/modules/python/test/test_shape.py new file mode 100644 index 0000000000..ad0f0be5d5 --- /dev/null +++ b/modules/python/test/test_shape.py @@ -0,0 +1,23 @@ +#!/usr/bin/env python +import cv2 + +from tests_common import NewOpenCVTests + +class shape_test(NewOpenCVTests): + + def test_computeDistance(self): + + a = self.get_sample('samples/data/shape_sample/1.png', cv2.IMREAD_GRAYSCALE); + b = self.get_sample('samples/data/shape_sample/2.png', cv2.IMREAD_GRAYSCALE); + + _, ca, _ = cv2.findContours(a, cv2.RETR_CCOMP, cv2.CHAIN_APPROX_TC89_KCOS) + _, cb, _ = cv2.findContours(b, cv2.RETR_CCOMP, cv2.CHAIN_APPROX_TC89_KCOS) + + hd = cv2.createHausdorffDistanceExtractor() + sd = cv2.createShapeContextDistanceExtractor() + + d1 = hd.computeDistance(ca[0], cb[0]) + d2 = sd.computeDistance(ca[0], cb[0]) + + self.assertAlmostEqual(d1, 26.4196891785, 3, "HausdorffDistanceExtractor") + self.assertAlmostEqual(d2, 0.25804194808, 3, "ShapeContextDistanceExtractor") diff --git a/modules/shape/src/haus_dis.cpp b/modules/shape/src/haus_dis.cpp index 6f372c416d..732f288946 100644 --- a/modules/shape/src/haus_dis.cpp +++ b/modules/shape/src/haus_dis.cpp @@ -138,6 +138,13 @@ float HausdorffDistanceExtractorImpl::computeDistance(InputArray contour1, Input set2.convertTo(set2, CV_32F); CV_Assert((set1.channels()==2) && (set1.cols>0)); CV_Assert((set2.channels()==2) && (set2.cols>0)); + + // Force vectors column-based + if (set1.dims > 1) + set1 = set1.reshape(2, 1); + if (set2.dims > 1) + set2 = set2.reshape(2, 1); + return std::max( _apply(set1, set2, distanceFlag, rankProportion), _apply(set2, set1, distanceFlag, rankProportion) ); } diff --git a/modules/shape/src/sc_dis.cpp b/modules/shape/src/sc_dis.cpp index 89c6d91255..bbda11cff0 100644 --- a/modules/shape/src/sc_dis.cpp +++ b/modules/shape/src/sc_dis.cpp @@ -202,6 +202,13 @@ float ShapeContextDistanceExtractorImpl::computeDistance(InputArray contour1, In CV_Assert((set1.channels()==2) && (set1.cols>0)); CV_Assert((set2.channels()==2) && (set2.cols>0)); + + // Force vectors column-based + if (set1.dims > 1) + set1 = set1.reshape(2, 1); + if (set2.dims > 1) + set2 = set2.reshape(2, 1); + if (imageAppearanceWeight!=0) { CV_Assert((!image1.empty()) && (!image2.empty())); diff --git a/modules/shape/test/test_shape.cpp b/modules/shape/test/test_shape.cpp index 0601594f08..97a621e4b5 100644 --- a/modules/shape/test/test_shape.cpp +++ b/modules/shape/test/test_shape.cpp @@ -299,3 +299,22 @@ TEST(Hauss, regression) ShapeBaseTest test(NSN_val, NP_val, CURRENT_MAX_ACCUR_val); test.safe_run(); } + +TEST(computeDistance, regression_4976) +{ + Mat a = imread(cvtest::findDataFile("shape/samples/1.png"), 0); + Mat b = imread(cvtest::findDataFile("shape/samples/2.png"), 0); + + vector > ca,cb; + findContours(a, ca, cv::RETR_CCOMP, cv::CHAIN_APPROX_TC89_KCOS); + findContours(b, cb, cv::RETR_CCOMP, cv::CHAIN_APPROX_TC89_KCOS); + + Ptr hd = createHausdorffDistanceExtractor(); + Ptr sd = createShapeContextDistanceExtractor(); + + double d1 = hd->computeDistance(ca[0],cb[0]); + double d2 = sd->computeDistance(ca[0],cb[0]); + + EXPECT_NEAR(d1, 26.4196891785, 1e-3) << "HausdorffDistanceExtractor"; + EXPECT_NEAR(d2, 0.25804194808, 1e-3) << "ShapeContextDistanceExtractor"; +} From 66cdc100104e52e90a18395f5714db705dd897a8 Mon Sep 17 00:00:00 2001 From: Maksim Shabunin Date: Tue, 17 Jan 2017 16:29:50 +0300 Subject: [PATCH 29/54] Minor documentation fixes: - disabled OPTIMIZE_OUTPUT_JAVA - filtered out *.m scripts - removed link to old Sphinx documentation - replaced all mentions of Sphinx with Doxygen --- doc/Doxyfile.in | 4 +- doc/DoxygenLayout.xml | 1 - .../py_setup_in_fedora.markdown | 20 +++------ .../windows_install/images/MiktexInstall.png | Bin 10347 -> 0 bytes .../windows_install/images/Sphinx_Install.png | Bin 21619 -> 0 bytes .../images/WindowsBuildDoc.png | Bin 4627 -> 0 bytes .../images/cmsdstartwindows.jpg | Bin 8795 -> 0 bytes .../windows_install/windows_install.markdown | 42 +++--------------- 8 files changed, 12 insertions(+), 55 deletions(-) delete mode 100644 doc/tutorials/introduction/windows_install/images/MiktexInstall.png delete mode 100644 doc/tutorials/introduction/windows_install/images/Sphinx_Install.png delete mode 100644 doc/tutorials/introduction/windows_install/images/WindowsBuildDoc.png delete mode 100644 doc/tutorials/introduction/windows_install/images/cmsdstartwindows.jpg diff --git a/doc/Doxyfile.in b/doc/Doxyfile.in index 2e4ac7066a..b1cb9c9744 100644 --- a/doc/Doxyfile.in +++ b/doc/Doxyfile.in @@ -41,7 +41,7 @@ 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 = YES +OPTIMIZE_OUTPUT_JAVA = NO OPTIMIZE_FOR_FORTRAN = NO OPTIMIZE_OUTPUT_VHDL = NO EXTENSION_MAPPING = @@ -106,7 +106,7 @@ FILE_PATTERNS = RECURSIVE = YES EXCLUDE = EXCLUDE_SYMLINKS = NO -EXCLUDE_PATTERNS = *.inl.hpp *.impl.hpp *_detail.hpp */cudev/**/detail/*.hpp +EXCLUDE_PATTERNS = *.inl.hpp *.impl.hpp *_detail.hpp */cudev/**/detail/*.hpp *.m EXCLUDE_SYMBOLS = cv::DataType<*> int void EXAMPLE_PATH = @CMAKE_DOXYGEN_EXAMPLE_PATH@ EXAMPLE_PATTERNS = * diff --git a/doc/DoxygenLayout.xml b/doc/DoxygenLayout.xml index 149f36f520..b2675719c9 100644 --- a/doc/DoxygenLayout.xml +++ b/doc/DoxygenLayout.xml @@ -17,7 +17,6 @@ - diff --git a/doc/py_tutorials/py_setup/py_setup_in_fedora/py_setup_in_fedora.markdown b/doc/py_tutorials/py_setup/py_setup_in_fedora/py_setup_in_fedora.markdown index da65dd4772..a4ec9bbd36 100644 --- a/doc/py_tutorials/py_setup/py_setup_in_fedora/py_setup_in_fedora.markdown +++ b/doc/py_tutorials/py_setup/py_setup_in_fedora/py_setup_in_fedora.markdown @@ -102,13 +102,10 @@ yum install eigen3-devel @endcode If you want to build **documentation** ( *Yes, you can create offline version of OpenCV's complete official documentation in your system in HTML with full search facility so that you need not access -internet always if any question, and it is quite FAST!!!* ), you need to install **Sphinx** (a -documentation generation tool) and **pdflatex** (if you want to create a PDF version of it). ( Also -while configuring installation with CMake, don't forget to pass -D BUILD_DOCS=ON. More details -below.) +internet always if any question, and it is quite FAST!!!* ), you need to install **Doxygen** (a +documentation generation tool). @code{.sh} -yum install python-sphinx -yum install texlive +yum install doxygen @endcode ### Downloading OpenCV @@ -174,6 +171,7 @@ setup you got, make sure that following fields are filled (below is the some imp configuration I got). These fields should be filled appropriately in your system also. Otherwise some problem has happened. So check if you have correctly performed above steps. @code{.sh} +... -- GUI: -- GTK+ 2.x: YES (ver 2.24.19) -- GThread : YES (ver 2.36.3) @@ -205,15 +203,7 @@ some problem has happened. So check if you have correctly performed above steps. -- numpy: /usr/lib/python2.7/site-packages/numpy/core/include (ver 1.7.1) -- packages path: lib/python2.7/site-packages --- Documentation: --- Build Documentation: YES --- Sphinx: /usr/bin/sphinx-build (ver 1.1.3) --- PdfLaTeX compiler: /usr/bin/pdflatex --- --- Tests and samples: --- Tests: NO --- Performance tests: NO --- C/C++ Examples: NO +... @endcode Many other flags and settings are there. It is left for you for further exploration. diff --git a/doc/tutorials/introduction/windows_install/images/MiktexInstall.png b/doc/tutorials/introduction/windows_install/images/MiktexInstall.png deleted file mode 100644 index 193a4039918dc47421b0642ed7ae8d3affbbe353..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10347 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�UCdBcpkN>g(cYE3fz9vu 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 JPDHLkV1i;%Hnac$ diff --git a/doc/tutorials/introduction/windows_install/images/cmsdstartwindows.jpg b/doc/tutorials/introduction/windows_install/images/cmsdstartwindows.jpg deleted file mode 100644 index e0d9530d5c23fdf37ab881560c4227b07d220307..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8795 zcmbt&2UwF!)99N(AoK)Ck={E<5d;LKhNeL1RjSgYNIQstbScsiQR%(+4$?uIbPy?0 zM5-W71Vs6R=Y02^@BZc9``q1qvNJogGdpkQ*_oY-nTsU=rixL)03Z+uFvoS^Vh)f8 z@W9~9fou4<0f9mw`1lZFLP7#4DKRN22{8!?89614j2uo*LIOj=;8fHI1cH?uSy!$;R0zL2GWBGZ;lP$GN|o&m|^Ve$?`K z|6P=B(bb`1p9K$N9;h!}s%xU6&9Sw*+^+t%McK*f+YwLi#r>RxW=eVCk@t`7ZP#Bc zUeBGBAgd9pX!x+7?-3AVGV6EOC2Ic5truIwgX$m3iHit{WG1iabSI;B$(cO746aZ@tZsV|&IH}ZSxS=#HzTZTq( zHZ6$-Dcw){Up}gEo!-mk%A_CQDn@A$B0P8$Up!&T)=BaSYTKIRYNX`dUXFC*zb?wF zmz0^p)8F>s#m7IkydN4NPfKZaeKw!{H~lFk|7`B9NxY&fA1TSFk`ip&H%|P;h-HQstH}0+Kv!`Vi6FIRnxLU9a=UsO0T)Pa3zT{mv zeJ5*!!XMD+W%zu?jbJ60C`^!S2LDZ)yZQNk-!FiyDl+5bgJ%;M4orNM-}Ee54ULbE zW+7Zuxk70_YEECecR{4|<~w8zr%{FD*@V=5KnPyYR^$t7`y_j=_*+kx%nop$;E%8N zenxY1sSIPe+;}uz1s6bTm0`U7=(B<6ercITKkr#Wo6n33#$zlCPKspMN=cmSm~}+$ zl?tA3yHl}RW6Q@T?Mcj17YjGn-?Z6BVY0CWllG!C{|@AZKkp*^-1e1Jp2cFk9e*w zB!_Wm)AwUV4mHcP^b+}uK7Y->y9O87=Ve<7b*-u?(&LV(oxjgDSuCWQT}Xq(-_okl zyZ|(xe{}Gqsr%8`ccf<6kjsC1=ZJQLrC-saOkTefL+&Gk{|jKT}R_H7P!>|<3% z3mw9)bdt7!Hsf83Yh13vkuC}$>iO!5J=12EuBMPyu8jve3_kEuH`fodZDF`@qlSi4 zufNGmvaKuMYS@Lt?HbwDf^%_|9WDOSP9fy|z1HGTK+{AQ81bN5R zLbJQ;$rmY2KsTS8sDw!BKP-?^aiO4`m*gBDd=5#han?1euXH9DXxrTRz~M|~BB`HK zPv)?q7VH(j%)s7YkK>M^G-2(20o~{C{C7mnCD6TW^)_Sfcb=f``rmXl9P>QuB_i4> zg+p++5icA7;qD@Qe8Ru(B3vK?;{$L?7&C-QNLEA!8%HfDY>~OV|NA1sMY&s`oKtYL z_KD*gA1?V%2~QLjzpb)7WAlwZH~y-%<`VE$wu^o~b>U~Wnoylv-O;f z2xHkBeNDOs>U0XJB98dcd7sLtxL|CaI9#N0l8X@K)#L ze0!Z>{E(`uro=mw7v7Hh3Z@KyNC@6ZP*fWiUbyB)a{&}`2hbvSoKgZlr`8u6U0%r? zxQ~E;8O(99`p*W&eHA!9jFOp3NLW@-h6S6s_uGE(rTrTEZ`(1f3(hS2&KXX(7b9J> zW0(h4{b0SUbDxgVmp*Ol)t1B#VH>-}f_Pj#!ve#}-t(xK6^#iKndW+>((a%<lqR*5YBpIE2+Tpo*GFP^&{mUfVJ=t8$OcEok|#z(jBhoOSMe#t`|@zQ#`B+N;hF z@T)W1O3(W4>^#m1dUc<|=2Q2+j#<Y!TQC<`-)yGA`JOR1tVE ztL$r_Z^)ZEcdsbAuL@>=yP0j*_W~HaAGw;sd9cQ$jwt&*ap= zdwxz=y!SyQsJ|++^@DBPnERLo6Ntbg71CSz!e#V9yx<&hEW?KN2)h$)O_XR(5Z%TY zdP^-&*whp`p!)=9+$F4;+ zwXMDc$7o7qVXj#T7f;w}Nro>IO?6v6sN#H;9Ollx7CyPgoxBCPV zJj(trM%MZSsqB zj?WC!-~FvAmgmcUgzQ#k9of^23n$CRa|S)pWvB>a?ucM&WsfJ9o=8jU-cp*SIkBj1 zOd9V0aBwFEdF|EOwE6h*d@9L~=0T}2e_G{L=mv(ZkE)Ig$t@C+?W7s;B^Z|$r-+SLTDlST{xs~Igr3Hp&-Jg;a_ZFO zzB1PP!;@n=N71SZLy|Jva{N+5$usykd8~-$8x8ckVy|`Njhg)0vM{`DlHF9}TQ!^~ zTt{9B{XLNAVxI&HS@WkvQ3(cf{+9<{L{Rl$e{udKUv1e*<2kJJDjxo@QhviG;{OMY zt#G})IB(rFXA`mQn8sUL=T%nsVdWByD^cqG7ZNk?91*^f$`FNOr@UYMfl`5QUHPL1 zB9)uAf2BH=^^ugGTaGj5SovzYO@uX62K8pjh>dD7DXYtYH2hKV886px47oPk zLhQkD0|%Qn4FHp6IcaD?(A@Ppenj2egz+=3~UgJI6ZuW8B`RoYOE`WO6`$c;JLz? zZ6D$oXt(B#u=|KO^D3extG;@sTAKh7-b2gUevzH;|NPpGeYSk-SK;*L9a|PBVJcxP zmtdAq;#uk7_#EfWG0E6~hCiMwWnni3%yZv9Kz}9t*jk%V=6nG-VK?AuZ(HG;f-{&H z3W)a`Y|7kHMbEE;?8jQ=jXCHFyvJKy&-!k$*=i?Kt)mDTzc=13*Ds>C+BH~TU7usV z04BeB->Flp6tB^}f2XRXT)#jkLjJaGT)u8?82E#&>~eI?ZMpENeM4b~jn`}6LwcLDy-WlIPmd^!8@M`vzf+}9cJ;?&L>%%m|!2d3?Gd%RX*5Y z*2p2P&Z3f=Qny!`vy#BbUaKO5DnD$3`R(yDOdUz#LvNUIX7v{ggq(BEx8=BhvLIdp zcns<4GIIO4^1WfG@qL;R8;ydp-+qkMtM!3_;oBLnUP7G*uF+u9uaw)avWQh@uC_bO zT9XC;?BjFK?E1ObOmi)mK)2e%UkBRsJOW~9e^2TrP1n zR=i;nUZRR+1(ZZ$I4qb@@t!QNF*Tv%-C#^_$@00XqD4WL9V8}QUjWa84}H@`yRZE) zup?j{5`^1GOp$^lr4Z*sGq@ONO5qed>M;KYnSk&&nU}eJZx9lKVI-A7Qvby*_@B9P zxdAr}0OOKC0$g5z_h&i;f&HaduV(C>xy*!fn;eEwe}$feT&5g<)O}fgLAiH95W~QDF3Ub~ zo%>p2@f(B|AzLU_D{vPBS~C=uWS<+7v3E@)79B>P)R%{f`iB^IylGCj}Pgj1B{R`T=f0` z#aS1rVAtr)6LVsjb!85$FkBdhR7|n3-OmuI;tZZivIEF0%CgR6c(cf}vB^NGWdv8& z<)AbV>!9SyOjV4xmE8_XVw5=er9oQ|W$vz~@l z-G8o}&mIh1m_tH(bUCS$zv#(% zzcwroq-U(`#-{{lJb0eF)K1`;*CC|o^hkzFlDa~3TUy0S6B2v7Nuqncn~h&O64bpz zPOeI$N{_Y7VIAkw>iHiAERh6+lF+B-(ApPWcNl)3T7Kj1!)!>$YdyEJE*31Hn6-`) zCrQ3(p`NrHD7XdX(@Z1Ze(0PEU4}jl8+i?C2w>~zG;g=NUB=|Uq)hlDfC)pIEKUx{ zq;C;Wi@Pwx0usqWI+CGa6?Pz#Jwld=xv-Of$X>f`wJ1A_-gzd>K7=I(CM?*Y!s3r; zk@2>Xo$C*NQ$-v!31#o#(~{1t*bpPlfH`GqX?7wFQ+6{GN*s7Q06|U`Fbv5`)Qr*Z zj1NYb22Y1w0FtC_LYz>e_P5$gJpMGuQizQv8(bBpGyUo#GhUQkPreMRNbr00{DMEC z5&adUNE%Fjm|Ke~YM+4III@C(gB&i?E{}5>8v-q-G^XKwQ7PHf6??B|o_CaGL1G?> zcp-iSjoqBDnBKBlDT8|~{1G|?0jMh~NmiMG#5AD|MQYI%mJ#u}^!NC|oCZ3S^X@@V zkpGGgB^>|NCf9XlYxais-NvLzFwnW;|)SHr<31MPDWIe2QeLmJd#0#gh4RZqd2`>Qs)AJKRFp}T37IDNyQkSgl71w7FElBB+d7-MJEGn-FKuSRH2COZ&nw81C-=O8fL1^ zmUT!-4}Af|qif@?6N}_^RqV0!nLJ^33Y3dk$Z|kDk_%ko8&OH`_QIE&Q&)Lnx$oln zgFGx_!x!71m2SLzC2g!pM?d+e;lOEy{1qORHuZvER{*W>Eo&!N7jkRccj%{A$oeHZ z+Tj2Pt%KJ7ry-2M0{=6psPJb&OeW%-k|8k}@{r*p>OriCaBvWu7?eXGKEs0S#2>EK zqw6L0R7PyPKxq?Fa^JfE1W$z_{hz5$x43d;_*hz*>$wdhkLkpU-x_c&StM-Q@i;+6 z&ocs;l+|Uz5V1gRUG@(AHY~`1FHDk>%2rcb#VS-Gdem?F6HFmb-R;(7yrKeUhOdj- zd~1VZ=!0(hL>NQ$W+r#by`j4%=xaaK9bHPVdCKNTm+Sn!Nx34+>}x)9sN-ZFJxK@vLExzrZ0zs(pyMeB|V_ zmCiu^X3yq{)llfZcw=yDN#-+1yQ&X6#qU=$t}KZwW8(i6Bybh(-(eyEhI=)}31;Gg zgv_6>=F6%9>^@r|`<7iT%Ch#HF*MYma-n0PfbvG#PUzrl@@uR2B&37H-k@@C+3gP2 zscK8AT#BgniZ4t@eXm!-BhSd+?vfs=CG)9nmtND07>t{&o%yPuIfUPhQc(o5wN9K0vjSu0n7!w%@7Q_(L<8pe9bFUYt8kI&v>vMf=mehCNHTJSW@rGJRAvFmmi!9_POm=;K}e5vYvs~|Fcv8 z#sx=$ze@#w#YUJQ&ge|009F#a9tkIxsDQRG}kum%7D zlkUNI*`!z8_j)GL4Ih}Iq6hdq;Ao!N1>JJZN8xx1N706+@go)$8?4EenTW9a!>5OI z57uU-mbPxYV3NZzQLzm9zmo!7fdGsvlU!CwewRr=0Q`4S(6M)!6pX=^nJV`MW&SD) z;B42IVp{ip3ef6ikd`s$fP1{b+&u|7+voGQqAg+$#{|f2Z&XV3_>k3@fYD|6l~k7O zcb;tLPlo=SWofQ^CrcD2W?o8N;*k)L|J5|JDh$8QSf|5K7>*`5rBAVCE|9ZRqXW3E zz8PEKwl83*JC31gG13iAgCdP`_-q3+ZCFakvSN~D`DRG3t5zgRQtQ*+={MpI+h0vqh?p^Ut-%7oAP@mJK8I{4tN%!5$*i_{ey@S zF|{F0kUy`inEtOOUu9`}D4FgqD7b!~-<1_&E)cn`U$tfRz4h>Y%gEhB>BmFgzKZ+_ zy8R749y*Q@5}pyfc>zQXo!6ShTwOA=BCSQ(AJYE@kr|5aetkS-sXxPY=vGUIbkmT53#h454ckNMY@A||S*el# z5^OJOo=A>3$?3`9`N*GooRRe1(BTk?okR6rZ7$THqQsjy|8t`%WPy!Nd;Cdv^08S+ zy}nua*N--BkJ5gwJ^udk>qkpEx5wX;Wq)SKl@+`h?)su}lJJYoY=(UA#~JMBFw>(9 z`=Fdzrl%oY-9x6*c9t#;AFA)cd5_}T{GkmP!Nd(!cXmn2R3i1@d^zn*?$N{zg%-FP zc3X3lA`shg{F^=t-U^+CWO41RSyEr~G<7geoa@#nxq<$=?Q)vEFAR1Ih+lw+-Z@enu~=n!O`-}YC4O$-SZFy<#R7a-w!8iz z@GOzUmfzNccgjw369T6!E~F2s8Tf26)aW+r;eWiRcqb=Zt={nJBhmP=Tr^XF`;s2oD!hTk- zz+T6*=g_jr{nMJVbSL1c`U3A>oML2vZyN_-_wH2+oiz*&SCglqH|GfVjY^czqvKs8 zjbVWK@6Apo#n-*~5*1D5mrRCTkj|=Ay!{-{S*)nhr1ap6^Xr=r))~LDY&_}UZ-HyP zjWZ#^*E~q}z5otZ6v8Rll;c?bHATW{z=;{AJ8sV%O?N#jq=gbJzaS!z8Q&bv({K8m z9{bDM9%}?3b??1vTyEfJwy=Ab1na3 z*|vTbFkDMjq2U&krWUA4Z>bjZtveL4BPdM0Yp0=3Sl01Qfkdmi3~l#Hjy7qZ;$)h& zKtbZ#-Uz-8o&2qjy@(5d$5s&E}}x02wIKXJXHl?$zf z-|a{!t&m!&p;dd5cHq|A1sOISt`u`EPv6jz!UY&Xa<37ul|I(Sq(jryHOXHxv4Ee6 zi`P>z_qq(dpjJ9}P65z5WoN1QOf;^1r;wZNKa@(fPf>ikCr-E1pF=Lz5)sQT2emb=r@K!Zn&Zw&u zZKyM9%it##KSVx`i?)5|o?{E%^t_Dv0NZU-A&;7*h@1X~_|0PHCKo_NP*Yh0Zrqf(?MZkqU^$;nW+5< zAb7Fb*yyEJQC;y(7({63fl*$ZkrI!$7ldhbY9CkDcCQLB1Qa;%<+|&%-z;MC`^eg_f#P(_;#C^S zB%u0am1(v^BBE3d7gcNWV`B1*NVh#?Ob!BB!;251$@za+DJyZeR?hzPllE8NaeX)M z7@~8=TWO)DQS-1>u@VN Date: Wed, 18 Jan 2017 19:30:45 +0200 Subject: [PATCH 30/54] Fixed bug #7482. Updated dense flow routine to reference bound textures. --- modules/cudaoptflow/src/cuda/pyrlk.cu | 19 +++++++++++-------- modules/cudaoptflow/src/pyrlk.cpp | 6 ++++-- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/modules/cudaoptflow/src/cuda/pyrlk.cu b/modules/cudaoptflow/src/cuda/pyrlk.cu index 2f2865057f..e3cca57f3a 100644 --- a/modules/cudaoptflow/src/cuda/pyrlk.cu +++ b/modules/cudaoptflow/src/cuda/pyrlk.cu @@ -51,6 +51,8 @@ #include "opencv2/core/cuda/filters.hpp" #include "opencv2/core/cuda/border_interpolate.hpp" +#include + using namespace cv::cuda; using namespace cv::cuda::device; @@ -923,15 +925,15 @@ namespace pyrlk float x = xBase - c_halfWin_x + j + 0.5f; float y = yBase - c_halfWin_y + i + 0.5f; - I_patch[i * patchWidth + j] = tex2D(tex_Ib, x, y); + I_patch[i * patchWidth + j] = tex2D(tex_If, x, y); // Sharr Deriv - dIdx_patch[i * patchWidth + j] = 3 * tex2D(tex_Ib, x+1, y-1) + 10 * tex2D(tex_Ib, x+1, y) + 3 * tex2D(tex_Ib, x+1, y+1) - - (3 * tex2D(tex_Ib, x-1, y-1) + 10 * tex2D(tex_Ib, x-1, y) + 3 * tex2D(tex_Ib, x-1, y+1)); + dIdx_patch[i * patchWidth + j] = 3 * tex2D(tex_If, x+1, y-1) + 10 * tex2D(tex_If, x+1, y) + 3 * tex2D(tex_If, x+1, y+1) - + (3 * tex2D(tex_If, x-1, y-1) + 10 * tex2D(tex_If, x-1, y) + 3 * tex2D(tex_If, x-1, y+1)); - dIdy_patch[i * patchWidth + j] = 3 * tex2D(tex_Ib, x-1, y+1) + 10 * tex2D(tex_Ib, x, y+1) + 3 * tex2D(tex_Ib, x+1, y+1) - - (3 * tex2D(tex_Ib, x-1, y-1) + 10 * tex2D(tex_Ib, x, y-1) + 3 * tex2D(tex_Ib, x+1, y-1)); + dIdy_patch[i * patchWidth + j] = 3 * tex2D(tex_If, x-1, y+1) + 10 * tex2D(tex_If, x, y+1) + 3 * tex2D(tex_If, x+1, y+1) - + (3 * tex2D(tex_If, x-1, y-1) + 10 * tex2D(tex_If, x, y-1) + 3 * tex2D(tex_If, x+1, y-1)); } } @@ -943,6 +945,7 @@ namespace pyrlk if (x >= cols || y >= rows) return; + int A11i = 0; int A12i = 0; int A22i = 0; @@ -970,7 +973,6 @@ namespace pyrlk { if (calcErr) err(y, x) = numeric_limits::max(); - return; } @@ -1014,6 +1016,7 @@ namespace pyrlk } } + float2 delta; delta.x = A12 * b2 - A22 * b1; delta.y = A12 * b1 - A11 * b2; @@ -1083,11 +1086,11 @@ namespace pyrlk funcs[patch.y - 1][patch.x - 1](I, J, I.rows, I.cols, prevPts, nextPts, status, err, ptcount, level, block, stream); } - static void dense(PtrStepSzb I, PtrStepSz J, PtrStepSzf u, PtrStepSzf v, PtrStepSzf prevU, PtrStepSzf prevV, PtrStepSzf err, int2 winSize, cudaStream_t stream) + static void dense(PtrStepSz I, PtrStepSz J, PtrStepSzf u, PtrStepSzf v, PtrStepSzf prevU, PtrStepSzf prevV, PtrStepSzf err, int2 winSize, cudaStream_t stream) { dim3 block(16, 16); dim3 grid(divUp(I.cols, block.x), divUp(I.rows, block.y)); - Tex_I<1, uchar>::bindTexture_(I); + Tex_I<1, T>::bindTexture_(I); Tex_J<1, T>::bindTexture_(J); int2 halfWin = make_int2((winSize.x - 1) / 2, (winSize.y - 1) / 2); diff --git a/modules/cudaoptflow/src/pyrlk.cpp b/modules/cudaoptflow/src/pyrlk.cpp index c7f706087b..d1704473c7 100644 --- a/modules/cudaoptflow/src/pyrlk.cpp +++ b/modules/cudaoptflow/src/pyrlk.cpp @@ -61,7 +61,7 @@ namespace pyrlk static void sparse(PtrStepSz::vec_type> I, PtrStepSz::vec_type> J, const float2* prevPts, float2* nextPts, uchar* status, float* err, int ptcount, int level, dim3 block, dim3 patch, cudaStream_t stream); - static void dense(PtrStepSzb I, PtrStepSzf J, PtrStepSzf u, PtrStepSzf v, PtrStepSzf prevU, PtrStepSzf prevV, + static void dense(PtrStepSzf I, PtrStepSzf J, PtrStepSzf u, PtrStepSzf v, PtrStepSzf prevU, PtrStepSzf prevV, PtrStepSzf err, int2 winSize, cudaStream_t stream); }; @@ -236,7 +236,9 @@ namespace prevPyr_.resize(maxLevel_ + 1); nextPyr_.resize(maxLevel_ + 1); - prevPyr_[0] = prevImg; + //prevPyr_[0] = prevImg; + + prevImg.convertTo(prevPyr_[0], CV_32F, stream); nextImg.convertTo(nextPyr_[0], CV_32F, stream); for (int level = 1; level <= maxLevel_; ++level) From f9828cd0c9ae019a57dafc3acb89d80a52025e52 Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Thu, 19 Jan 2017 13:33:39 +0300 Subject: [PATCH 31/54] cmake: fix MKL detection in case of unsupported versions CMake should not fail. --- cmake/OpenCVFindLAPACK.cmake | 3 ++- cmake/OpenCVFindMKL.cmake | 21 +++++++++++---------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/cmake/OpenCVFindLAPACK.cmake b/cmake/OpenCVFindLAPACK.cmake index 0bee1b4c90..09cd66cdae 100644 --- a/cmake/OpenCVFindLAPACK.cmake +++ b/cmake/OpenCVFindLAPACK.cmake @@ -133,6 +133,7 @@ if(WITH_LAPACK) set(LAPACK_IMPL "LAPACK/Apple") ocv_lapack_check() else() + unset(LAPACK_LIBRARIES) unset(LAPACK_LIBRARIES CACHE) endif() endif() @@ -147,7 +148,7 @@ if(WITH_LAPACK) ocv_lapack_check() endif() - if(NOT HAVE_LAPACK AND LAPACK_LIBRARIES) + if(NOT HAVE_LAPACK AND LAPACK_LIBRARIES AND LAPACK_CBLAS_H AND LAPACK_LAPACKE_H) ocv_lapack_check() endif() diff --git a/cmake/OpenCVFindMKL.cmake b/cmake/OpenCVFindMKL.cmake index 337456843b..0f5462acd2 100644 --- a/cmake/OpenCVFindMKL.cmake +++ b/cmake/OpenCVFindMKL.cmake @@ -20,10 +20,8 @@ macro (mkl_find_lib VAR NAME DIRS) endmacro() macro(mkl_fail) - set(HAVE_MKL OFF CACHE BOOL "True if MKL found") + set(HAVE_MKL OFF) set(MKL_ROOT_DIR ${MKL_ROOT_DIR} CACHE PATH "Path to MKL directory") - unset(MKL_INCLUDE_DIRS CACHE) - unset(MKL_LIBRARIES CACHE) return() endmacro() @@ -64,11 +62,16 @@ if(NOT MKL_ROOT_DIR OR NOT EXISTS ${MKL_ROOT_DIR}/include/mkl.h) find_path(MKL_ROOT_DIR include/mkl.h PATHS ${mkl_root_paths}) endif() -if(NOT MKL_ROOT_DIR) +set(MKL_INCLUDE_DIRS ${MKL_ROOT_DIR}/include CACHE PATH "Path to MKL include directory") + +if(NOT MKL_ROOT_DIR + OR NOT EXISTS "${MKL_ROOT_DIR}" + OR NOT EXISTS "${MKL_INCLUDE_DIRS}" + OR NOT EXISTS "${MKL_INCLUDE_DIRS}/mkl_version.h" +) mkl_fail() endif() -set(MKL_INCLUDE_DIRS ${MKL_ROOT_DIR}/include) get_mkl_version(${MKL_INCLUDE_DIRS}/mkl_version.h) #determine arch @@ -124,13 +127,11 @@ foreach(lib ${mkl_lib_list}) endforeach() message(STATUS "Found MKL ${MKL_VERSION_STR} at: ${MKL_ROOT_DIR}") -set(HAVE_MKL ON CACHE BOOL "True if MKL found") +set(HAVE_MKL ON) set(MKL_ROOT_DIR ${MKL_ROOT_DIR} CACHE PATH "Path to MKL directory") set(MKL_INCLUDE_DIRS ${MKL_INCLUDE_DIRS} CACHE PATH "Path to MKL include directory") -if(NOT UNIX) - set(MKL_LIBRARIES ${MKL_LIBRARIES} CACHE FILEPATH "MKL libarries") -else() +set(MKL_LIBRARIES ${MKL_LIBRARIES} CACHE STRING "MKL libarries") +if(UNIX AND NOT MKL_LIBRARIES_DONT_HACK) #it's ugly but helps to avoid cyclic lib problem set(MKL_LIBRARIES ${MKL_LIBRARIES} ${MKL_LIBRARIES} ${MKL_LIBRARIES} "-lpthread" "-lm" "-ldl") - set(MKL_LIBRARIES ${MKL_LIBRARIES} CACHE STRING "MKL libarries") endif() From e3ec3566d95413374d6afd716fb007b48f51748c Mon Sep 17 00:00:00 2001 From: chrizandr Date: Fri, 13 Jan 2017 01:49:49 +0530 Subject: [PATCH 32/54] RTrees: Add wrapper for RTrees_load method to enable loading trained RTrees --- modules/ml/include/opencv2/ml.hpp | 11 +++++++++++ modules/ml/src/rtrees.cpp | 7 ++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/modules/ml/include/opencv2/ml.hpp b/modules/ml/include/opencv2/ml.hpp index 99f5883d6e..3614a91298 100644 --- a/modules/ml/include/opencv2/ml.hpp +++ b/modules/ml/include/opencv2/ml.hpp @@ -1169,6 +1169,17 @@ public: Algorithm::load to load the pre-trained model. */ CV_WRAP static Ptr create(); + + /** @brief Loads and creates a serialized RTree from a file + * + * Use RTree::save to serialize and store an RTree to disk. + * Load the RTree from this file again, by calling this function with the path to the file. + * Optionally specify the node for the file containing the classifier + * + * @param filepath path to serialized RTree + * @param nodeName name of node containing the classifier + */ + CV_WRAP static Ptr load(const String& filepath , const String& nodeName = String()); }; /****************************************************************************************\ diff --git a/modules/ml/src/rtrees.cpp b/modules/ml/src/rtrees.cpp index cab33ab33b..65fe6827a7 100644 --- a/modules/ml/src/rtrees.cpp +++ b/modules/ml/src/rtrees.cpp @@ -41,7 +41,6 @@ //M*/ #include "precomp.hpp" - namespace cv { namespace ml { @@ -422,6 +421,12 @@ Ptr RTrees::create() return makePtr(); } +//Function needed for Python and Java wrappers +Ptr RTrees::load(const String& filepath, const String& nodeName) +{ + return Algorithm::load(filepath, nodeName); +} + }} // End of file. From 062d2179eb8e755b58e07cd761fdfe3faf64d521 Mon Sep 17 00:00:00 2001 From: Tomoaki Teshima Date: Fri, 20 Jan 2017 19:22:44 +0900 Subject: [PATCH 33/54] use universal intrinsic in corner detection series --- modules/imgproc/src/corner.cpp | 181 ++++++++++----------------------- 1 file changed, 52 insertions(+), 129 deletions(-) diff --git a/modules/imgproc/src/corner.cpp b/modules/imgproc/src/corner.cpp index 7f3bad5012..dc84897be4 100644 --- a/modules/imgproc/src/corner.cpp +++ b/modules/imgproc/src/corner.cpp @@ -43,6 +43,7 @@ #include "precomp.hpp" #include "opencl_kernels_imgproc.hpp" +#include "opencv2/core/hal/intrin.hpp" namespace cv { @@ -51,8 +52,8 @@ static void calcMinEigenVal( const Mat& _cov, Mat& _dst ) { int i, j; Size size = _cov.size(); -#if CV_SSE - volatile bool simd = checkHardwareSupport(CV_CPU_SSE); +#if CV_SIMD128 + bool simd = hasSIMD128(); #endif if( _cov.isContinuous() && _dst.isContinuous() ) @@ -66,44 +67,21 @@ static void calcMinEigenVal( const Mat& _cov, Mat& _dst ) const float* cov = _cov.ptr(i); float* dst = _dst.ptr(i); j = 0; - #if CV_SSE + #if CV_SIMD128 if( simd ) { - __m128 half = _mm_set1_ps(0.5f); - for( ; j <= size.width - 4; j += 4 ) + v_float32x4 half = v_setall_f32(0.5f); + for( ; j <= size.width - v_float32x4::nlanes; j += v_float32x4::nlanes ) { - __m128 t0 = _mm_loadu_ps(cov + j*3); // a0 b0 c0 x - __m128 t1 = _mm_loadu_ps(cov + j*3 + 3); // a1 b1 c1 x - __m128 t2 = _mm_loadu_ps(cov + j*3 + 6); // a2 b2 c2 x - __m128 t3 = _mm_loadu_ps(cov + j*3 + 9); // a3 b3 c3 x - __m128 a, b, c, t; - t = _mm_unpacklo_ps(t0, t1); // a0 a1 b0 b1 - c = _mm_unpackhi_ps(t0, t1); // c0 c1 x x - b = _mm_unpacklo_ps(t2, t3); // a2 a3 b2 b3 - c = _mm_movelh_ps(c, _mm_unpackhi_ps(t2, t3)); // c0 c1 c2 c3 - a = _mm_movelh_ps(t, b); - b = _mm_movehl_ps(b, t); - a = _mm_mul_ps(a, half); - c = _mm_mul_ps(c, half); - t = _mm_sub_ps(a, c); - t = _mm_add_ps(_mm_mul_ps(t, t), _mm_mul_ps(b,b)); - a = _mm_sub_ps(_mm_add_ps(a, c), _mm_sqrt_ps(t)); - _mm_storeu_ps(dst + j, a); + v_float32x4 v_a, v_b, v_c, v_t; + v_load_deinterleave(cov + j*3, v_a, v_b, v_c); + v_a *= half; + v_c *= half; + v_t = v_a - v_c; + v_t = v_muladd(v_b, v_b, (v_t * v_t)); + v_store(dst + j, (v_a + v_c) - v_sqrt(v_t)); } } - #elif CV_NEON - float32x4_t v_half = vdupq_n_f32(0.5f); - for( ; j <= size.width - 4; j += 4 ) - { - float32x4x3_t v_src = vld3q_f32(cov + j * 3); - float32x4_t v_a = vmulq_f32(v_src.val[0], v_half); - float32x4_t v_b = v_src.val[1]; - float32x4_t v_c = vmulq_f32(v_src.val[2], v_half); - - float32x4_t v_t = vsubq_f32(v_a, v_c); - v_t = vmlaq_f32(vmulq_f32(v_t, v_t), v_b, v_b); - vst1q_f32(dst + j, vsubq_f32(vaddq_f32(v_a, v_c), cv_vsqrtq_f32(v_t))); - } #endif for( ; j < size.width; j++ ) { @@ -120,8 +98,8 @@ static void calcHarris( const Mat& _cov, Mat& _dst, double k ) { int i, j; Size size = _cov.size(); -#if CV_SSE - volatile bool simd = checkHardwareSupport(CV_CPU_SSE); +#if CV_SIMD128 + bool simd = hasSIMD128(); #endif if( _cov.isContinuous() && _dst.isContinuous() ) @@ -136,40 +114,21 @@ static void calcHarris( const Mat& _cov, Mat& _dst, double k ) float* dst = _dst.ptr(i); j = 0; - #if CV_SSE + #if CV_SIMD128 if( simd ) { - __m128 k4 = _mm_set1_ps((float)k); - for( ; j <= size.width - 4; j += 4 ) - { - __m128 t0 = _mm_loadu_ps(cov + j*3); // a0 b0 c0 x - __m128 t1 = _mm_loadu_ps(cov + j*3 + 3); // a1 b1 c1 x - __m128 t2 = _mm_loadu_ps(cov + j*3 + 6); // a2 b2 c2 x - __m128 t3 = _mm_loadu_ps(cov + j*3 + 9); // a3 b3 c3 x - __m128 a, b, c, t; - t = _mm_unpacklo_ps(t0, t1); // a0 a1 b0 b1 - c = _mm_unpackhi_ps(t0, t1); // c0 c1 x x - b = _mm_unpacklo_ps(t2, t3); // a2 a3 b2 b3 - c = _mm_movelh_ps(c, _mm_unpackhi_ps(t2, t3)); // c0 c1 c2 c3 - a = _mm_movelh_ps(t, b); - b = _mm_movehl_ps(b, t); - t = _mm_add_ps(a, c); - a = _mm_sub_ps(_mm_mul_ps(a, c), _mm_mul_ps(b, b)); - t = _mm_mul_ps(_mm_mul_ps(k4, t), t); - a = _mm_sub_ps(a, t); - _mm_storeu_ps(dst + j, a); - } - } - #elif CV_NEON - float32x4_t v_k = vdupq_n_f32((float)k); + v_float32x4 v_k = v_setall_f32((float)k); - for( ; j <= size.width - 4; j += 4 ) - { - float32x4x3_t v_src = vld3q_f32(cov + j * 3); - float32x4_t v_a = v_src.val[0], v_b = v_src.val[1], v_c = v_src.val[2]; - float32x4_t v_ac_bb = vmlsq_f32(vmulq_f32(v_a, v_c), v_b, v_b); - float32x4_t v_ac = vaddq_f32(v_a, v_c); - vst1q_f32(dst + j, vmlsq_f32(v_ac_bb, v_k, vmulq_f32(v_ac, v_ac))); + for( ; j <= size.width - v_float32x4::nlanes; j += v_float32x4::nlanes ) + { + v_float32x4 v_a, v_b, v_c; + v_load_deinterleave(cov + j * 3, v_a, v_b, v_c); + + v_float32x4 v_ac_bb = v_a * v_c - v_b * v_b; + v_float32x4 v_ac = v_a + v_c; + v_float32x4 v_dst = v_ac_bb - v_k * v_ac * v_ac; + v_store(dst + j, v_dst); + } } #endif @@ -272,8 +231,8 @@ cornerEigenValsVecs( const Mat& src, Mat& eigenv, int block_size, if (tegra::useTegra() && tegra::cornerEigenValsVecs(src, eigenv, block_size, aperture_size, op_type, k, borderType)) return; #endif -#if CV_SSE2 - bool haveSSE2 = checkHardwareSupport(CV_CPU_SSE2); +#if CV_SIMD128 + bool haveSimd = hasSIMD128(); #endif int depth = src.depth(); @@ -309,44 +268,20 @@ cornerEigenValsVecs( const Mat& src, Mat& eigenv, int block_size, const float* dydata = Dy.ptr(i); j = 0; - #if CV_NEON - for( ; j <= size.width - 4; j += 4 ) + #if CV_SIMD128 + if (haveSimd) { - float32x4_t v_dx = vld1q_f32(dxdata + j); - float32x4_t v_dy = vld1q_f32(dydata + j); - - float32x4x3_t v_dst; - v_dst.val[0] = vmulq_f32(v_dx, v_dx); - v_dst.val[1] = vmulq_f32(v_dx, v_dy); - v_dst.val[2] = vmulq_f32(v_dy, v_dy); - - vst3q_f32(cov_data + j * 3, v_dst); - } - #elif CV_SSE2 - if (haveSSE2) - { - for( ; j <= size.width - 8; j += 8 ) + for( ; j <= size.width - v_float32x4::nlanes; j += v_float32x4::nlanes ) { - __m128 v_dx_0 = _mm_loadu_ps(dxdata + j); - __m128 v_dx_1 = _mm_loadu_ps(dxdata + j + 4); - __m128 v_dy_0 = _mm_loadu_ps(dydata + j); - __m128 v_dy_1 = _mm_loadu_ps(dydata + j + 4); + v_float32x4 v_dx = v_load(dxdata + j); + v_float32x4 v_dy = v_load(dydata + j); - __m128 v_dx2_0 = _mm_mul_ps(v_dx_0, v_dx_0); - __m128 v_dxy_0 = _mm_mul_ps(v_dx_0, v_dy_0); - __m128 v_dy2_0 = _mm_mul_ps(v_dy_0, v_dy_0); - __m128 v_dx2_1 = _mm_mul_ps(v_dx_1, v_dx_1); - __m128 v_dxy_1 = _mm_mul_ps(v_dx_1, v_dy_1); - __m128 v_dy2_1 = _mm_mul_ps(v_dy_1, v_dy_1); + v_float32x4 v_dst0, v_dst1, v_dst2; + v_dst0 = v_dx * v_dx; + v_dst1 = v_dx * v_dy; + v_dst2 = v_dy * v_dy; - _mm_interleave_ps(v_dx2_0, v_dx2_1, v_dxy_0, v_dxy_1, v_dy2_0, v_dy2_1); - - _mm_storeu_ps(cov_data + j * 3, v_dx2_0); - _mm_storeu_ps(cov_data + j * 3 + 4, v_dx2_1); - _mm_storeu_ps(cov_data + j * 3 + 8, v_dxy_0); - _mm_storeu_ps(cov_data + j * 3 + 12, v_dxy_1); - _mm_storeu_ps(cov_data + j * 3 + 16, v_dy2_0); - _mm_storeu_ps(cov_data + j * 3 + 20, v_dy2_1); + v_store_interleave(cov_data + j * 3, v_dst0, v_dst1, v_dst2); } } #endif @@ -751,13 +686,10 @@ void cv::preCornerDetect( InputArray _src, OutputArray _dst, int ksize, int bord if( src.depth() == CV_8U ) factor *= 255; factor = 1./(factor * factor * factor); -#if CV_NEON || CV_SSE2 +#if CV_SIMD128 float factor_f = (float)factor; -#endif - -#if CV_SSE2 - volatile bool haveSSE2 = cv::checkHardwareSupport(CV_CPU_SSE2); - __m128 v_factor = _mm_set1_ps(factor_f), v_m2 = _mm_set1_ps(-2.0f); + bool haveSimd = hasSIMD128(); + v_float32x4 v_factor = v_setall_f32(factor_f), v_m2 = v_setall_f32(-2.0f); #endif Size size = src.size(); @@ -773,30 +705,21 @@ void cv::preCornerDetect( InputArray _src, OutputArray _dst, int ksize, int bord j = 0; -#if CV_SSE2 - if (haveSSE2) +#if CV_SIMD128 + if (haveSimd) { - for( ; j <= size.width - 4; j += 4 ) + for( ; j <= size.width - v_float32x4::nlanes; j += v_float32x4::nlanes ) { - __m128 v_dx = _mm_loadu_ps((const float *)(dxdata + j)); - __m128 v_dy = _mm_loadu_ps((const float *)(dydata + j)); + v_float32x4 v_dx = v_load(dxdata + j); + v_float32x4 v_dy = v_load(dydata + j); - __m128 v_s1 = _mm_mul_ps(_mm_mul_ps(v_dx, v_dx), _mm_loadu_ps((const float *)(d2ydata + j))); - __m128 v_s2 = _mm_mul_ps(_mm_mul_ps(v_dy, v_dy), _mm_loadu_ps((const float *)(d2xdata + j))); - __m128 v_s3 = _mm_mul_ps(_mm_mul_ps(v_dx, v_dy), _mm_loadu_ps((const float *)(dxydata + j))); - v_s1 = _mm_mul_ps(v_factor, _mm_add_ps(v_s1, _mm_add_ps(v_s2, _mm_mul_ps(v_s3, v_m2)))); - _mm_storeu_ps(dstdata + j, v_s1); + v_float32x4 v_s1 = (v_dx * v_dx) * v_load(d2ydata + j); + v_float32x4 v_s2 = v_muladd((v_dy * v_dy), v_load(d2xdata + j), v_s1); + v_float32x4 v_s3 = v_muladd((v_dy * v_dx) * v_load(dxydata + j), v_m2, v_s2); + + v_store(dstdata + j, v_s3 * v_factor); } } -#elif CV_NEON - for( ; j <= size.width - 4; j += 4 ) - { - float32x4_t v_dx = vld1q_f32(dxdata + j), v_dy = vld1q_f32(dydata + j); - float32x4_t v_s = vmulq_f32(v_dx, vmulq_f32(v_dx, vld1q_f32(d2ydata + j))); - v_s = vmlaq_f32(v_s, vld1q_f32(d2xdata + j), vmulq_f32(v_dy, v_dy)); - v_s = vmlaq_f32(v_s, vld1q_f32(dxydata + j), vmulq_n_f32(vmulq_f32(v_dy, v_dx), -2)); - vst1q_f32(dstdata + j, vmulq_n_f32(v_s, factor_f)); - } #endif for( ; j < size.width; j++ ) From e71ff78f7f1367cb754f884946c0c9e807cb21cf Mon Sep 17 00:00:00 2001 From: Dal Rupnik Date: Fri, 20 Jan 2017 17:16:01 +0100 Subject: [PATCH 34/54] Merge pull request #8009 from Legoless:master CMake: Building Dynamic Framework on iOS (#8009) * Updated python script with dynamic parameter Updated python script to build static library by default Updated python script to include bitcode flag Added bitcode flag to c flags Fixed directories and targets with static Bitcode parameter fixed Fixed script for static library Fixed parameters in build function Updated cmake common toolchain Added changes to OpenCV Utils Updates to cmake Added cache internal Updates to common toolchain Fixed path in framework destination and added UIKit dependency Dynamic plist for framework Lib version removed hardcoded value Removed trailing whitespace in toolchain * Removed trailing whitespace * Fixed typo in comment * Renamed bitcode variable to bitcodedisabled * Fixed target device family --- cmake/OpenCVGenInfoPlist.cmake | 9 +- cmake/OpenCVUtils.cmake | 29 ++- modules/videoio/CMakeLists.txt | 4 + modules/world/CMakeLists.txt | 2 +- platforms/ios/Info.Dynamic.plist.in | 28 +++ platforms/ios/build_framework.py | 165 +++++++++++++----- .../ios/cmake/Modules/Platform/iOS.cmake | 9 +- .../Toolchains/common-ios-toolchain.cmake | 53 ++++-- 8 files changed, 230 insertions(+), 69 deletions(-) create mode 100644 platforms/ios/Info.Dynamic.plist.in diff --git a/cmake/OpenCVGenInfoPlist.cmake b/cmake/OpenCVGenInfoPlist.cmake index 2b78ae1e53..6dbdc5b9e7 100644 --- a/cmake/OpenCVGenInfoPlist.cmake +++ b/cmake/OpenCVGenInfoPlist.cmake @@ -2,8 +2,13 @@ set(OPENCV_APPLE_BUNDLE_NAME "OpenCV") set(OPENCV_APPLE_BUNDLE_ID "org.opencv") if(IOS) - configure_file("${OpenCV_SOURCE_DIR}/platforms/ios/Info.plist.in" - "${CMAKE_BINARY_DIR}/ios/Info.plist") + if (APPLE_FRAMEWORK AND BUILD_SHARED_LIBS) + configure_file("${OpenCV_SOURCE_DIR}/platforms/ios/Info.Dynamic.plist.in" + "${CMAKE_BINARY_DIR}/ios/Info.plist") + else() + configure_file("${OpenCV_SOURCE_DIR}/platforms/ios/Info.plist.in" + "${CMAKE_BINARY_DIR}/ios/Info.plist") + endif() elseif(APPLE) configure_file("${OpenCV_SOURCE_DIR}/platforms/osx/Info.plist.in" "${CMAKE_BINARY_DIR}/osx/Info.plist") diff --git a/cmake/OpenCVUtils.cmake b/cmake/OpenCVUtils.cmake index cdf257d5fe..7a0e448f77 100644 --- a/cmake/OpenCVUtils.cmake +++ b/cmake/OpenCVUtils.cmake @@ -668,7 +668,11 @@ endfunction() # add install command function(ocv_install_target) - install(TARGETS ${ARGN}) + if(APPLE_FRAMEWORK AND BUILD_SHARED_LIBS) + install(TARGETS ${ARGN} FRAMEWORK DESTINATION ${OPENCV_3P_LIB_INSTALL_PATH}) + else() + install(TARGETS ${ARGN}) + endif() set(isPackage 0) unset(__package) @@ -931,6 +935,29 @@ function(ocv_add_library target) unset(sources) endif() + if(APPLE_FRAMEWORK AND BUILD_SHARED_LIBS) + message(STATUS "Setting Apple target properties for ${target}") + + set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG 1) + + set_target_properties(${target} PROPERTIES + FRAMEWORK TRUE + MACOSX_FRAMEWORK_IDENTIFIER org.opencv + MACOSX_FRAMEWORK_INFO_PLIST ${CMAKE_BINARY_DIR}/ios/Info.plist + # "current version" in semantic format in Mach-O binary file + VERSION ${OPENCV_LIBVERSION} + # "compatibility version" in semantic format in Mach-O binary file + SOVERSION ${OPENCV_LIBVERSION} + INSTALL_RPATH "" + INSTALL_NAME_DIR "@rpath" + BUILD_WITH_INSTALL_RPATH 1 + LIBRARY_OUTPUT_NAME "opencv2" + XCODE_ATTRIBUTE_TARGETED_DEVICE_FAMILY "1,2" + #PUBLIC_HEADER "${OPENCV_CONFIG_FILE_INCLUDE_DIR}/cvconfig.h" + #XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "iPhone Developer" + ) + endif() + _ocv_append_target_includes(${target}) endfunction() diff --git a/modules/videoio/CMakeLists.txt b/modules/videoio/CMakeLists.txt index fb64894899..8a5b9d7a36 100644 --- a/modules/videoio/CMakeLists.txt +++ b/modules/videoio/CMakeLists.txt @@ -208,7 +208,11 @@ if(IOS) ${CMAKE_CURRENT_LIST_DIR}/src/cap_ios_abstract_camera.mm ${CMAKE_CURRENT_LIST_DIR}/src/cap_ios_photo_camera.mm ${CMAKE_CURRENT_LIST_DIR}/src/cap_ios_video_camera.mm) + list(APPEND VIDEOIO_LIBRARIES "-framework Accelerate" "-framework AVFoundation" "-framework CoreGraphics" "-framework CoreImage" "-framework CoreMedia" "-framework CoreVideo" "-framework QuartzCore" "-framework AssetsLibrary") + if(APPLE_FRAMEWORK AND BUILD_SHARED_LIBS) + list(APPEND VIDEOIO_LIBRARIES "-framework UIKit") + endif() endif() if(WIN32) diff --git a/modules/world/CMakeLists.txt b/modules/world/CMakeLists.txt index db8928d69c..1a77245df2 100644 --- a/modules/world/CMakeLists.txt +++ b/modules/world/CMakeLists.txt @@ -2,7 +2,7 @@ set(the_description "All the selected OpenCV modules in a single binary") set(OPENCV_MODULE_IS_PART_OF_WORLD FALSE) set(BUILD_opencv_world_INIT OFF) -if(APPLE_FRAMEWORK OR NOT BUILD_SHARED_LIBS) +if(NOT BUILD_SHARED_LIBS) set(OPENCV_MODULE_TYPE STATIC) set(OPENCV_WORLD_FLAGS_PROPERTY STATIC_LIBRARY_FLAGS) else() diff --git a/platforms/ios/Info.Dynamic.plist.in b/platforms/ios/Info.Dynamic.plist.in new file mode 100644 index 0000000000..4ff68cca04 --- /dev/null +++ b/platforms/ios/Info.Dynamic.plist.in @@ -0,0 +1,28 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + opencv2 + CFBundleName + ${OPENCV_APPLE_BUNDLE_NAME} + CFBundleIdentifier + ${OPENCV_APPLE_BUNDLE_ID} + CFBundleVersion + ${OPENCV_LIBVERSION} + CFBundleShortVersionString + ${OPENCV_LIBVERSION} + CFBundleSignature + ???? + CFBundlePackageType + FMWK + CFBundleSupportedPlatforms + + iPhoneOS + + MinimumOSVersion + 8.0 + + \ No newline at end of file diff --git a/platforms/ios/build_framework.py b/platforms/ios/build_framework.py index f8886b6f93..2770a5a102 100644 --- a/platforms/ios/build_framework.py +++ b/platforms/ios/build_framework.py @@ -23,6 +23,8 @@ Script will create , if it's missing, and a few its subdirectories: The script should handle minor OpenCV updates efficiently - it does not recompile the library from scratch each time. However, opencv2.framework directory is erased and recreated on each run. + +Adding --dynamic parameter will build opencv2.framework as App Store dynamic framework. Only iOS 8+ versions are supported. """ from __future__ import print_function @@ -43,7 +45,7 @@ def getXCodeMajor(): return 0 class Builder: - def __init__(self, opencv, contrib, exclude, targets): + def __init__(self, opencv, contrib, dynamic, bitcodedisabled, exclude, targets): self.opencv = os.path.abspath(opencv) self.contrib = None if contrib: @@ -52,11 +54,18 @@ class Builder: self.contrib = os.path.abspath(modpath) else: print("Note: contrib repository is bad - modules subfolder not found", file=sys.stderr) + self.dynamic = dynamic + self.bitcodedisabled = bitcodedisabled self.exclude = exclude self.targets = targets def getBD(self, parent, t): - res = os.path.join(parent, '%s-%s' % t) + + if len(t[0]) == 1: + res = os.path.join(parent, 'build-%s-%s' % (t[0][0].lower(), t[1].lower())) + else: + res = os.path.join(parent, 'build-%s' % t[1].lower()) + if not os.path.isdir(res): os.makedirs(res) return os.path.abspath(res) @@ -70,17 +79,32 @@ class Builder: xcode_ver = getXCodeMajor() - for t in self.targets: + if self.dynamic: + alltargets = self.targets + else: + # if we are building a static library, we must build each architecture separately + alltargets = [] + + for t in self.targets: + for at in t[0]: + current = ( [at], t[1] ) + + alltargets.append(current) + + for t in alltargets: mainBD = self.getBD(mainWD, t) dirs.append(mainBD) + cmake_flags = [] if self.contrib: cmake_flags.append("-DOPENCV_EXTRA_MODULES_PATH=%s" % self.contrib) - if xcode_ver >= 7 and t[1] == 'iPhoneOS': + if xcode_ver >= 7 and t[1] == 'iPhoneOS' and self.bitcodedisabled == False: cmake_flags.append("-DCMAKE_C_FLAGS=-fembed-bitcode") cmake_flags.append("-DCMAKE_CXX_FLAGS=-fembed-bitcode") self.buildOne(t[0], t[1], mainBD, cmake_flags) - self.mergeLibs(mainBD) + + if self.dynamic == False: + self.mergeLibs(mainBD) self.makeFramework(outdir, dirs) def build(self, outdir): @@ -97,13 +121,26 @@ class Builder: return None def getCMakeArgs(self, arch, target): - args = [ - "cmake", - "-GXcode", - "-DAPPLE_FRAMEWORK=ON", - "-DCMAKE_INSTALL_PREFIX=install", - "-DCMAKE_BUILD_TYPE=Release", - ] + + if self.dynamic: + args = [ + "cmake", + "-GXcode", + "-DAPPLE_FRAMEWORK=ON", + "-DCMAKE_INSTALL_PREFIX=install", + "-DCMAKE_BUILD_TYPE=Release", + "-DBUILD_SHARED_LIBS=ON", + "-DCMAKE_MACOSX_BUNDLE=ON", + "-DCMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED=NO", + ] + else: + args = [ + "cmake", + "-GXcode", + "-DAPPLE_FRAMEWORK=ON", + "-DCMAKE_INSTALL_PREFIX=install", + "-DCMAKE_BUILD_TYPE=Release", + ] if len(self.exclude) > 0: args += ["-DBUILD_opencv_world=OFF"] @@ -111,16 +148,38 @@ class Builder: return args - def getBuildCommand(self, arch, target): - buildcmd = [ - "xcodebuild", - "IPHONEOS_DEPLOYMENT_TARGET=6.0", - "ARCHS=%s" % arch, - "-sdk", target.lower(), - "-configuration", "Release", - "-parallelizeTargets", - "-jobs", "4" - ] + def getBuildCommand(self, archs, target): + + if self.dynamic: + buildcmd = [ + "xcodebuild", + "IPHONEOS_DEPLOYMENT_TARGET=8.0", + "ONLY_ACTIVE_ARCH=NO", + ] + + for arch in archs: + buildcmd.append("-arch") + buildcmd.append(arch.lower()) + + buildcmd += [ + "-sdk", target.lower(), + "-configuration", "Release", + "-parallelizeTargets", + "-jobs", "4", + "-target","ALL_BUILD", + ] + else: + arch = ";".join(archs) + buildcmd = [ + "xcodebuild", + "IPHONEOS_DEPLOYMENT_TARGET=6.0", + "ARCHS=%s" % arch, + "-sdk", target.lower(), + "-configuration", "Release", + "-parallelizeTargets", + "-jobs", "4" + ] + return buildcmd def getInfoPlist(self, builddirs): @@ -131,11 +190,12 @@ class Builder: toolchain = self.getToolchain(arch, target) cmakecmd = self.getCMakeArgs(arch, target) + \ (["-DCMAKE_TOOLCHAIN_FILE=%s" % toolchain] if toolchain is not None else []) - if arch.startswith("armv") or arch.startswith("arm64"): + if target.lower().startswith("iphoneos"): cmakecmd.append("-DENABLE_NEON=ON") cmakecmd.append(self.opencv) cmakecmd.extend(cmakeargs) execute(cmakecmd, cwd = builddir) + # Clean and build clean_dir = os.path.join(builddir, "install") if os.path.isdir(clean_dir): @@ -153,7 +213,6 @@ class Builder: def makeFramework(self, outdir, builddirs): name = "opencv2" - libname = "libopencv_merged.a" # set the current dir to the dst root framework_dir = os.path.join(outdir, "%s.framework" % name) @@ -161,7 +220,12 @@ class Builder: shutil.rmtree(framework_dir) os.makedirs(framework_dir) - dstdir = os.path.join(framework_dir, "Versions", "A") + if self.dynamic: + dstdir = framework_dir + libname = "opencv2.framework/opencv2" + else: + dstdir = os.path.join(framework_dir, "Versions", "A") + libname = "libopencv_merged.a" # copy headers from one of build folders shutil.copytree(os.path.join(builddirs[0], "install", "include", "opencv2"), os.path.join(dstdir, "Headers")) @@ -174,22 +238,27 @@ class Builder: print("Creating universal library from:\n\t%s" % "\n\t".join(libs), file=sys.stderr) execute(lipocmd) - # copy Info.plist - resdir = os.path.join(dstdir, "Resources") - os.makedirs(resdir) - shutil.copyfile(self.getInfoPlist(builddirs), os.path.join(resdir, "Info.plist")) + # dynamic framework has different structure, just copy the Plist directly + if self.dynamic: + resdir = dstdir + shutil.copyfile(self.getInfoPlist(builddirs), os.path.join(resdir, "Info.plist")) + else: + # copy Info.plist + resdir = os.path.join(dstdir, "Resources") + os.makedirs(resdir) + shutil.copyfile(self.getInfoPlist(builddirs), os.path.join(resdir, "Info.plist")) - # make symbolic links - links = [ - (["A"], ["Versions", "Current"]), - (["Versions", "Current", "Headers"], ["Headers"]), - (["Versions", "Current", "Resources"], ["Resources"]), - (["Versions", "Current", name], [name]) - ] - for l in links: - s = os.path.join(*l[0]) - d = os.path.join(framework_dir, *l[1]) - os.symlink(s, d) + # make symbolic links + links = [ + (["A"], ["Versions", "Current"]), + (["Versions", "Current", "Headers"], ["Headers"]), + (["Versions", "Current", "Resources"], ["Resources"]), + (["Versions", "Current", name], [name]) + ] + for l in links: + s = os.path.join(*l[0]) + d = os.path.join(framework_dir, *l[1]) + os.symlink(s, d) class iOSBuilder(Builder): @@ -198,6 +267,8 @@ class iOSBuilder(Builder): return toolchain def getCMakeArgs(self, arch, target): + arch = ";".join(arch) + args = Builder.getCMakeArgs(self, arch, target) args = args + [ '-DIOS_ARCH=%s' % arch @@ -212,18 +283,16 @@ if __name__ == "__main__": parser.add_argument('--opencv', metavar='DIR', default=folder, help='folder with opencv repository (default is "../.." relative to script location)') parser.add_argument('--contrib', metavar='DIR', default=None, help='folder with opencv_contrib repository (default is "None" - build only main framework)') parser.add_argument('--without', metavar='MODULE', default=[], action='append', help='OpenCV modules to exclude from the framework') + parser.add_argument('--dynamic', default=False, action='store_true', help='build dynamic framework (default is "False" - builds static framework)') + parser.add_argument('--disable-bitcode', default=False, dest='bitcodedisabled', action='store_true', help='disable bitcode (enabled by default)') args = parser.parse_args() - b = iOSBuilder(args.opencv, args.contrib, args.without, + b = iOSBuilder(args.opencv, args.contrib, args.dynamic, args.bitcodedisabled, args.without, [ - ("armv7", "iPhoneOS"), - ("arm64", "iPhoneOS"), + (["armv7", "arm64"], "iPhoneOS"), ] if os.environ.get('BUILD_PRECOMMIT', None) else [ - ("armv7", "iPhoneOS"), - ("armv7s", "iPhoneOS"), - ("arm64", "iPhoneOS"), - ("i386", "iPhoneSimulator"), - ("x86_64", "iPhoneSimulator"), + (["armv7", "armv7s", "arm64"], "iPhoneOS"), + (["i386", "x86_64"], "iPhoneSimulator"), ]) b.build(args.out) diff --git a/platforms/ios/cmake/Modules/Platform/iOS.cmake b/platforms/ios/cmake/Modules/Platform/iOS.cmake index 63cf1d89e7..6915adfbc7 100644 --- a/platforms/ios/cmake/Modules/Platform/iOS.cmake +++ b/platforms/ios/cmake/Modules/Platform/iOS.cmake @@ -38,6 +38,14 @@ set (CMAKE_C_OSX_CURRENT_VERSION_FLAG "-current_version ") set (CMAKE_CXX_OSX_COMPATIBILITY_VERSION_FLAG "${CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG}") set (CMAKE_CXX_OSX_CURRENT_VERSION_FLAG "${CMAKE_C_OSX_CURRENT_VERSION_FLAG}") +# Additional flags for dynamic framework +if (APPLE_FRAMEWORK AND BUILD_SHARED_LIBS) + set (CMAKE_MODULE_LINKER_FLAGS "-rpath @executable_path/Frameworks -rpath @loader_path/Frameworks") + set (CMAKE_SHARED_LINKER_FLAGS "-rpath @executable_path/Frameworks -rpath @loader_path/Frameworks") + set (CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG 1) + set (CMAKE_INSTALL_NAME_DIR "@rpath") +endif() + # Hidden visibilty is required for cxx on iOS set (no_warn "-Wno-unused-function -Wno-overloaded-virtual") set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${no_warn}") @@ -144,7 +152,6 @@ set (CMAKE_C_CREATE_MACOSX_FRAMEWORK set (CMAKE_CXX_CREATE_MACOSX_FRAMEWORK " -o -install_name ") - # Add the install directory of the running cmake to the search directories # CMAKE_ROOT is CMAKE_INSTALL_PREFIX/share/cmake, so we need to go two levels up get_filename_component (_CMAKE_INSTALL_DIR "${CMAKE_ROOT}" PATH) diff --git a/platforms/ios/cmake/Toolchains/common-ios-toolchain.cmake b/platforms/ios/cmake/Toolchains/common-ios-toolchain.cmake index 24dab91ff6..44ad57ce74 100644 --- a/platforms/ios/cmake/Toolchains/common-ios-toolchain.cmake +++ b/platforms/ios/cmake/Toolchains/common-ios-toolchain.cmake @@ -86,24 +86,52 @@ endif() set(CMAKE_MACOSX_BUNDLE YES) set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED "NO") -set(CMAKE_OSX_ARCHITECTURES "${IOS_ARCH}" CACHE INTERNAL "Build architecture for iOS" FORCE) +if(APPLE_FRAMEWORK AND NOT BUILD_SHARED_LIBS) + set(CMAKE_OSX_ARCHITECTURES "${IOS_ARCH}" CACHE INTERNAL "Build architecture for iOS" FORCE) +endif() if(NOT __IN_TRY_COMPILE) set(_xcodebuild_wrapper "${CMAKE_BINARY_DIR}/xcodebuild_wrapper") if(NOT CMAKE_MAKE_PROGRAM STREQUAL _xcodebuild_wrapper) - set(_xcodebuild_wrapper_tmp "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/xcodebuild_wrapper") - file(WRITE "${_xcodebuild_wrapper_tmp}" "#!/bin/sh + if(APPLE_FRAMEWORK AND BUILD_SHARED_LIBS) + set(_xcodebuild_wrapper_tmp "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/xcodebuild_wrapper") + file(WRITE "${_xcodebuild_wrapper_tmp}" "#!/bin/sh +${CMAKE_MAKE_PROGRAM} IPHONEOS_DEPLOYMENT_TARGET=8.0 -sdk ${CMAKE_OSX_SYSROOT} \$*") + # Make executable + file(COPY "${_xcodebuild_wrapper_tmp}" DESTINATION ${CMAKE_BINARY_DIR} FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) + set(CMAKE_MAKE_PROGRAM "${_xcodebuild_wrapper}" CACHE INTERNAL "" FORCE) + else() + set(_xcodebuild_wrapper_tmp "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/xcodebuild_wrapper") + file(WRITE "${_xcodebuild_wrapper_tmp}" "#!/bin/sh ${CMAKE_MAKE_PROGRAM} IPHONEOS_DEPLOYMENT_TARGET=6.0 ARCHS=${IOS_ARCH} -sdk ${CMAKE_OSX_SYSROOT} \$*") - # Make executable - file(COPY "${_xcodebuild_wrapper_tmp}" DESTINATION ${CMAKE_BINARY_DIR} FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) - set(CMAKE_MAKE_PROGRAM "${_xcodebuild_wrapper}" CACHE INTERNAL "" FORCE) + # Make executable + file(COPY "${_xcodebuild_wrapper_tmp}" DESTINATION ${CMAKE_BINARY_DIR} FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) + set(CMAKE_MAKE_PROGRAM "${_xcodebuild_wrapper}" CACHE INTERNAL "" FORCE) + endif() endif() endif() # Standard settings set(CMAKE_SYSTEM_NAME iOS) -set(CMAKE_SYSTEM_VERSION 6.0) -set(CMAKE_SYSTEM_PROCESSOR "${IOS_ARCH}") + +# Apple Framework settings +if(APPLE_FRAMEWORK AND BUILD_SHARED_LIBS) + set(CMAKE_SYSTEM_VERSION 8.0) + set(CMAKE_C_SIZEOF_DATA_PTR 4) + set(CMAKE_CXX_SIZEOF_DATA_PTR 4) +else() + set(CMAKE_SYSTEM_VERSION 6.0) + set(CMAKE_SYSTEM_PROCESSOR "${IOS_ARCH}") + + if(AARCH64 OR X86_64) + set(CMAKE_C_SIZEOF_DATA_PTR 8) + set(CMAKE_CXX_SIZEOF_DATA_PTR 8) + else() + set(CMAKE_C_SIZEOF_DATA_PTR 4) + set(CMAKE_CXX_SIZEOF_DATA_PTR 4) + endif() +endif() + # Include extra modules for the iOS platform files set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/cmake/Modules") @@ -112,13 +140,6 @@ include(CMakeForceCompiler) #CMAKE_FORCE_C_COMPILER (clang GNU) #CMAKE_FORCE_CXX_COMPILER (clang++ GNU) -if(AARCH64 OR X86_64) - set(CMAKE_C_SIZEOF_DATA_PTR 8) - set(CMAKE_CXX_SIZEOF_DATA_PTR 8) -else() - set(CMAKE_C_SIZEOF_DATA_PTR 4) - set(CMAKE_CXX_SIZEOF_DATA_PTR 4) -endif() set(CMAKE_C_HAS_ISYSROOT 1) set(CMAKE_CXX_HAS_ISYSROOT 1) set(CMAKE_C_COMPILER_ABI ELF) @@ -134,4 +155,4 @@ set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) -toolchain_save_config(IOS_ARCH) +toolchain_save_config(IOS_ARCH) \ No newline at end of file From c659f94dca9f8504afc2b30c750e2ab841bed267 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20W=C3=BCrtz?= Date: Fri, 20 Jan 2017 18:34:41 +0100 Subject: [PATCH 35/54] Expose more UMat constructors to python --- modules/python/src2/cv2.cpp | 88 +++++++++++++++++++++++++++---------- modules/python/test/test.py | 11 +++++ 2 files changed, 77 insertions(+), 22 deletions(-) diff --git a/modules/python/src2/cv2.cpp b/modules/python/src2/cv2.cpp index e69e933375..66e3733cec 100644 --- a/modules/python/src2/cv2.cpp +++ b/modules/python/src2/cv2.cpp @@ -417,34 +417,74 @@ typedef struct { UMat* um; } cv2_UMatWrapperObject; -// UMatWrapper init - takes one optional argument, that converts to Mat, that converts to UMat and stored inside. -// If no argument given - empty UMat created. +static bool PyObject_IsUMat(PyObject *o); + +// UMatWrapper init - try to map arguments from python to UMat constructors static int UMatWrapper_init(cv2_UMatWrapperObject *self, PyObject *args, PyObject *kwds) { - self->um = new UMat(); - - PyObject *np_mat = NULL; - - static char *kwlist[] = {new char[3], NULL}; - strcpy(kwlist[0], "mat"); - - if (! PyArg_ParseTupleAndKeywords(args, kwds, "|O", kwlist, &np_mat)) - return -1; - - if (np_mat) { - Mat m; - if (!pyopencv_to(np_mat, m, ArgInfo("UMatWrapper.np_mat", 0))) - return -1; - - m.copyTo(*self->um); + self->um = NULL; + { + // constructor () + const char *kwlist[] = {NULL}; + if (PyArg_ParseTupleAndKeywords(args, kwds, "", (char**) kwlist)) { + self->um = new UMat(); + return 0; + } + PyErr_Clear(); } - - return 0; + { + // constructor (rows, cols, type) + const char *kwlist[] = {"rows", "cols", "type", NULL}; + int rows, cols, type; + if (PyArg_ParseTupleAndKeywords(args, kwds, "iii", (char**) kwlist, &rows, &cols, &type)) { + self->um = new UMat(rows, cols, type); + return 0; + } + PyErr_Clear(); + } + { + // constructor (m, rowRange, colRange) + const char *kwlist[] = {"m", "rowRange", "colRange", NULL}; + PyObject *obj = NULL; + int y0 = -1, y1 = -1, x0 = -1, x1 = -1; + if (PyArg_ParseTupleAndKeywords(args, kwds, "O(ii)|(ii)", (char**) kwlist, &obj, &y0, &y1, &x0, &x1) && PyObject_IsUMat(obj)) { + UMat *um_other = ((cv2_UMatWrapperObject *) obj)->um; + Range rowRange(y0, y1); + Range colRange = (x0 >= 0 && x1 >= 0) ? Range(x0, x1) : Range::all(); + self->um = new UMat(*um_other, rowRange, colRange); + return 0; + } + PyErr_Clear(); + } + { + // constructor (m) + const char *kwlist[] = {"m", NULL}; + PyObject *obj = NULL; + if (PyArg_ParseTupleAndKeywords(args, kwds, "O", (char**) kwlist, &obj)) { + // constructor (UMat m) + if (PyObject_IsUMat(obj)) { + UMat *um_other = ((cv2_UMatWrapperObject *) obj)->um; + self->um = new UMat(*um_other); + return 0; + } + // python specific constructor from array like object + Mat m; + if (pyopencv_to(obj, m, ArgInfo("UMatWrapper.np_mat", 0))) { + self->um = new UMat(); + m.copyTo(*self->um); + return 0; + } + } + PyErr_Clear(); + } + PyErr_SetString(PyExc_TypeError, "no matching UMat constructor found/supported"); + return -1; } static void UMatWrapper_dealloc(cv2_UMatWrapperObject* self) { - delete self->um; + if (self->um) + delete self->um; #if PY_MAJOR_VERSION >= 3 Py_TYPE(self)->tp_free((PyObject*)self); #else @@ -529,8 +569,12 @@ static PyTypeObject cv2_UMatWrapperType = { #endif }; +static bool PyObject_IsUMat(PyObject *o) { + return (o != NULL) && PyObject_TypeCheck(o, &cv2_UMatWrapperType); +} + static bool pyopencv_to(PyObject* o, UMat& um, const ArgInfo info) { - if (o != NULL && PyObject_TypeCheck(o, &cv2_UMatWrapperType) ) { + if (PyObject_IsUMat(o)) { um = *((cv2_UMatWrapperObject *) o)->um; return true; } diff --git a/modules/python/test/test.py b/modules/python/test/test.py index 5a66769a49..f4585471e8 100755 --- a/modules/python/test/test.py +++ b/modules/python/test/test.py @@ -123,6 +123,17 @@ class Hackathon244Tests(NewOpenCVTests): boost.getMaxDepth() # from ml::DTrees boost.isClassifier() # from ml::StatModel + def test_umat_construct(self): + data = np.random.random([512, 512]) + # UMat constructors + data_um = cv2.UMat(data) # from ndarray + data_sub_um = cv2.UMat(data_um, [0, 256], [0, 256]) # from UMat + data_dst_um = cv2.UMat(256, 256, cv2.CV_64F) # from size/type + + # simple test + cv2.multiply(data_sub_um, 2., dst=data_dst_um) + assert np.allclose(2. * data[:256, :256], data_dst_um.get()) + def test_umat_matching(self): img1 = self.get_sample("samples/data/right01.jpg") img2 = self.get_sample("samples/data/right02.jpg") From 1d01e435ca9d029c517091d0444eb5d3bd8acdf4 Mon Sep 17 00:00:00 2001 From: Tomoaki Teshima Date: Mon, 23 Jan 2017 19:03:22 +0900 Subject: [PATCH 36/54] use universal intrinsic in fast --- modules/features2d/src/fast.cpp | 122 +++++++++++++++++--------------- 1 file changed, 64 insertions(+), 58 deletions(-) diff --git a/modules/features2d/src/fast.cpp b/modules/features2d/src/fast.cpp index e731dedca7..98d62a3b2c 100644 --- a/modules/features2d/src/fast.cpp +++ b/modules/features2d/src/fast.cpp @@ -44,6 +44,7 @@ The references are: #include "precomp.hpp" #include "fast_score.hpp" #include "opencl_kernels_features2d.hpp" +#include "opencv2/core/hal/intrin.hpp" #include "opencv2/core/openvx/ovx_defs.hpp" #if defined _MSC_VER @@ -58,9 +59,10 @@ void FAST_t(InputArray _img, std::vector& keypoints, int threshold, bo { Mat img = _img.getMat(); const int K = patternSize/2, N = patternSize + K + 1; -#if CV_SSE2 +#if CV_SIMD128 const int quarterPatternSize = patternSize/4; - (void)quarterPatternSize; + v_uint8x16 delta = v_setall_u8(0x80), t = v_setall_u8((char)threshold), K16 = v_setall_u8((char)K); + bool hasSimd = hasSIMD128(); #endif int i, j, k, pixel[25]; makeOffsets(pixel, (int)img.step, patternSize); @@ -69,12 +71,6 @@ void FAST_t(InputArray _img, std::vector& keypoints, int threshold, bo threshold = std::min(std::max(threshold, 0), 255); -#if CV_SSE2 - __m128i delta = _mm_set1_epi8(-128), t = _mm_set1_epi8((char)threshold), K16 = _mm_set1_epi8((char)K); - (void)K16; - (void)delta; - (void)t; -#endif uchar threshold_tab[512]; for( i = -255; i <= 255; i++ ) threshold_tab[i+255] = (uchar)(i < -threshold ? 1 : i > threshold ? 2 : 0); @@ -99,66 +95,76 @@ void FAST_t(InputArray _img, std::vector& keypoints, int threshold, bo if( i < img.rows - 3 ) { j = 3; - #if CV_SSE2 - if( patternSize == 16 ) +#if CV_SIMD128 + if( hasSimd ) { - for(; j < img.cols - 16 - 3; j += 16, ptr += 16) + if( patternSize == 16 ) { - __m128i m0, m1; - __m128i v0 = _mm_loadu_si128((const __m128i*)ptr); - __m128i v1 = _mm_xor_si128(_mm_subs_epu8(v0, t), delta); - v0 = _mm_xor_si128(_mm_adds_epu8(v0, t), delta); - - __m128i x0 = _mm_sub_epi8(_mm_loadu_si128((const __m128i*)(ptr + pixel[0])), delta); - __m128i x1 = _mm_sub_epi8(_mm_loadu_si128((const __m128i*)(ptr + pixel[quarterPatternSize])), delta); - __m128i x2 = _mm_sub_epi8(_mm_loadu_si128((const __m128i*)(ptr + pixel[2*quarterPatternSize])), delta); - __m128i x3 = _mm_sub_epi8(_mm_loadu_si128((const __m128i*)(ptr + pixel[3*quarterPatternSize])), delta); - m0 = _mm_and_si128(_mm_cmpgt_epi8(x0, v0), _mm_cmpgt_epi8(x1, v0)); - m1 = _mm_and_si128(_mm_cmpgt_epi8(v1, x0), _mm_cmpgt_epi8(v1, x1)); - m0 = _mm_or_si128(m0, _mm_and_si128(_mm_cmpgt_epi8(x1, v0), _mm_cmpgt_epi8(x2, v0))); - m1 = _mm_or_si128(m1, _mm_and_si128(_mm_cmpgt_epi8(v1, x1), _mm_cmpgt_epi8(v1, x2))); - m0 = _mm_or_si128(m0, _mm_and_si128(_mm_cmpgt_epi8(x2, v0), _mm_cmpgt_epi8(x3, v0))); - m1 = _mm_or_si128(m1, _mm_and_si128(_mm_cmpgt_epi8(v1, x2), _mm_cmpgt_epi8(v1, x3))); - m0 = _mm_or_si128(m0, _mm_and_si128(_mm_cmpgt_epi8(x3, v0), _mm_cmpgt_epi8(x0, v0))); - m1 = _mm_or_si128(m1, _mm_and_si128(_mm_cmpgt_epi8(v1, x3), _mm_cmpgt_epi8(v1, x0))); - m0 = _mm_or_si128(m0, m1); - int mask = _mm_movemask_epi8(m0); - if( mask == 0 ) - continue; - if( (mask & 255) == 0 ) + for(; j < img.cols - 16 - 3; j += 16, ptr += 16) { - j -= 8; - ptr -= 8; - continue; - } + v_uint8x16 v = v_load(ptr); + v_int8x16 v0 = v_reinterpret_as_s8((v + t) ^ delta); + v_int8x16 v1 = v_reinterpret_as_s8((v - t) ^ delta); - __m128i c0 = _mm_setzero_si128(), c1 = c0, max0 = c0, max1 = c0; - for( k = 0; k < N; k++ ) - { - __m128i x = _mm_xor_si128(_mm_loadu_si128((const __m128i*)(ptr + pixel[k])), delta); - m0 = _mm_cmpgt_epi8(x, v0); - m1 = _mm_cmpgt_epi8(v1, x); + v_int8x16 x0 = v_reinterpret_as_s8(v_sub_wrap(v_load(ptr + pixel[0]), delta)); + v_int8x16 x1 = v_reinterpret_as_s8(v_sub_wrap(v_load(ptr + pixel[quarterPatternSize]), delta)); + v_int8x16 x2 = v_reinterpret_as_s8(v_sub_wrap(v_load(ptr + pixel[2*quarterPatternSize]), delta)); + v_int8x16 x3 = v_reinterpret_as_s8(v_sub_wrap(v_load(ptr + pixel[3*quarterPatternSize]), delta)); - c0 = _mm_and_si128(_mm_sub_epi8(c0, m0), m0); - c1 = _mm_and_si128(_mm_sub_epi8(c1, m1), m1); + v_int8x16 m0, m1; + m0 = (v0 < x0) & (v0 < x1); + m1 = (x0 < v1) & (x1 < v1); + m0 = m0 | ((v0 < x1) & (v0 < x2)); + m1 = m1 | ((x1 < v1) & (x2 < v1)); + m0 = m0 | ((v0 < x2) & (v0 < x3)); + m1 = m1 | ((x2 < v1) & (x3 < v1)); + m0 = m0 | ((v0 < x3) & (v0 < x0)); + m1 = m1 | ((x3 < v1) & (x0 < v1)); + m0 = m0 | m1; - max0 = _mm_max_epu8(max0, c0); - max1 = _mm_max_epu8(max1, c1); - } - - max0 = _mm_max_epu8(max0, max1); - int m = _mm_movemask_epi8(_mm_cmpgt_epi8(max0, K16)); - - for( k = 0; m > 0 && k < 16; k++, m >>= 1 ) - if(m & 1) + int mask = v_signmask(m0); + if( mask == 0 ) + continue; + if( (mask & 255) == 0 ) { - cornerpos[ncorners++] = j+k; - if(nonmax_suppression) - curr[j+k] = (uchar)cornerScore(ptr+k, pixel, threshold); + j -= 8; + ptr -= 8; + continue; } + + v_int8x16 c0 = v_setzero_s8(); + v_int8x16 c1 = v_setzero_s8(); + v_uint8x16 max0 = v_setzero_u8(); + v_uint8x16 max1 = v_setzero_u8(); + for( k = 0; k < N; k++ ) + { + v_int8x16 x = v_reinterpret_as_s8(v_load((ptr + pixel[k])) ^ delta); + m0 = v0 < x; + m1 = x < v1; + + c0 = v_sub_wrap(c0, m0) & m0; + c1 = v_sub_wrap(c1, m1) & m1; + + max0 = v_max(max0, v_reinterpret_as_u8(c0)); + max1 = v_max(max1, v_reinterpret_as_u8(c1)); + } + + max0 = v_max(max0, max1); + int m = v_signmask(K16 < max0); + + for( k = 0; m > 0 && k < 16; k++, m >>= 1 ) + { + if(m & 1) + { + cornerpos[ncorners++] = j+k; + if(nonmax_suppression) + curr[j+k] = (uchar)cornerScore(ptr+k, pixel, threshold); + } + } + } } } - #endif +#endif for( ; j < img.cols - 3; j++, ptr++ ) { int v = ptr[0]; From 9bb5d6cab03c18996737c40e65850f3b3938a4d3 Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Tue, 17 Jan 2017 19:58:57 +0300 Subject: [PATCH 37/54] remove precomp.cpp --- modules/shape/src/precomp.cpp | 45 ----------------------------------- 1 file changed, 45 deletions(-) delete mode 100644 modules/shape/src/precomp.cpp diff --git a/modules/shape/src/precomp.cpp b/modules/shape/src/precomp.cpp deleted file mode 100644 index 730edbb63d..0000000000 --- a/modules/shape/src/precomp.cpp +++ /dev/null @@ -1,45 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not be used to endorse or promote products -// derived from this software without specific prior written permission. -// -// This software is provided by the copyright holders and contributors "as is" and -// any express or implied warranties, including, but not limited to, the implied -// warranties of merchantability and fitness for a particular purpose are disclaimed. -// In no event shall the Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -/* End of file. */ From 36b34465a4314d3ec42489c3157523bd62d47d01 Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Mon, 16 Jan 2017 18:12:38 +0300 Subject: [PATCH 38/54] cmake: include contrib modules into opencv_world --- CMakeLists.txt | 4 ++++ cmake/OpenCVGenABI.cmake | 10 ++++++---- cmake/OpenCVModule.cmake | 8 +++++--- cmake/OpenCVPCHSupport.cmake | 2 ++ cmake/OpenCVUtils.cmake | 9 ++++++++- modules/stitching/CMakeLists.txt | 2 +- modules/ts/misc/run_utils.py | 2 +- modules/viz/CMakeLists.txt | 8 +++++--- modules/world/CMakeLists.txt | 11 +++++++++-- 9 files changed, 41 insertions(+), 15 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index cc45f6f394..c79ad2be6e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -76,6 +76,10 @@ if(POLICY CMP0022) cmake_policy(SET CMP0022 OLD) endif() +if(POLICY CMP0023) + cmake_policy(SET CMP0023 NEW) +endif() + if(POLICY CMP0026) # silence cmake 3.0+ warnings about reading LOCATION attribute cmake_policy(SET CMP0026 OLD) diff --git a/cmake/OpenCVGenABI.cmake b/cmake/OpenCVGenABI.cmake index 86aa78b17b..e9d6a33481 100644 --- a/cmake/OpenCVGenABI.cmake +++ b/cmake/OpenCVGenABI.cmake @@ -33,10 +33,12 @@ foreach(mod ${OPENCV_MODULES_BUILD}) list(APPEND OPENCV_ABI_SKIP_HEADERS "${h}") endforeach() # libraries - set(lib_name "") - get_target_property(lib_name opencv_${mod} LOCATION) - get_filename_component(lib_name "${lib_name}" NAME) - list(APPEND OPENCV_ABI_SKIP_LIBRARIES "${lib_name}") + if(TARGET opencv_${mod}) # opencv_world + set(lib_name "") + get_target_property(lib_name opencv_${mod} LOCATION) + get_filename_component(lib_name "${lib_name}" NAME) + list(APPEND OPENCV_ABI_SKIP_LIBRARIES "${lib_name}") + endif() endif() endforeach() string(REPLACE ";" "\n " OPENCV_ABI_SKIP_HEADERS "${OPENCV_ABI_SKIP_HEADERS}") diff --git a/cmake/OpenCVModule.cmake b/cmake/OpenCVModule.cmake index ebeb25cf2b..a0e859232e 100644 --- a/cmake/OpenCVModule.cmake +++ b/cmake/OpenCVModule.cmake @@ -182,7 +182,7 @@ macro(ocv_add_module _name) # add self to the world dependencies if((NOT DEFINED OPENCV_MODULE_IS_PART_OF_WORLD AND NOT OPENCV_MODULE_${the_module}_CLASS STREQUAL "BINDINGS" - AND NOT OPENCV_PROCESSING_EXTRA_MODULES + AND (NOT OPENCV_PROCESSING_EXTRA_MODULES OR NOT OPENCV_WORLD_EXCLUDE_EXTRA_MODULES) AND (NOT BUILD_SHARED_LIBS OR NOT "x${OPENCV_MODULE_TYPE}" STREQUAL "xSTATIC")) OR OPENCV_MODULE_IS_PART_OF_WORLD ) @@ -724,8 +724,10 @@ endmacro() # ocv_create_module() # ocv_create_module() macro(ocv_create_module) - ocv_debug_message("ocv_create_module(" ${ARGN} ")") - set(OPENCV_MODULE_${the_module}_LINK_DEPS "${OPENCV_MODULE_${the_module}_LINK_DEPS};${ARGN}" CACHE INTERNAL "") + ocv_debug_message("${the_module}: ocv_create_module(" ${ARGN} ")") + if(NOT " ${ARGN}" STREQUAL " ") + set(OPENCV_MODULE_${the_module}_LINK_DEPS "${OPENCV_MODULE_${the_module}_LINK_DEPS};${ARGN}" CACHE INTERNAL "") + endif() if(${BUILD_opencv_world} AND OPENCV_MODULE_${the_module}_IS_PART_OF_WORLD) # nothing set(the_module_target opencv_world) diff --git a/cmake/OpenCVPCHSupport.cmake b/cmake/OpenCVPCHSupport.cmake index 90437cb204..29f21d8015 100644 --- a/cmake/OpenCVPCHSupport.cmake +++ b/cmake/OpenCVPCHSupport.cmake @@ -303,9 +303,11 @@ ENDMACRO(ADD_PRECOMPILED_HEADER) MACRO(GET_NATIVE_PRECOMPILED_HEADER _targetName _input) + if(ENABLE_PRECOMPILED_HEADERS) if(CMAKE_GENERATOR MATCHES "^Visual.*$") set(${_targetName}_pch ${CMAKE_CURRENT_BINARY_DIR}/${_targetName}_pch.cpp) endif() + endif() ENDMACRO(GET_NATIVE_PRECOMPILED_HEADER) diff --git a/cmake/OpenCVUtils.cmake b/cmake/OpenCVUtils.cmake index 7a0e448f77..474f7db609 100644 --- a/cmake/OpenCVUtils.cmake +++ b/cmake/OpenCVUtils.cmake @@ -887,7 +887,14 @@ function(ocv_target_link_libraries target) if(";${LINK_DEPS};" MATCHES ";${target};") list(REMOVE_ITEM LINK_DEPS "${target}") # prevent "link to itself" warning (world problem) endif() - target_link_libraries(${target} ${LINK_DEPS}) + if(NOT TARGET ${target}) + if(NOT DEFINED OPENCV_MODULE_${target}_LOCATION) + message(FATAL_ERROR "ocv_target_link_libraries: invalid target: '${target}'") + endif() + set(OPENCV_MODULE_${target}_LINK_DEPS ${OPENCV_MODULE_${target}_LINK_DEPS} ${LINK_DEPS} CACHE INTERNAL "" FORCE) + else() + target_link_libraries(${target} ${LINK_DEPS}) + endif() endfunction() function(_ocv_append_target_includes target) diff --git a/modules/stitching/CMakeLists.txt b/modules/stitching/CMakeLists.txt index 76c7bc8489..0e4f39a99d 100644 --- a/modules/stitching/CMakeLists.txt +++ b/modules/stitching/CMakeLists.txt @@ -5,7 +5,7 @@ if(HAVE_CUDA) endif() set(STITCHING_CONTRIB_DEPS "opencv_xfeatures2d") -if(BUILD_SHARED_LIBS AND BUILD_opencv_world) +if(BUILD_SHARED_LIBS AND BUILD_opencv_world AND OPENCV_WORLD_EXCLUDE_EXTRA_MODULES) set(STITCHING_CONTRIB_DEPS "") endif() ocv_define_module(stitching opencv_imgproc opencv_features2d opencv_calib3d opencv_objdetect diff --git a/modules/ts/misc/run_utils.py b/modules/ts/misc/run_utils.py index 8740aa7855..2e9a66f8bd 100644 --- a/modules/ts/misc/run_utils.py +++ b/modules/ts/misc/run_utils.py @@ -193,7 +193,7 @@ class CMakeCache: self.tests_dir = os.path.normpath(path) def read(self, path, fname): - rx = re.compile(r'^opencv_(\w+)_SOURCE_DIR:STATIC=(.*)$') + rx = re.compile(r'^OPENCV_MODULE_opencv_(\w+)_LOCATION:INTERNAL=(.*)$') module_paths = {} # name -> path with open(fname, "rt") as cachefile: for l in cachefile.readlines(): diff --git a/modules/viz/CMakeLists.txt b/modules/viz/CMakeLists.txt index 9fd0301635..a22f52fd87 100644 --- a/modules/viz/CMakeLists.txt +++ b/modules/viz/CMakeLists.txt @@ -2,12 +2,14 @@ if(NOT WITH_VTK OR NOT DEFINED HAVE_VTK OR NOT HAVE_VTK) ocv_module_disable(viz) endif() -include(${VTK_USE_FILE}) set(the_description "Viz") -ocv_define_module(viz opencv_core ${VTK_LIBRARIES} WRAP python) +ocv_define_module(viz opencv_core WRAP python) + +include(${VTK_USE_FILE}) +ocv_target_link_libraries(${the_module} ${VTK_LIBRARIES}) if(APPLE AND BUILD_opencv_viz) - ocv_target_link_libraries(opencv_viz "-framework Cocoa") + ocv_target_link_libraries(${the_module} "-framework Cocoa") endif() if(TARGET opencv_test_viz) diff --git a/modules/world/CMakeLists.txt b/modules/world/CMakeLists.txt index 1a77245df2..dde793fa00 100644 --- a/modules/world/CMakeLists.txt +++ b/modules/world/CMakeLists.txt @@ -11,6 +11,11 @@ endif() function(include_one_module m) include("${OPENCV_MODULE_${m}_LOCATION}/CMakeLists.txt") + foreach(var + CMAKE_CXX_FLAGS CMAKE_C_FLAGS # Propagate warnings settings + ) + set(${var} "${${var}}" PARENT_SCOPE) + endforeach() endfunction() if(NOT OPENCV_INITIAL_PASS) @@ -35,12 +40,14 @@ ocv_add_module(world opencv_core) set(headers_list "HEADERS") set(sources_list "SOURCES") set(link_deps "") -foreach(m ${OPENCV_MODULE_${the_module}_DEPS}) +foreach(m ${OPENCV_MODULE_${the_module}_DEPS} opencv_world) if(OPENCV_MODULE_${m}_IS_PART_OF_WORLD) set(headers_list "${headers_list};${OPENCV_MODULE_${m}_HEADERS}") set(sources_list "${sources_list};${OPENCV_MODULE_${m}_SOURCES}") endif() - set(link_deps "${link_deps};${OPENCV_MODULE_${m}_LINK_DEPS}") + if(NOT " ${OPENCV_MODULE_${m}_LINK_DEPS}" STREQUAL " ") + list(APPEND link_deps ${OPENCV_MODULE_${m}_LINK_DEPS}) + endif() endforeach() ocv_glob_module_sources(${headers_list} ${sources_list}) From a5d16f09e659229d3e7e907397cdcaf4bf05909a Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Wed, 18 Jan 2017 17:14:55 +0300 Subject: [PATCH 39/54] cmake world: allow to build python bindings --- cmake/OpenCVModule.cmake | 7 +++++-- modules/python/CMakeLists.txt | 26 ++++++++++++++++++-------- 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/cmake/OpenCVModule.cmake b/cmake/OpenCVModule.cmake index a0e859232e..6e6fe16c32 100644 --- a/cmake/OpenCVModule.cmake +++ b/cmake/OpenCVModule.cmake @@ -233,7 +233,7 @@ macro(ocv_add_module _name) endmacro() # excludes module from current configuration -macro(ocv_module_disable module) +macro(ocv_module_disable_ module) set(__modname ${module}) if(NOT __modname MATCHES "^opencv_") set(__modname opencv_${module}) @@ -246,9 +246,12 @@ macro(ocv_module_disable module) # touch variable controlling build of the module to suppress "unused variable" CMake warning endif() unset(__modname) - return() # leave the current folder endmacro() +macro(ocv_module_disable module) + ocv_module_disable_(${module}) + return() # leave the current folder +endmacro() # collect modules from specified directories # NB: must be called only once! diff --git a/modules/python/CMakeLists.txt b/modules/python/CMakeLists.txt index 1da5e329d6..d85a516791 100644 --- a/modules/python/CMakeLists.txt +++ b/modules/python/CMakeLists.txt @@ -2,16 +2,26 @@ # CMake file for python support # ---------------------------------------------------------------------------- -if((WIN32 AND CMAKE_BUILD_TYPE STREQUAL "Debug") - OR BUILD_opencv_world - ) - ocv_module_disable(python2) - ocv_module_disable(python3) +if(ANDROID OR APPLE_FRAMEWORK OR WINRT) + set(__disable_python2 ON) + set(__disable_python3 ON) +elseif(BUILD_opencv_world OR (WIN32 AND CMAKE_BUILD_TYPE STREQUAL "Debug")) + if(NOT DEFINED BUILD_opencv_python2) + set(__disable_python2 ON) + endif() + if(NOT DEFINED BUILD_opencv_python3) + set(__disable_python3 ON) + endif() endif() -if(ANDROID OR APPLE_FRAMEWORK OR WINRT) - ocv_module_disable(python2) - ocv_module_disable(python3) +if(__disable_python2) + ocv_module_disable_(python2) +endif() +if(__disable_python3) + ocv_module_disable_(python3) +endif() +if(__disable_python2 AND __disable_python3) + return() endif() add_subdirectory(python2) From f1adc32765b84ca7fe85910da0c822a72efc681d Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Wed, 18 Jan 2017 18:37:52 +0300 Subject: [PATCH 40/54] cmake: fix support of duplicated file names in static libraries --- cmake/OpenCVDetectCXXCompiler.cmake | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/cmake/OpenCVDetectCXXCompiler.cmake b/cmake/OpenCVDetectCXXCompiler.cmake index 8ecf4d82bd..e7dac80275 100644 --- a/cmake/OpenCVDetectCXXCompiler.cmake +++ b/cmake/OpenCVDetectCXXCompiler.cmake @@ -172,3 +172,13 @@ elseif(MINGW) set(OpenCV_ARCH x86) endif() endif() + +# Fix handling of duplicated files in the same static library: +# https://public.kitware.com/Bug/view.php?id=14874 +if(CMAKE_VERSION VERSION_LESS "3.1") + foreach(var CMAKE_C_ARCHIVE_APPEND CMAKE_CXX_ARCHIVE_APPEND) + if(${var} MATCHES "^ r") + string(REPLACE " r" " q" ${var} "${${var}}") + endif() + endforeach() +endif() From 68e50661a2f0000eba8489e40086b5e2cfbb3fbd Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Wed, 18 Jan 2017 18:47:34 +0300 Subject: [PATCH 41/54] cmake: fix CUDA flags generation VTK uses parentheses in defines, so generated code is wrong: set(nvcc_flags -m64;-D__OPENCV_BUILD=1;-DvtkRenderingContext2D_AUTOINIT=1(vtkRenderingContextOpenGL);...) --- cmake/FindCUDA/run_nvcc.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/FindCUDA/run_nvcc.cmake b/cmake/FindCUDA/run_nvcc.cmake index abdd3079e1..8d1ceb1663 100644 --- a/cmake/FindCUDA/run_nvcc.cmake +++ b/cmake/FindCUDA/run_nvcc.cmake @@ -72,7 +72,7 @@ set(generated_cubin_file_internal "@generated_cubin_file@") # path set(CUDA_NVCC_EXECUTABLE "@CUDA_NVCC_EXECUTABLE@") # path set(CUDA_NVCC_FLAGS @CUDA_NVCC_FLAGS@ ;; @CUDA_WRAP_OPTION_NVCC_FLAGS@) # list @CUDA_NVCC_FLAGS_CONFIG@ -set(nvcc_flags @nvcc_flags@) # list +set(nvcc_flags "@nvcc_flags@") # list set(CUDA_NVCC_INCLUDE_ARGS "@CUDA_NVCC_INCLUDE_ARGS@") # list (needs to be in quotes to handle spaces properly). set(format_flag "@format_flag@") # string From 4b7c0b9c76cf201172ab66cf77f9cdbf6fb9c586 Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Thu, 19 Jan 2017 16:56:06 +0300 Subject: [PATCH 42/54] cuda: fix samples --- samples/gpu/CMakeLists.txt | 12 ++---------- samples/gpu/performance/CMakeLists.txt | 4 ++-- 2 files changed, 4 insertions(+), 12 deletions(-) diff --git a/samples/gpu/CMakeLists.txt b/samples/gpu/CMakeLists.txt index 8c97ea865a..0f734677be 100644 --- a/samples/gpu/CMakeLists.txt +++ b/samples/gpu/CMakeLists.txt @@ -14,27 +14,19 @@ if(BUILD_EXAMPLES AND OCV_DEPENDENCIES_FOUND) project("${project}_samples") ocv_include_modules_recurse(${OPENCV_CUDA_SAMPLES_REQUIRED_DEPS}) - ocv_include_directories( - "${OpenCV_SOURCE_DIR}/modules/gpu/src/nvidia" - "${OpenCV_SOURCE_DIR}/modules/gpu/src/nvidia/core" - ) if(HAVE_opencv_xfeatures2d) - ocv_include_directories("${OpenCV_SOURCE_DIR}/modules/xfeatures2d/include") + ocv_include_modules_recurse(opencv_xfeatures2d) endif() if(HAVE_opencv_cudacodec) - ocv_include_directories("${OpenCV_SOURCE_DIR}/modules/cudacodec/include") + ocv_include_modules_recurse(opencv_cudacodec) endif() if(HAVE_CUDA) ocv_include_directories(${CUDA_INCLUDE_DIRS}) endif() - if(HAVE_OPENCL) - ocv_include_directories("${OpenCV_SOURCE_DIR}/modules/ocl/include") - endif() - if(CMAKE_COMPILER_IS_GNUCXX AND NOT ENABLE_NOISY_WARNINGS) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-function") endif() diff --git a/samples/gpu/performance/CMakeLists.txt b/samples/gpu/performance/CMakeLists.txt index 9c9fb5b676..2b1bf0be6b 100644 --- a/samples/gpu/performance/CMakeLists.txt +++ b/samples/gpu/performance/CMakeLists.txt @@ -4,11 +4,11 @@ file(GLOB sources "performance/*.cpp") file(GLOB headers "performance/*.h") if(HAVE_opencv_xfeatures2d) - ocv_include_directories("${opencv_xfeatures2d_SOURCE_DIR}/include") + ocv_include_modules_recurse(opencv_xfeatures2d) endif() if(HAVE_opencv_bgsegm) - ocv_include_directories("${opencv_bgsegm_SOURCE_DIR}/include") + ocv_include_modules_recurse(opencv_bgsegm) endif() add_executable(${the_target} ${sources} ${headers}) From a50efda49d8ecff53c7c17e59025e175f8edc261 Mon Sep 17 00:00:00 2001 From: Dal Rupnik Date: Mon, 23 Jan 2017 17:15:17 +0100 Subject: [PATCH 43/54] Added export functions for ObjC classes --- modules/videoio/include/opencv2/videoio/cap_ios.h | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/modules/videoio/include/opencv2/videoio/cap_ios.h b/modules/videoio/include/opencv2/videoio/cap_ios.h index c90ad2e73e..93c8a0cbea 100644 --- a/modules/videoio/include/opencv2/videoio/cap_ios.h +++ b/modules/videoio/include/opencv2/videoio/cap_ios.h @@ -32,6 +32,8 @@ #import #include "opencv2/core.hpp" +#define OPENCV_OBJC_EXPORT __attribute__((visibility("default"))) + //! @addtogroup videoio_ios //! @{ @@ -39,7 +41,7 @@ @class CvAbstractCamera; -@interface CvAbstractCamera : NSObject +OPENCV_OBJC_EXPORT @interface CvAbstractCamera : NSObject { UIDeviceOrientation currentDeviceOrientation; @@ -87,7 +89,7 @@ @class CvVideoCamera; -@protocol CvVideoCameraDelegate +OPENCV_OBJC_EXPORT @protocol CvVideoCameraDelegate #ifdef __cplusplus // delegate method for processing image frames @@ -96,7 +98,7 @@ @end -@interface CvVideoCamera : CvAbstractCamera +OPENCV_OBJC_EXPORT @interface CvVideoCamera : CvAbstractCamera { AVCaptureVideoDataOutput *videoDataOutput; @@ -129,14 +131,14 @@ @class CvPhotoCamera; -@protocol CvPhotoCameraDelegate +OPENCV_OBJC_EXPORT @protocol CvPhotoCameraDelegate - (void)photoCamera:(CvPhotoCamera*)photoCamera capturedImage:(UIImage *)image; - (void)photoCameraCancel:(CvPhotoCamera*)photoCamera; @end -@interface CvPhotoCamera : CvAbstractCamera +OPENCV_OBJC_EXPORT @interface CvPhotoCamera : CvAbstractCamera { AVCaptureStillImageOutput *stillImageOutput; } From b34ebc8cfef7582167fc116ff8726c7ce7e1fb73 Mon Sep 17 00:00:00 2001 From: Tomoaki Teshima Date: Tue, 24 Jan 2017 18:25:22 +0900 Subject: [PATCH 44/54] use universal intrinsic in stereo matching - check SIMD availability before executing --- modules/calib3d/src/stereobm.cpp | 534 +++++++++++++++---------------- 1 file changed, 265 insertions(+), 269 deletions(-) diff --git a/modules/calib3d/src/stereobm.cpp b/modules/calib3d/src/stereobm.cpp index cd861310b9..eb075d8c73 100644 --- a/modules/calib3d/src/stereobm.cpp +++ b/modules/calib3d/src/stereobm.cpp @@ -49,6 +49,7 @@ #include #include #include "opencl_kernels_calib3d.hpp" +#include "opencv2/core/hal/intrin.hpp" namespace cv { @@ -203,8 +204,8 @@ prefilterXSobel( const Mat& src, Mat& dst, int ftzero ) tab[x] = (uchar)(x - OFS < -ftzero ? 0 : x - OFS > ftzero ? ftzero*2 : x - OFS + ftzero); uchar val0 = tab[0 + OFS]; -#if CV_SSE2 - volatile bool useSIMD = checkHardwareSupport(CV_CPU_SSE2); +#if CV_SIMD128 + bool useSIMD = hasSIMD128(); #endif for( y = 0; y < size.height-1; y += 2 ) @@ -219,71 +220,34 @@ prefilterXSobel( const Mat& src, Mat& dst, int ftzero ) dptr0[0] = dptr0[size.width-1] = dptr1[0] = dptr1[size.width-1] = val0; x = 1; -#if CV_NEON - int16x8_t ftz = vdupq_n_s16 ((short) ftzero); - uint8x8_t ftz2 = vdup_n_u8 (cv::saturate_cast(ftzero*2)); - - for(; x <=size.width-9; x += 8 ) - { - uint8x8_t c0 = vld1_u8 (srow0 + x - 1); - uint8x8_t c1 = vld1_u8 (srow1 + x - 1); - uint8x8_t d0 = vld1_u8 (srow0 + x + 1); - uint8x8_t d1 = vld1_u8 (srow1 + x + 1); - - int16x8_t t0 = vreinterpretq_s16_u16 (vsubl_u8 (d0, c0)); - int16x8_t t1 = vreinterpretq_s16_u16 (vsubl_u8 (d1, c1)); - - uint8x8_t c2 = vld1_u8 (srow2 + x - 1); - uint8x8_t c3 = vld1_u8 (srow3 + x - 1); - uint8x8_t d2 = vld1_u8 (srow2 + x + 1); - uint8x8_t d3 = vld1_u8 (srow3 + x + 1); - - int16x8_t t2 = vreinterpretq_s16_u16 (vsubl_u8 (d2, c2)); - int16x8_t t3 = vreinterpretq_s16_u16 (vsubl_u8 (d3, c3)); - - int16x8_t v0 = vaddq_s16 (vaddq_s16 (t2, t0), vaddq_s16 (t1, t1)); - int16x8_t v1 = vaddq_s16 (vaddq_s16 (t3, t1), vaddq_s16 (t2, t2)); - - - uint8x8_t v0_u8 = vqmovun_s16 (vaddq_s16 (v0, ftz)); - uint8x8_t v1_u8 = vqmovun_s16 (vaddq_s16 (v1, ftz)); - v0_u8 = vmin_u8 (v0_u8, ftz2); - v1_u8 = vmin_u8 (v1_u8, ftz2); - vqmovun_s16 (vaddq_s16 (v1, ftz)); - - vst1_u8 (dptr0 + x, v0_u8); - vst1_u8 (dptr1 + x, v1_u8); - } -#elif CV_SSE2 +#if CV_SIMD128 if( useSIMD ) { - __m128i z = _mm_setzero_si128(), ftz = _mm_set1_epi16((short)ftzero), - ftz2 = _mm_set1_epi8(cv::saturate_cast(ftzero*2)); - for( ; x <= size.width-9; x += 8 ) + v_int16x8 ftz = v_setall_s16((short) ftzero); + v_int16x8 ftz2 = v_setall_s16((short)(ftzero*2)); + v_int16x8 z = v_setzero_s16(); + + for(; x <= size.width-8; x += 8 ) { - __m128i c0 = _mm_unpacklo_epi8(_mm_loadl_epi64((__m128i*)(srow0 + x - 1)), z); - __m128i c1 = _mm_unpacklo_epi8(_mm_loadl_epi64((__m128i*)(srow1 + x - 1)), z); - __m128i d0 = _mm_unpacklo_epi8(_mm_loadl_epi64((__m128i*)(srow0 + x + 1)), z); - __m128i d1 = _mm_unpacklo_epi8(_mm_loadl_epi64((__m128i*)(srow1 + x + 1)), z); + v_int16x8 s00 = v_reinterpret_as_s16(v_load_expand(srow0 + x + 1)); + v_int16x8 s01 = v_reinterpret_as_s16(v_load_expand(srow0 + x - 1)); + v_int16x8 s10 = v_reinterpret_as_s16(v_load_expand(srow1 + x + 1)); + v_int16x8 s11 = v_reinterpret_as_s16(v_load_expand(srow1 + x - 1)); + v_int16x8 s20 = v_reinterpret_as_s16(v_load_expand(srow2 + x + 1)); + v_int16x8 s21 = v_reinterpret_as_s16(v_load_expand(srow2 + x - 1)); + v_int16x8 s30 = v_reinterpret_as_s16(v_load_expand(srow3 + x + 1)); + v_int16x8 s31 = v_reinterpret_as_s16(v_load_expand(srow3 + x - 1)); - d0 = _mm_sub_epi16(d0, c0); - d1 = _mm_sub_epi16(d1, c1); + v_int16x8 d0 = s00 - s01; + v_int16x8 d1 = s10 - s11; + v_int16x8 d2 = s20 - s21; + v_int16x8 d3 = s30 - s31; - __m128i c2 = _mm_unpacklo_epi8(_mm_loadl_epi64((__m128i*)(srow2 + x - 1)), z); - __m128i c3 = _mm_unpacklo_epi8(_mm_loadl_epi64((__m128i*)(srow3 + x - 1)), z); - __m128i d2 = _mm_unpacklo_epi8(_mm_loadl_epi64((__m128i*)(srow2 + x + 1)), z); - __m128i d3 = _mm_unpacklo_epi8(_mm_loadl_epi64((__m128i*)(srow3 + x + 1)), z); + v_uint16x8 v0 = v_reinterpret_as_u16(v_max(v_min(d0 + d1 + d1 + d2 + ftz, ftz2), z)); + v_uint16x8 v1 = v_reinterpret_as_u16(v_max(v_min(d1 + d2 + d2 + d3 + ftz, ftz2), z)); - d2 = _mm_sub_epi16(d2, c2); - d3 = _mm_sub_epi16(d3, c3); - - __m128i v0 = _mm_add_epi16(d0, _mm_add_epi16(d2, _mm_add_epi16(d1, d1))); - __m128i v1 = _mm_add_epi16(d1, _mm_add_epi16(d3, _mm_add_epi16(d2, d2))); - v0 = _mm_packus_epi16(_mm_add_epi16(v0, ftz), _mm_add_epi16(v1, ftz)); - v0 = _mm_min_epu8(v0, ftz2); - - _mm_storel_epi64((__m128i*)(dptr0 + x), v0); - _mm_storel_epi64((__m128i*)(dptr1 + x), _mm_unpackhi_epi64(v0, v0)); + v_pack_store(dptr0 + x, v0); + v_pack_store(dptr1 + x, v1); } } #endif @@ -299,18 +263,18 @@ prefilterXSobel( const Mat& src, Mat& dst, int ftzero ) } } -#if CV_NEON - uint8x16_t val0_16 = vdupq_n_u8 (val0); -#endif - for( ; y < size.height; y++ ) { uchar* dptr = dst.ptr(y); x = 0; - #if CV_NEON - for(; x <= size.width-16; x+=16 ) - vst1q_u8 (dptr + x, val0_16); - #endif +#if CV_SIMD128 + if( useSIMD ) + { + v_uint8x16 val0_16 = v_setall_u8(val0); + for(; x <= size.width-16; x+=16 ) + v_store(dptr + x, val0_16); + } +#endif for(; x < size.width; x++ ) dptr[x] = val0; } @@ -320,8 +284,8 @@ prefilterXSobel( const Mat& src, Mat& dst, int ftzero ) static const int DISPARITY_SHIFT_16S = 4; static const int DISPARITY_SHIFT_32S = 8; -#if CV_SSE2 -static void findStereoCorrespondenceBM_SSE2( const Mat& left, const Mat& right, +#if CV_SIMD128 +static void findStereoCorrespondenceBM_SIMD( const Mat& left, const Mat& right, Mat& disp, Mat& cost, StereoBMParams& state, uchar* buf, int _dy0, int _dy1 ) { @@ -354,7 +318,7 @@ static void findStereoCorrespondenceBM_SSE2( const Mat& left, const Mat& right, int coststep = cost.data ? (int)(cost.step/sizeof(costbuf)) : 0; const int TABSZ = 256; uchar tab[TABSZ]; - const __m128i d0_8 = _mm_setr_epi16(0,1,2,3,4,5,6,7), dd_8 = _mm_set1_epi16(8); + const v_int16x8 d0_8 = v_int16x8(0,1,2,3,4,5,6,7), dd_8 = v_setall_s16(8); sad = (ushort*)alignPtr(buf + sizeof(sad[0]), ALIGN); hsad0 = (ushort*)alignPtr(sad + ndisp + 1 + dy0*ndisp, ALIGN); @@ -377,18 +341,20 @@ static void findStereoCorrespondenceBM_SSE2( const Mat& left, const Mat& right, for( y = -dy0; y < height + dy1; y++, hsad += ndisp, cbuf += ndisp, lptr += sstep, rptr += sstep ) { int lval = lptr[0]; - __m128i lv = _mm_set1_epi8((char)lval), z = _mm_setzero_si128(); + v_uint8x16 lv = v_setall_u8((uchar)lval); for( d = 0; d < ndisp; d += 16 ) { - __m128i rv = _mm_loadu_si128((const __m128i*)(rptr + d)); - __m128i hsad_l = _mm_load_si128((__m128i*)(hsad + d)); - __m128i hsad_h = _mm_load_si128((__m128i*)(hsad + d + 8)); - __m128i diff = _mm_adds_epu8(_mm_subs_epu8(lv, rv), _mm_subs_epu8(rv, lv)); - _mm_store_si128((__m128i*)(cbuf + d), diff); - hsad_l = _mm_add_epi16(hsad_l, _mm_unpacklo_epi8(diff,z)); - hsad_h = _mm_add_epi16(hsad_h, _mm_unpackhi_epi8(diff,z)); - _mm_store_si128((__m128i*)(hsad + d), hsad_l); - _mm_store_si128((__m128i*)(hsad + d + 8), hsad_h); + v_uint8x16 rv = v_load(rptr + d); + v_uint16x8 hsad_l = v_load(hsad + d); + v_uint16x8 hsad_h = v_load(hsad + d + 8); + v_uint8x16 diff = v_absdiff(lv, rv); + v_store(cbuf + d, diff); + v_uint16x8 diff0, diff1; + v_expand(diff, diff0, diff1); + hsad_l += diff0; + hsad_h += diff1; + v_store(hsad + d, hsad_l); + v_store(hsad + d + 8, hsad_h); } htext[y] += tab[lval]; } @@ -419,21 +385,24 @@ static void findStereoCorrespondenceBM_SSE2( const Mat& left, const Mat& right, hsad += ndisp, lptr += sstep, lptr_sub += sstep, rptr += sstep ) { int lval = lptr[0]; - __m128i lv = _mm_set1_epi8((char)lval), z = _mm_setzero_si128(); + v_uint8x16 lv = v_setall_u8((uchar)lval); for( d = 0; d < ndisp; d += 16 ) { - __m128i rv = _mm_loadu_si128((const __m128i*)(rptr + d)); - __m128i hsad_l = _mm_load_si128((__m128i*)(hsad + d)); - __m128i hsad_h = _mm_load_si128((__m128i*)(hsad + d + 8)); - __m128i cbs = _mm_load_si128((const __m128i*)(cbuf_sub + d)); - __m128i diff = _mm_adds_epu8(_mm_subs_epu8(lv, rv), _mm_subs_epu8(rv, lv)); - __m128i diff_h = _mm_sub_epi16(_mm_unpackhi_epi8(diff, z), _mm_unpackhi_epi8(cbs, z)); - _mm_store_si128((__m128i*)(cbuf + d), diff); - diff = _mm_sub_epi16(_mm_unpacklo_epi8(diff, z), _mm_unpacklo_epi8(cbs, z)); - hsad_h = _mm_add_epi16(hsad_h, diff_h); - hsad_l = _mm_add_epi16(hsad_l, diff); - _mm_store_si128((__m128i*)(hsad + d), hsad_l); - _mm_store_si128((__m128i*)(hsad + d + 8), hsad_h); + v_uint8x16 rv = v_load(rptr + d); + v_uint16x8 hsad_l = v_load(hsad + d); + v_uint16x8 hsad_h = v_load(hsad + d + 8); + v_uint8x16 cbs = v_load(cbuf_sub + d); + v_uint8x16 diff = v_absdiff(lv, rv); + v_int16x8 diff_l, diff_h, cbs_l, cbs_h; + v_store(cbuf + d, diff); + v_expand(v_reinterpret_as_s8(diff), diff_l, diff_h); + v_expand(v_reinterpret_as_s8(cbs), cbs_l, cbs_h); + diff_l -= cbs_l; + diff_h -= cbs_h; + hsad_h = v_reinterpret_as_u16(v_reinterpret_as_s16(hsad_h) + diff_h); + hsad_l = v_reinterpret_as_u16(v_reinterpret_as_s16(hsad_l) + diff_l); + v_store(hsad + d, hsad_l); + v_store(hsad + d + 8, hsad_h); } htext[y] += tab[lval] - tab[lptr_sub[0]]; } @@ -450,16 +419,16 @@ static void findStereoCorrespondenceBM_SSE2( const Mat& left, const Mat& right, hsad = hsad0 + (1 - dy0)*ndisp; for( y = 1 - dy0; y < wsz2; y++, hsad += ndisp ) - for( d = 0; d < ndisp; d += 16 ) + for( d = 0; d <= ndisp-16; d += 16 ) { - __m128i s0 = _mm_load_si128((__m128i*)(sad + d)); - __m128i s1 = _mm_load_si128((__m128i*)(sad + d + 8)); - __m128i t0 = _mm_load_si128((__m128i*)(hsad + d)); - __m128i t1 = _mm_load_si128((__m128i*)(hsad + d + 8)); - s0 = _mm_add_epi16(s0, t0); - s1 = _mm_add_epi16(s1, t1); - _mm_store_si128((__m128i*)(sad + d), s0); - _mm_store_si128((__m128i*)(sad + d + 8), s1); + v_uint16x8 s0 = v_load(sad + d); + v_uint16x8 s1 = v_load(sad + d + 8); + v_uint16x8 t0 = v_load(hsad + d); + v_uint16x8 t1 = v_load(hsad + d + 8); + s0 = s0 + t0; + s1 = s1 + t1; + v_store(sad + d, s0); + v_store(sad + d + 8, s1); } int tsum = 0; for( y = -wsz2-1; y < wsz2; y++ ) @@ -471,38 +440,38 @@ static void findStereoCorrespondenceBM_SSE2( const Mat& left, const Mat& right, int minsad = INT_MAX, mind = -1; hsad = hsad0 + MIN(y + wsz2, height+dy1-1)*ndisp; hsad_sub = hsad0 + MAX(y - wsz2 - 1, -dy0)*ndisp; - __m128i minsad8 = _mm_set1_epi16(SHRT_MAX); - __m128i mind8 = _mm_set1_epi16(0), d8 = d0_8, mask; + v_int16x8 minsad8 = v_setall_s16(SHRT_MAX); + v_int16x8 mind8 = v_setall_s16(0), d8 = d0_8; for( d = 0; d < ndisp; d += 16 ) { - __m128i u0 = _mm_load_si128((__m128i*)(hsad_sub + d)); - __m128i u1 = _mm_load_si128((__m128i*)(hsad + d)); + v_int16x8 u0 = v_reinterpret_as_s16(v_load(hsad_sub + d)); + v_int16x8 u1 = v_reinterpret_as_s16(v_load(hsad + d)); - __m128i v0 = _mm_load_si128((__m128i*)(hsad_sub + d + 8)); - __m128i v1 = _mm_load_si128((__m128i*)(hsad + d + 8)); + v_int16x8 v0 = v_reinterpret_as_s16(v_load(hsad_sub + d + 8)); + v_int16x8 v1 = v_reinterpret_as_s16(v_load(hsad + d + 8)); - __m128i usad8 = _mm_load_si128((__m128i*)(sad + d)); - __m128i vsad8 = _mm_load_si128((__m128i*)(sad + d + 8)); + v_int16x8 usad8 = v_reinterpret_as_s16(v_load(sad + d)); + v_int16x8 vsad8 = v_reinterpret_as_s16(v_load(sad + d + 8)); - u1 = _mm_sub_epi16(u1, u0); - v1 = _mm_sub_epi16(v1, v0); - usad8 = _mm_add_epi16(usad8, u1); - vsad8 = _mm_add_epi16(vsad8, v1); + u1 -= u0; + v1 -= v0; + usad8 += u1; + vsad8 += v1; - mask = _mm_cmpgt_epi16(minsad8, usad8); - minsad8 = _mm_min_epi16(minsad8, usad8); - mind8 = _mm_max_epi16(mind8, _mm_and_si128(mask, d8)); + v_int16x8 mask = minsad8 > usad8; + minsad8 = v_min(minsad8, usad8); + mind8 = v_max(mind8, (mask& d8)); - _mm_store_si128((__m128i*)(sad + d), usad8); - _mm_store_si128((__m128i*)(sad + d + 8), vsad8); + v_store(sad + d, v_reinterpret_as_u16(usad8)); + v_store(sad + d + 8, v_reinterpret_as_u16(vsad8)); - mask = _mm_cmpgt_epi16(minsad8, vsad8); - minsad8 = _mm_min_epi16(minsad8, vsad8); + mask = minsad8 > vsad8; + minsad8 = v_min(minsad8, vsad8); - d8 = _mm_add_epi16(d8, dd_8); - mind8 = _mm_max_epi16(mind8, _mm_and_si128(mask, d8)); - d8 = _mm_add_epi16(d8, dd_8); + d8 = d8 + dd_8; + mind8 = v_max(mind8, (mask & d8)); + d8 = d8 + dd_8; } tsum += htext[y + wsz2] - htext[y - wsz2 - 1]; @@ -513,8 +482,8 @@ static void findStereoCorrespondenceBM_SSE2( const Mat& left, const Mat& right, } ushort CV_DECL_ALIGNED(16) minsad_buf[8], mind_buf[8]; - _mm_store_si128((__m128i*)minsad_buf, minsad8); - _mm_store_si128((__m128i*)mind_buf, mind8); + v_store(minsad_buf, v_reinterpret_as_u16(minsad8)); + v_store(mind_buf, v_reinterpret_as_u16(mind8)); for( d = 0; d < 8; d++ ) if(minsad > (int)minsad_buf[d] || (minsad == (int)minsad_buf[d] && mind > mind_buf[d])) { @@ -525,27 +494,27 @@ static void findStereoCorrespondenceBM_SSE2( const Mat& left, const Mat& right, if( uniquenessRatio > 0 ) { int thresh = minsad + (minsad * uniquenessRatio/100); - __m128i thresh4 = _mm_set1_epi32(thresh + 1); - __m128i d1 = _mm_set1_epi32(mind-1), d2 = _mm_set1_epi32(mind+1); - __m128i dd_4 = _mm_set1_epi32(4); - __m128i d4 = _mm_set_epi32(3,2,1,0); - __m128i z = _mm_setzero_si128(); + v_int32x4 thresh4 = v_setall_s32(thresh + 1); + v_int32x4 d1 = v_setall_s32(mind-1), d2 = v_setall_s32(mind+1); + v_int32x4 dd_4 = v_setall_s32(4); + v_int32x4 d4 = v_int32x4(0,1,2,3); + v_int32x4 mask4; for( d = 0; d < ndisp; d += 8 ) { - __m128i usad4 = _mm_loadu_si128((__m128i*)(sad + d)); - __m128i vsad4 = _mm_unpackhi_epi16(usad4, z); - usad4 = _mm_unpacklo_epi16(usad4, z); - mask = _mm_cmpgt_epi32( thresh4, usad4); - mask = _mm_and_si128(mask, _mm_or_si128(_mm_cmpgt_epi32(d1,d4), _mm_cmpgt_epi32(d4,d2))); - if( _mm_movemask_epi8(mask) ) + v_int16x8 sad8 = v_reinterpret_as_s16(v_load(sad + d)); + v_int32x4 sad4_l, sad4_h; + v_expand(sad8, sad4_l, sad4_h); + mask4 = thresh4 > sad4_l; + mask4 = mask4 & ((d1 > d4) | (d4 > d2)); + if( v_signmask(mask4) ) break; - d4 = _mm_add_epi16(d4, dd_4); - mask = _mm_cmpgt_epi32( thresh4, vsad4); - mask = _mm_and_si128(mask, _mm_or_si128(_mm_cmpgt_epi32(d1,d4), _mm_cmpgt_epi32(d4,d2))); - if( _mm_movemask_epi8(mask) ) + d4 += dd_4; + mask4 = thresh4 > sad4_h; + mask4 = mask4 & ((d1 > d4) | (d4 > d2)); + if( v_signmask(mask4) ) break; - d4 = _mm_add_epi16(d4, dd_4); + d4 += dd_4; } if( d < ndisp ) { @@ -570,7 +539,7 @@ static void findStereoCorrespondenceBM_SSE2( const Mat& left, const Mat& right, template static void -findStereoCorrespondenceBM_( const Mat& left, const Mat& right, +findStereoCorrespondenceBM( const Mat& left, const Mat& right, Mat& disp, Mat& cost, const StereoBMParams& state, uchar* buf, int _dy0, int _dy1, const int disp_shift ) { @@ -590,13 +559,12 @@ findStereoCorrespondenceBM_( const Mat& left, const Mat& right, int uniquenessRatio = state.uniquenessRatio; mType FILTERED = (mType)((mindisp - 1) << disp_shift); -#if CV_NEON - CV_Assert (ndisp % 8 == 0); - int32_t d0_4_temp [4]; - for (int i = 0; i < 4; i ++) - d0_4_temp[i] = i; - int32x4_t d0_4 = vld1q_s32 (d0_4_temp); - int32x4_t dd_4 = vdupq_n_s32 (4); +#if CV_SIMD128 + bool useSIMD = hasSIMD128(); + if( useSIMD ) + { + CV_Assert (ndisp % 8 == 0); + } #endif int *sad, *hsad0, *hsad, *hsad_sub, *htext; @@ -633,29 +601,46 @@ findStereoCorrespondenceBM_( const Mat& left, const Mat& right, for( y = -dy0; y < height + dy1; y++, hsad += ndisp, cbuf += ndisp, lptr += sstep, rptr += sstep ) { int lval = lptr[0]; - #if CV_NEON - int16x8_t lv = vdupq_n_s16 ((int16_t)lval); - - for( d = 0; d < ndisp; d += 8 ) + d = 0; +#if CV_SIMD128 + if( useSIMD ) { - int16x8_t rv = vreinterpretq_s16_u16 (vmovl_u8 (vld1_u8 (rptr + d))); - int32x4_t hsad_l = vld1q_s32 (hsad + d); - int32x4_t hsad_h = vld1q_s32 (hsad + d + 4); - int16x8_t diff = vabdq_s16 (lv, rv); - vst1_u8 (cbuf + d, vmovn_u16(vreinterpretq_u16_s16(diff))); - hsad_l = vaddq_s32 (hsad_l, vmovl_s16(vget_low_s16 (diff))); - hsad_h = vaddq_s32 (hsad_h, vmovl_s16(vget_high_s16 (diff))); - vst1q_s32 ((hsad + d), hsad_l); - vst1q_s32 ((hsad + d + 4), hsad_h); + v_uint8x16 lv = v_setall_u8((uchar)lval); + + for( ; d <= ndisp - 16; d += 16 ) + { + v_uint8x16 rv = v_load(rptr + d); + v_int32x4 hsad_0 = v_load(hsad + d); + v_int32x4 hsad_1 = v_load(hsad + d + 4); + v_int32x4 hsad_2 = v_load(hsad + d + 8); + v_int32x4 hsad_3 = v_load(hsad + d + 12); + v_uint8x16 diff = v_absdiff(lv, rv); + v_store(cbuf + d, diff); + + v_uint16x8 diff0, diff1; + v_uint32x4 diff00, diff01, diff10, diff11; + v_expand(diff, diff0, diff1); + v_expand(diff0, diff00, diff01); + v_expand(diff1, diff10, diff11); + + hsad_0 += v_reinterpret_as_s32(diff00); + hsad_1 += v_reinterpret_as_s32(diff01); + hsad_2 += v_reinterpret_as_s32(diff10); + hsad_3 += v_reinterpret_as_s32(diff11); + + v_store(hsad + d, hsad_0); + v_store(hsad + d + 4, hsad_1); + v_store(hsad + d + 8, hsad_2); + v_store(hsad + d + 12, hsad_3); + } } - #else - for( d = 0; d < ndisp; d++ ) +#endif + for( ; d < ndisp; d++ ) { int diff = std::abs(lval - rptr[d]); cbuf[d] = (uchar)diff; hsad[d] = (int)(hsad[d] + diff); } - #endif htext[y] += tab[lval]; } } @@ -685,31 +670,53 @@ findStereoCorrespondenceBM_( const Mat& left, const Mat& right, hsad += ndisp, lptr += sstep, lptr_sub += sstep, rptr += sstep ) { int lval = lptr[0]; - #if CV_NEON - int16x8_t lv = vdupq_n_s16 ((int16_t)lval); - for( d = 0; d < ndisp; d += 8 ) + d = 0; +#if CV_SIMD128 + if( useSIMD ) { - int16x8_t rv = vreinterpretq_s16_u16 (vmovl_u8 (vld1_u8 (rptr + d))); - int32x4_t hsad_l = vld1q_s32 (hsad + d); - int32x4_t hsad_h = vld1q_s32 (hsad + d + 4); - int16x8_t cbs = vreinterpretq_s16_u16 (vmovl_u8 (vld1_u8 (cbuf_sub + d))); - int16x8_t diff = vabdq_s16 (lv, rv); - int32x4_t diff_h = vsubl_s16 (vget_high_s16 (diff), vget_high_s16 (cbs)); - int32x4_t diff_l = vsubl_s16 (vget_low_s16 (diff), vget_low_s16 (cbs)); - vst1_u8 (cbuf + d, vmovn_u16(vreinterpretq_u16_s16(diff))); - hsad_h = vaddq_s32 (hsad_h, diff_h); - hsad_l = vaddq_s32 (hsad_l, diff_l); - vst1q_s32 ((hsad + d), hsad_l); - vst1q_s32 ((hsad + d + 4), hsad_h); + v_uint8x16 lv = v_setall_u8((uchar)lval); + for( ; d <= ndisp - 16; d += 16 ) + { + v_uint8x16 rv = v_load(rptr + d); + v_int32x4 hsad_0 = v_load(hsad + d); + v_int32x4 hsad_1 = v_load(hsad + d + 4); + v_int32x4 hsad_2 = v_load(hsad + d + 8); + v_int32x4 hsad_3 = v_load(hsad + d + 12); + v_uint8x16 cbs = v_load(cbuf_sub + d); + v_uint8x16 diff = v_absdiff(lv, rv); + v_store(cbuf + d, diff); + + v_uint16x8 diff0, diff1, cbs0, cbs1; + v_int32x4 diff00, diff01, diff10, diff11, cbs00, cbs01, cbs10, cbs11; + v_expand(diff, diff0, diff1); + v_expand(cbs, cbs0, cbs1); + v_expand(v_reinterpret_as_s16(diff0), diff00, diff01); + v_expand(v_reinterpret_as_s16(diff1), diff10, diff11); + v_expand(v_reinterpret_as_s16(cbs0), cbs00, cbs01); + v_expand(v_reinterpret_as_s16(cbs1), cbs10, cbs11); + + v_int32x4 diff_0 = diff00 - cbs00; + v_int32x4 diff_1 = diff01 - cbs01; + v_int32x4 diff_2 = diff10 - cbs10; + v_int32x4 diff_3 = diff11 - cbs11; + hsad_0 += diff_0; + hsad_1 += diff_1; + hsad_2 += diff_2; + hsad_3 += diff_3; + + v_store(hsad + d, hsad_0); + v_store(hsad + d + 4, hsad_1); + v_store(hsad + d + 8, hsad_2); + v_store(hsad + d + 12, hsad_3); + } } - #else - for( d = 0; d < ndisp; d++ ) +#endif + for( ; d < ndisp; d++ ) { int diff = std::abs(lval - rptr[d]); cbuf[d] = (uchar)diff; hsad[d] = hsad[d] + diff - cbuf_sub[d]; } - #endif htext[y] += tab[lval] - tab[lptr_sub[0]]; } @@ -726,22 +733,25 @@ findStereoCorrespondenceBM_( const Mat& left, const Mat& right, hsad = hsad0 + (1 - dy0)*ndisp; for( y = 1 - dy0; y < wsz2; y++, hsad += ndisp ) { - #if CV_NEON - for( d = 0; d <= ndisp-8; d += 8 ) + d = 0; +#if CV_SIMD128 + if( useSIMD ) { - int32x4_t s0 = vld1q_s32 (sad + d); - int32x4_t s1 = vld1q_s32 (sad + d + 4); - int32x4_t t0 = vld1q_s32 (hsad + d); - int32x4_t t1 = vld1q_s32 (hsad + d + 4); - s0 = vaddq_s32 (s0, t0); - s1 = vaddq_s32 (s1, t1); - vst1q_s32 (sad + d, s0); - vst1q_s32 (sad + d + 4, s1); + for( d = 0; d <= ndisp-8; d += 8 ) + { + v_int32x4 s0 = v_load(sad + d); + v_int32x4 s1 = v_load(sad + d + 4); + v_int32x4 t0 = v_load(hsad + d); + v_int32x4 t1 = v_load(hsad + d + 4); + s0 += t0; + s1 += t1; + v_store(sad + d, s0); + v_store(sad + d + 4, s1); + } } - #else - for( d = 0; d < ndisp; d++ ) +#endif + for( ; d < ndisp; d++ ) sad[d] = (int)(sad[d] + hsad[d]); - #endif } int tsum = 0; for( y = -wsz2-1; y < wsz2; y++ ) @@ -753,62 +763,55 @@ findStereoCorrespondenceBM_( const Mat& left, const Mat& right, int minsad = INT_MAX, mind = -1; hsad = hsad0 + MIN(y + wsz2, height+dy1-1)*ndisp; hsad_sub = hsad0 + MAX(y - wsz2 - 1, -dy0)*ndisp; - #if CV_NEON - int32x4_t minsad4 = vdupq_n_s32 (INT_MAX); - int32x4_t mind4 = vdupq_n_s32(0), d4 = d0_4; - - for( d = 0; d <= ndisp-8; d += 8 ) + d = 0; +#if CV_SIMD128 + if( useSIMD ) { - int32x4_t u0 = vld1q_s32 (hsad_sub + d); - int32x4_t u1 = vld1q_s32 (hsad + d); + v_int32x4 d0_4 = v_int32x4(0, 1, 2, 3); + v_int32x4 dd_4 = v_setall_s32(4); + v_int32x4 minsad4 = v_setall_s32(INT_MAX); + v_int32x4 mind4 = v_setall_s32(0), d4 = d0_4; - int32x4_t v0 = vld1q_s32 (hsad_sub + d + 4); - int32x4_t v1 = vld1q_s32 (hsad + d + 4); + for( ; d <= ndisp - 8; d += 8 ) + { + v_int32x4 u0 = v_load(hsad_sub + d); + v_int32x4 u1 = v_load(hsad + d); - int32x4_t usad4 = vld1q_s32(sad + d); - int32x4_t vsad4 = vld1q_s32(sad + d + 4); + v_int32x4 v0 = v_load(hsad_sub + d + 4); + v_int32x4 v1 = v_load(hsad + d + 4); - u1 = vsubq_s32 (u1, u0); - v1 = vsubq_s32 (v1, v0); - usad4 = vaddq_s32 (usad4, u1); - vsad4 = vaddq_s32 (vsad4, v1); + v_int32x4 usad4 = v_load(sad + d); + v_int32x4 vsad4 = v_load(sad + d + 4); - uint32x4_t mask = vcgtq_s32 (minsad4, usad4); - minsad4 = vminq_s32 (minsad4, usad4); - mind4 = vbslq_s32(mask, d4, mind4); + u1 -= u0; + v1 -= v0; + usad4 += u1; + vsad4 += v1; - vst1q_s32 (sad + d, usad4); - vst1q_s32 (sad + d + 4, vsad4); - d4 = vaddq_s32 (d4, dd_4); + v_store(sad + d, usad4); + v_store(sad + d + 4, vsad4); - mask = vcgtq_s32 (minsad4, vsad4); - minsad4 = vminq_s32 (minsad4, vsad4); - mind4 = vbslq_s32(mask, d4, mind4); + v_int32x4 mask = minsad4 > usad4; + minsad4 = v_min(minsad4, usad4); + mind4 = v_select(mask, d4, mind4); + d4 += dd_4; - d4 = vaddq_s32 (d4, dd_4); + mask = minsad4 > vsad4; + minsad4 = v_min(minsad4, vsad4); + mind4 = v_select(mask, d4, mind4); + d4 += dd_4; + } + int CV_DECL_ALIGNED(16) minsad_buf[4], mind_buf[4]; + v_store(minsad_buf, minsad4); + v_store(mind_buf, mind4); + if(minsad_buf[0] < minsad || (minsad == minsad_buf[0] && mind_buf[0] < mind)) { minsad = minsad_buf[0]; mind = mind_buf[0]; } + if(minsad_buf[1] < minsad || (minsad == minsad_buf[1] && mind_buf[1] < mind)) { minsad = minsad_buf[1]; mind = mind_buf[1]; } + if(minsad_buf[2] < minsad || (minsad == minsad_buf[2] && mind_buf[2] < mind)) { minsad = minsad_buf[2]; mind = mind_buf[2]; } + if(minsad_buf[3] < minsad || (minsad == minsad_buf[3] && mind_buf[3] < mind)) { minsad = minsad_buf[3]; mind = mind_buf[3]; } } - int32x2_t mind4_h = vget_high_s32 (mind4); - int32x2_t mind4_l = vget_low_s32 (mind4); - int32x2_t minsad4_h = vget_high_s32 (minsad4); - int32x2_t minsad4_l = vget_low_s32 (minsad4); - - uint32x2_t mask = vorr_u32 (vclt_s32 (minsad4_h, minsad4_l), vand_u32 (vceq_s32 (minsad4_h, minsad4_l), vclt_s32 (mind4_h, mind4_l))); - mind4_h = vbsl_s32 (mask, mind4_h, mind4_l); - minsad4_h = vbsl_s32 (mask, minsad4_h, minsad4_l); - - mind4_l = vext_s32 (mind4_h,mind4_h,1); - minsad4_l = vext_s32 (minsad4_h,minsad4_h,1); - - mask = vorr_u32 (vclt_s32 (minsad4_h, minsad4_l), vand_u32 (vceq_s32 (minsad4_h, minsad4_l), vclt_s32 (mind4_h, mind4_l))); - mind4_h = vbsl_s32 (mask, mind4_h, mind4_l); - minsad4_h = vbsl_s32 (mask, minsad4_h, minsad4_l); - - mind = (int) vget_lane_s32 (mind4_h, 0); - minsad = sad[mind]; - - #else - for( d = 0; d < ndisp; d++ ) +#endif + for( ; d < ndisp; d++ ) { int currsad = sad[d] + hsad[d] - hsad_sub[d]; sad[d] = currsad; @@ -818,7 +821,6 @@ findStereoCorrespondenceBM_( const Mat& left, const Mat& right, mind = d; } } - #endif tsum += htext[y + wsz2] - htext[y - wsz2 - 1]; if( tsum < textureThreshold ) @@ -855,19 +857,6 @@ findStereoCorrespondenceBM_( const Mat& left, const Mat& right, } } -static void -findStereoCorrespondenceBM( const Mat& left, const Mat& right, - Mat& disp, Mat& cost, const StereoBMParams& state, - uchar* buf, int _dy0, int _dy1 ) -{ - if(disp.type() == CV_16S) - findStereoCorrespondenceBM_(left, right, disp, cost, state, - buf, _dy0, _dy1, DISPARITY_SHIFT_16S ); - else - findStereoCorrespondenceBM_(left, right, disp, cost, state, - buf, _dy0, _dy1, DISPARITY_SHIFT_32S ); -} - #ifdef HAVE_OPENCL static bool ocl_prefiltering(InputArray left0, InputArray right0, OutputArray left, OutputArray right, StereoBMParams* state) { @@ -972,6 +961,7 @@ struct FindStereoCorrespInvoker : public ParallelLoopBody bool _useShorts, Rect _validDisparityRect, Mat& _slidingSumBuf, Mat& _cost ) { + CV_Assert( _disp.type() == CV_16S || _disp.type() == CV_32S ); left = &_left; right = &_right; disp = &_disp; state = _state; nstripes = _nstripes; stripeBufSize = _stripeBufSize; @@ -979,6 +969,9 @@ struct FindStereoCorrespInvoker : public ParallelLoopBody validDisparityRect = _validDisparityRect; slidingSumBuf = &_slidingSumBuf; cost = &_cost; +#if CV_SIMD128 + useSIMD = hasSIMD128(); +#endif } void operator()( const Range& range ) const @@ -1012,12 +1005,19 @@ struct FindStereoCorrespInvoker : public ParallelLoopBody Mat disp_i = disp->rowRange(row0, row1); Mat cost_i = state->disp12MaxDiff >= 0 ? cost->rowRange(row0, row1) : Mat(); -#if CV_SSE2 - if( useShorts ) - findStereoCorrespondenceBM_SSE2( left_i, right_i, disp_i, cost_i, *state, ptr, row0, rows - row1 ); +#if CV_SIMD128 + if( useSIMD && useShorts ) + { + findStereoCorrespondenceBM_SIMD( left_i, right_i, disp_i, cost_i, *state, ptr, row0, rows - row1 ); + } else #endif - findStereoCorrespondenceBM( left_i, right_i, disp_i, cost_i, *state, ptr, row0, rows - row1 ); + { + if( disp_i.type() == CV_16S ) + findStereoCorrespondenceBM( left_i, right_i, disp_i, cost_i, *state, ptr, row0, rows - row1, DISPARITY_SHIFT_16S ); + else + findStereoCorrespondenceBM( left_i, right_i, disp_i, cost_i, *state, ptr, row0, rows - row1, DISPARITY_SHIFT_32S ); + } if( state->disp12MaxDiff >= 0 ) validateDisparity( disp_i, cost_i, state->minDisparity, state->numDisparities, state->disp12MaxDiff ); @@ -1043,6 +1043,7 @@ protected: size_t stripeBufSize; bool useShorts; Rect validDisparityRect; + bool useSIMD; }; class StereoBMImpl : public StereoBM @@ -1168,12 +1169,7 @@ public: if( params.speckleRange >= 0 && params.speckleWindowSize > 0 ) bufSize2 = width*height*(sizeof(Point_) + sizeof(int) + sizeof(uchar)); -#if CV_SSE2 - bool useShorts = params.preFilterCap <= 31 && params.SADWindowSize <= 21 && checkHardwareSupport(CV_CPU_SSE2); -#else - const bool useShorts = false; -#endif - + bool useShorts = params.preFilterCap <= 31 && params.SADWindowSize <= 21; const double SAD_overhead_coeff = 10.0; double N0 = 8000000 / (useShorts ? 1 : 4); // approx tbb's min number instructions reasonable for one thread double maxStripeSize = std::min(std::max(N0 / (width * ndisp), (wsz-1) * SAD_overhead_coeff), (double)height); From c10283b2b6d01dc477d6b9f8d264c9eb2ebad124 Mon Sep 17 00:00:00 2001 From: Dal Rupnik Date: Tue, 24 Jan 2017 10:26:19 +0100 Subject: [PATCH 45/54] Replaced macro with built-in OpenCV export --- modules/videoio/include/opencv2/videoio/cap_ios.h | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/modules/videoio/include/opencv2/videoio/cap_ios.h b/modules/videoio/include/opencv2/videoio/cap_ios.h index 93c8a0cbea..0691420cf7 100644 --- a/modules/videoio/include/opencv2/videoio/cap_ios.h +++ b/modules/videoio/include/opencv2/videoio/cap_ios.h @@ -32,8 +32,6 @@ #import #include "opencv2/core.hpp" -#define OPENCV_OBJC_EXPORT __attribute__((visibility("default"))) - //! @addtogroup videoio_ios //! @{ @@ -41,7 +39,7 @@ @class CvAbstractCamera; -OPENCV_OBJC_EXPORT @interface CvAbstractCamera : NSObject +CV_EXPORTS @interface CvAbstractCamera : NSObject { UIDeviceOrientation currentDeviceOrientation; @@ -89,7 +87,7 @@ OPENCV_OBJC_EXPORT @interface CvAbstractCamera : NSObject @class CvVideoCamera; -OPENCV_OBJC_EXPORT @protocol CvVideoCameraDelegate +CV_EXPORTS @protocol CvVideoCameraDelegate #ifdef __cplusplus // delegate method for processing image frames @@ -98,7 +96,7 @@ OPENCV_OBJC_EXPORT @protocol CvVideoCameraDelegate @end -OPENCV_OBJC_EXPORT @interface CvVideoCamera : CvAbstractCamera +CV_EXPORTS @interface CvVideoCamera : CvAbstractCamera { AVCaptureVideoDataOutput *videoDataOutput; @@ -131,14 +129,14 @@ OPENCV_OBJC_EXPORT @interface CvVideoCamera : CvAbstractCamera +CV_EXPORTS @protocol CvPhotoCameraDelegate - (void)photoCamera:(CvPhotoCamera*)photoCamera capturedImage:(UIImage *)image; - (void)photoCameraCancel:(CvPhotoCamera*)photoCamera; @end -OPENCV_OBJC_EXPORT @interface CvPhotoCamera : CvAbstractCamera +CV_EXPORTS @interface CvPhotoCamera : CvAbstractCamera { AVCaptureStillImageOutput *stillImageOutput; } From c6c519166e71f083e8d800df68e2eacb2a8b6c3b Mon Sep 17 00:00:00 2001 From: mshabunin Date: Tue, 24 Jan 2017 13:37:41 +0300 Subject: [PATCH 46/54] Added CV_DEPRECATED macro --- doc/Doxyfile.in | 2 +- modules/core/include/opencv2/core/cvdef.h | 10 +++++++ modules/flann/include/opencv2/flann.hpp | 28 +++++++++---------- modules/flann/include/opencv2/flann/defines.h | 13 --------- .../include/opencv2/flann/flann_base.hpp | 4 +-- modules/flann/include/opencv2/flann/matrix.h | 2 +- 6 files changed, 28 insertions(+), 31 deletions(-) diff --git a/doc/Doxyfile.in b/doc/Doxyfile.in index b1cb9c9744..9414b66f09 100644 --- a/doc/Doxyfile.in +++ b/doc/Doxyfile.in @@ -251,7 +251,7 @@ PREDEFINED = __cplusplus=1 \ CV_DEFAULT(x)=" = x" \ CV_NEON=1 \ CV_SSE2=1 \ - FLANN_DEPRECATED= + CV_DEPRECATED= EXPAND_AS_DEFINED = SKIP_FUNCTION_MACROS = YES TAGFILES = diff --git a/modules/core/include/opencv2/core/cvdef.h b/modules/core/include/opencv2/core/cvdef.h index 810ec56ed3..9e2b1ed7fd 100644 --- a/modules/core/include/opencv2/core/cvdef.h +++ b/modules/core/include/opencv2/core/cvdef.h @@ -369,6 +369,16 @@ Cv64suf; # define CV_EXPORTS #endif +#ifndef CV_DEPRECATED +# if defined(__GNUC__) +# define CV_DEPRECATED __attribute__ ((deprecated)) +# elif defined(_MSC_VER) +# define CV_DEPRECATED __declspec(deprecated) +# else +# define CV_DEPRECATED +# endif +#endif + #ifndef CV_EXTERN_C # ifdef __cplusplus # define CV_EXTERN_C extern "C" diff --git a/modules/flann/include/opencv2/flann.hpp b/modules/flann/include/opencv2/flann.hpp index 19a98f19e5..22c6ffcf19 100644 --- a/modules/flann/include/opencv2/flann.hpp +++ b/modules/flann/include/opencv2/flann.hpp @@ -59,7 +59,7 @@ can be found in @cite Muja2009 . namespace cvflann { CV_EXPORTS flann_distance_t flann_distance_type(); - FLANN_DEPRECATED CV_EXPORTS void set_distance_type(flann_distance_t distance_type, int order); + CV_DEPRECATED CV_EXPORTS void set_distance_type(flann_distance_t distance_type, int order); } @@ -230,7 +230,7 @@ public: ::cvflann::IndexParams getParameters() { return nnIndex->getParameters(); } - FLANN_DEPRECATED const ::cvflann::IndexParams* getIndexParameters() { return nnIndex->getIndexParameters(); } + CV_DEPRECATED const ::cvflann::IndexParams* getIndexParameters() { return nnIndex->getIndexParameters(); } private: ::cvflann::Index* nnIndex; @@ -344,7 +344,7 @@ public: typedef typename L2::ElementType ElementType; typedef typename L2::ResultType DistanceType; - FLANN_DEPRECATED Index_(const Mat& dataset, const ::cvflann::IndexParams& params) + CV_DEPRECATED Index_(const Mat& dataset, const ::cvflann::IndexParams& params) { printf("[WARNING] The cv::flann::Index_ class is deperecated, use cv::flann::GenericIndex instead\n"); @@ -368,13 +368,13 @@ public: if (nnIndex_L1) nnIndex_L1->buildIndex(); if (nnIndex_L2) nnIndex_L2->buildIndex(); } - FLANN_DEPRECATED ~Index_() + CV_DEPRECATED ~Index_() { if (nnIndex_L1) delete nnIndex_L1; if (nnIndex_L2) delete nnIndex_L2; } - FLANN_DEPRECATED void knnSearch(const std::vector& query, std::vector& indices, std::vector& dists, int knn, const ::cvflann::SearchParams& searchParams) + CV_DEPRECATED void knnSearch(const std::vector& query, std::vector& indices, std::vector& dists, int knn, const ::cvflann::SearchParams& searchParams) { ::cvflann::Matrix m_query((ElementType*)&query[0], 1, query.size()); ::cvflann::Matrix m_indices(&indices[0], 1, indices.size()); @@ -383,7 +383,7 @@ public: if (nnIndex_L1) nnIndex_L1->knnSearch(m_query,m_indices,m_dists,knn,searchParams); if (nnIndex_L2) nnIndex_L2->knnSearch(m_query,m_indices,m_dists,knn,searchParams); } - FLANN_DEPRECATED void knnSearch(const Mat& queries, Mat& indices, Mat& dists, int knn, const ::cvflann::SearchParams& searchParams) + CV_DEPRECATED void knnSearch(const Mat& queries, Mat& indices, Mat& dists, int knn, const ::cvflann::SearchParams& searchParams) { CV_Assert(queries.type() == CvType::type()); CV_Assert(queries.isContinuous()); @@ -401,7 +401,7 @@ public: if (nnIndex_L2) nnIndex_L2->knnSearch(m_queries,m_indices,m_dists,knn, searchParams); } - FLANN_DEPRECATED int radiusSearch(const std::vector& query, std::vector& indices, std::vector& dists, DistanceType radius, const ::cvflann::SearchParams& searchParams) + CV_DEPRECATED int radiusSearch(const std::vector& query, std::vector& indices, std::vector& dists, DistanceType radius, const ::cvflann::SearchParams& searchParams) { ::cvflann::Matrix m_query((ElementType*)&query[0], 1, query.size()); ::cvflann::Matrix m_indices(&indices[0], 1, indices.size()); @@ -411,7 +411,7 @@ public: if (nnIndex_L2) return nnIndex_L2->radiusSearch(m_query,m_indices,m_dists,radius,searchParams); } - FLANN_DEPRECATED int radiusSearch(const Mat& query, Mat& indices, Mat& dists, DistanceType radius, const ::cvflann::SearchParams& searchParams) + CV_DEPRECATED int radiusSearch(const Mat& query, Mat& indices, Mat& dists, DistanceType radius, const ::cvflann::SearchParams& searchParams) { CV_Assert(query.type() == CvType::type()); CV_Assert(query.isContinuous()); @@ -429,32 +429,32 @@ public: if (nnIndex_L2) return nnIndex_L2->radiusSearch(m_query,m_indices,m_dists,radius,searchParams); } - FLANN_DEPRECATED void save(String filename) + CV_DEPRECATED void save(String filename) { if (nnIndex_L1) nnIndex_L1->save(filename); if (nnIndex_L2) nnIndex_L2->save(filename); } - FLANN_DEPRECATED int veclen() const + CV_DEPRECATED int veclen() const { if (nnIndex_L1) return nnIndex_L1->veclen(); if (nnIndex_L2) return nnIndex_L2->veclen(); } - FLANN_DEPRECATED int size() const + CV_DEPRECATED int size() const { if (nnIndex_L1) return nnIndex_L1->size(); if (nnIndex_L2) return nnIndex_L2->size(); } - FLANN_DEPRECATED ::cvflann::IndexParams getParameters() + CV_DEPRECATED ::cvflann::IndexParams getParameters() { if (nnIndex_L1) return nnIndex_L1->getParameters(); if (nnIndex_L2) return nnIndex_L2->getParameters(); } - FLANN_DEPRECATED const ::cvflann::IndexParams* getIndexParameters() + CV_DEPRECATED const ::cvflann::IndexParams* getIndexParameters() { if (nnIndex_L1) return nnIndex_L1->getIndexParameters(); if (nnIndex_L2) return nnIndex_L2->getIndexParameters(); @@ -505,7 +505,7 @@ int hierarchicalClustering(const Mat& features, Mat& centers, const ::cvflann::K /** @deprecated */ template -FLANN_DEPRECATED int hierarchicalClustering(const Mat& features, Mat& centers, const ::cvflann::KMeansIndexParams& params) +CV_DEPRECATED int hierarchicalClustering(const Mat& features, Mat& centers, const ::cvflann::KMeansIndexParams& params) { printf("[WARNING] cv::flann::hierarchicalClustering is deprecated, use " "cv::flann::hierarchicalClustering instead\n"); diff --git a/modules/flann/include/opencv2/flann/defines.h b/modules/flann/include/opencv2/flann/defines.h index f0264f74e3..cab6ea9c0a 100644 --- a/modules/flann/include/opencv2/flann/defines.h +++ b/modules/flann/include/opencv2/flann/defines.h @@ -50,19 +50,6 @@ #endif -#ifdef FLANN_DEPRECATED -#undef FLANN_DEPRECATED -#endif -#ifdef __GNUC__ -#define FLANN_DEPRECATED __attribute__ ((deprecated)) -#elif defined(_MSC_VER) -#define FLANN_DEPRECATED __declspec(deprecated) -#else -#pragma message("WARNING: You need to implement FLANN_DEPRECATED for this compiler") -#define FLANN_DEPRECATED -#endif - - #undef FLANN_PLATFORM_32_BIT #undef FLANN_PLATFORM_64_BIT #if defined __amd64__ || defined __x86_64__ || defined _WIN64 || defined _M_X64 diff --git a/modules/flann/include/opencv2/flann/flann_base.hpp b/modules/flann/include/opencv2/flann/flann_base.hpp index 98c33cf6c0..98901afec1 100644 --- a/modules/flann/include/opencv2/flann/flann_base.hpp +++ b/modules/flann/include/opencv2/flann/flann_base.hpp @@ -241,7 +241,7 @@ public: /** * \brief Returns actual index */ - FLANN_DEPRECATED NNIndex* getIndex() + CV_DEPRECATED NNIndex* getIndex() { return nnIndex_; } @@ -250,7 +250,7 @@ public: * \brief Returns index parameters. * \deprecated use getParameters() instead. */ - FLANN_DEPRECATED const IndexParams* getIndexParameters() + CV_DEPRECATED const IndexParams* getIndexParameters() { return &index_params_; } diff --git a/modules/flann/include/opencv2/flann/matrix.h b/modules/flann/include/opencv2/flann/matrix.h index 51b6c6352c..f6092d134e 100644 --- a/modules/flann/include/opencv2/flann/matrix.h +++ b/modules/flann/include/opencv2/flann/matrix.h @@ -66,7 +66,7 @@ public: /** * Convenience function for deallocating the storage data. */ - FLANN_DEPRECATED void free() + CV_DEPRECATED void free() { fprintf(stderr, "The cvflann::Matrix::free() method is deprecated " "and it does not do any memory deallocation any more. You are" From 3e708e015c99f7374946c6cd5137509add43fb21 Mon Sep 17 00:00:00 2001 From: Pavel Rojtberg Date: Tue, 24 Jan 2017 15:27:11 +0100 Subject: [PATCH 47/54] solvePnP: use CV_32F for rvec, tvec if all PnP inputs are CV_32F --- modules/calib3d/src/solvepnp.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/modules/calib3d/src/solvepnp.cpp b/modules/calib3d/src/solvepnp.cpp index e205580921..1e9b8ec6e4 100644 --- a/modules/calib3d/src/solvepnp.cpp +++ b/modules/calib3d/src/solvepnp.cpp @@ -77,8 +77,14 @@ bool solvePnP( InputArray _opoints, InputArray _ipoints, } else { - _rvec.create(3, 1, CV_64F); - _tvec.create(3, 1, CV_64F); + int mtype = CV_64F; + // use CV_32F if all PnP inputs are CV_32F and outputs are empty + if (_ipoints.depth() == _cameraMatrix.depth() && _ipoints.depth() == _opoints.depth() && + _rvec.empty() && _tvec.empty()) + mtype = _opoints.depth(); + + _rvec.create(3, 1, mtype); + _tvec.create(3, 1, mtype); } rvec = _rvec.getMat(); tvec = _tvec.getMat(); From 576d43d1c2797ef80e494a27f8518c7855972f95 Mon Sep 17 00:00:00 2001 From: Dal Rupnik Date: Tue, 24 Jan 2017 19:14:50 +0100 Subject: [PATCH 48/54] Fixed build_framework.py script for osx --- platforms/osx/build_framework.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/platforms/osx/build_framework.py b/platforms/osx/build_framework.py index 2d39be5f9b..64e73c5490 100644 --- a/platforms/osx/build_framework.py +++ b/platforms/osx/build_framework.py @@ -15,10 +15,10 @@ class OSXBuilder(Builder): def getToolchain(self, arch, target): return None - def getBuildCommand(self, arch, target): + def getBuildCommand(self, archs, target): buildcmd = [ "xcodebuild", - "ARCHS=%s" % arch, + "ARCHS=%s" % archs[0], "-sdk", target.lower(), "-configuration", "Release", "-parallelizeTargets", @@ -39,8 +39,8 @@ if __name__ == "__main__": parser.add_argument('--without', metavar='MODULE', default=[], action='append', help='OpenCV modules to exclude from the framework') args = parser.parse_args() - b = OSXBuilder(args.opencv, args.contrib, args.without, + b = OSXBuilder(args.opencv, args.contrib, False, False, args.without, [ - ("x86_64", "MacOSX") + (["x86_64"], "MacOSX") ]) b.build(args.out) From 6eed6a8e9f274ab5ef484bf7ed10f141a9705f6f Mon Sep 17 00:00:00 2001 From: catree Date: Tue, 24 Jan 2017 21:05:05 +0100 Subject: [PATCH 49/54] Add thrust tutorial in the GPU main page documentation. --- .../gpu/gpu-thrust-interop/gpu_thrust_interop.markdown | 4 ++-- doc/tutorials/gpu/table_of_content_gpu.markdown | 7 +++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/doc/tutorials/gpu/gpu-thrust-interop/gpu_thrust_interop.markdown b/doc/tutorials/gpu/gpu-thrust-interop/gpu_thrust_interop.markdown index 64f763bd59..0332808cbb 100644 --- a/doc/tutorials/gpu/gpu-thrust-interop/gpu_thrust_interop.markdown +++ b/doc/tutorials/gpu/gpu-thrust-interop/gpu_thrust_interop.markdown @@ -1,4 +1,4 @@ -Using a cv::cuda::GpuMat with thrust +Using a cv::cuda::GpuMat with thrust {#tutorial_gpu_thrust_interop} =========================================== Goal @@ -67,4 +67,4 @@ Next we will determine how many values are greater than 0 by using thrust::count @snippet samples/cpp/tutorial_code/gpu/gpu-thrust-interop/main.cu pred_greater We will use those results to create an output buffer for storing the copied values, we will then use copy_if with the same predicate to populate the output buffer. -Lastly we will download the values into a CPU mat for viewing. \ No newline at end of file +Lastly we will download the values into a CPU mat for viewing. diff --git a/doc/tutorials/gpu/table_of_content_gpu.markdown b/doc/tutorials/gpu/table_of_content_gpu.markdown index fe4e2c8801..163f5e3b3f 100644 --- a/doc/tutorials/gpu/table_of_content_gpu.markdown +++ b/doc/tutorials/gpu/table_of_content_gpu.markdown @@ -13,3 +13,10 @@ run the OpenCV algorithms. This will give a good grasp on how to approach coding on the GPU module, once you already know how to handle the other modules. As a test case it will port the similarity methods from the tutorial @ref tutorial_video_input_psnr_ssim to the GPU. + +- @subpage tutorial_gpu_thrust_interop + + *Compatibility:* \>= OpenCV 3.0 + + This tutorial will show you how to wrap a GpuMat into a thrust iterator in order to be able to + use the functions in the thrust library. From ddca982c09ebf494e881518fd867b1cebdbe5b0f Mon Sep 17 00:00:00 2001 From: Tomoaki Teshima Date: Wed, 25 Jan 2017 22:05:53 +0900 Subject: [PATCH 50/54] remove pure SSE part --- modules/imgproc/src/spatialgradient.cpp | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/modules/imgproc/src/spatialgradient.cpp b/modules/imgproc/src/spatialgradient.cpp index 9217558181..a84bd704eb 100644 --- a/modules/imgproc/src/spatialgradient.cpp +++ b/modules/imgproc/src/spatialgradient.cpp @@ -129,7 +129,7 @@ void spatialGradient( InputArray _src, OutputArray _dx, OutputArray _dy, int i_start = 0; int j_start = 0; -#if CV_SIMD128 && CV_SSE2 +#if CV_SIMD128 if(hasSIMD128()) { uchar *m_src; @@ -160,18 +160,13 @@ void spatialGradient( InputArray _src, OutputArray _dx, OutputArray _dy, n_dx = dx.ptr(i+1); n_dy = dy.ptr(i+1); - v_uint8x16 v_select_m = v_uint8x16(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0xFF); - // Process rest of columns 16-column chunks at a time for ( j = 1; j < W - 16; j += 16 ) { // Load top row for 3x3 Sobel filter v_uint8x16 v_um = v_load(&p_src[j-1]); + v_uint8x16 v_un = v_load(&p_src[j]); v_uint8x16 v_up = v_load(&p_src[j+1]); - // TODO: Replace _mm_slli_si128 with hal method - v_uint8x16 v_un = v_select(v_select_m, v_uint8x16(_mm_slli_si128(v_up.val, 1)), - v_uint8x16(_mm_srli_si128(v_um.val, 1))); v_uint16x8 v_um1, v_um2, v_un1, v_un2, v_up1, v_up2; v_expand(v_um, v_um1, v_um2); v_expand(v_un, v_un1, v_un2); @@ -185,10 +180,8 @@ void spatialGradient( InputArray _src, OutputArray _dx, OutputArray _dy, // Load second row for 3x3 Sobel filter v_um = v_load(&c_src[j-1]); + v_un = v_load(&c_src[j]); v_up = v_load(&c_src[j+1]); - // TODO: Replace _mm_slli_si128 with hal method - v_un = v_select(v_select_m, v_uint8x16(_mm_slli_si128(v_up.val, 1)), - v_uint8x16(_mm_srli_si128(v_um.val, 1))); v_expand(v_um, v_um1, v_um2); v_expand(v_un, v_un1, v_un2); v_expand(v_up, v_up1, v_up2); @@ -201,10 +194,8 @@ void spatialGradient( InputArray _src, OutputArray _dx, OutputArray _dy, // Load third row for 3x3 Sobel filter v_um = v_load(&n_src[j-1]); + v_un = v_load(&n_src[j]); v_up = v_load(&n_src[j+1]); - // TODO: Replace _mm_slli_si128 with hal method - v_un = v_select(v_select_m, v_uint8x16(_mm_slli_si128(v_up.val, 1)), - v_uint8x16(_mm_srli_si128(v_um.val, 1))); v_expand(v_um, v_um1, v_um2); v_expand(v_un, v_un1, v_un2); v_expand(v_up, v_up1, v_up2); @@ -236,10 +227,8 @@ void spatialGradient( InputArray _src, OutputArray _dx, OutputArray _dy, // Load fourth row for 3x3 Sobel filter v_um = v_load(&m_src[j-1]); + v_un = v_load(&m_src[j]); v_up = v_load(&m_src[j+1]); - // TODO: Replace _mm_slli_si128 with hal method - v_un = v_select(v_select_m, v_uint8x16(_mm_slli_si128(v_up.val, 1)), - v_uint8x16(_mm_srli_si128(v_um.val, 1))); v_expand(v_um, v_um1, v_um2); v_expand(v_un, v_un1, v_un2); v_expand(v_up, v_up1, v_up2); From 07979b02c35d15fe3c3145b2c0f79246b55500f6 Mon Sep 17 00:00:00 2001 From: Tomoaki Teshima Date: Wed, 25 Jan 2017 22:35:11 +0900 Subject: [PATCH 51/54] optimize corner detection series using AVX instructions - make sure SSE version will be still available for backward compatibility --- modules/imgproc/src/corner.cpp | 156 ++++++++++++++++++++++++++++++--- 1 file changed, 145 insertions(+), 11 deletions(-) diff --git a/modules/imgproc/src/corner.cpp b/modules/imgproc/src/corner.cpp index dc84897be4..c276e86c5c 100644 --- a/modules/imgproc/src/corner.cpp +++ b/modules/imgproc/src/corner.cpp @@ -48,12 +48,86 @@ namespace cv { +#if CV_AVX +// load three 8-packed float vector and deinterleave +// probably it's better to write down somewhere else +static inline void load_deinterleave(const float* ptr, __m256& a, __m256& b, __m256& c) +{ + __m256 s0 = _mm256_loadu_ps(ptr); // a0, b0, c0, a1, b1, c1, a2, b2, + __m256 s1 = _mm256_loadu_ps(ptr + 8); // c2, a3, b3, c3, a4, b4, c4, a5, + __m256 s2 = _mm256_loadu_ps(ptr + 16); // b5, c5, a6, b6, c6, a7, b7, c7, + __m256 s3 = _mm256_permute2f128_ps(s1, s2, 0x21); // a4, b4, c4, a5, b5, c5, a6, b6, + __m256 s4 = _mm256_permute2f128_ps(s2, s2, 0x33); // c6, a7, b7, c7, c6, a7, b7, c7, + + __m256 v00 = _mm256_unpacklo_ps(s0, s3); // a0, a4, b0, b4, b1, b5, c1, c5, + __m256 v01 = _mm256_unpackhi_ps(s0, s3); // c0, c4, a1, a5, a2, a6, b2, b6, + __m256 v02 = _mm256_unpacklo_ps(s1, s4); // c2, c6, a3, a7, x, x, x, x, + __m256 v03 = _mm256_unpackhi_ps(s1, s4); // b3, b7, c3, c7, x, x, x, x, + __m256 v04 = _mm256_permute2f128_ps(v02, v03, 0x20); // c2, c6, a3, a7, b3, b7, c3, c7, + __m256 v05 = _mm256_permute2f128_ps(v01, v03, 0x21); // a2, a6, b2, b6, b3, b7, c3, c7, + + __m256 v10 = _mm256_unpacklo_ps(v00, v05); // a0, a2, a4, a6, b1, b3, b5, b7, + __m256 v11 = _mm256_unpackhi_ps(v00, v05); // b0, b2, b4, b6, c1, c3, c5, c7, + __m256 v12 = _mm256_unpacklo_ps(v01, v04); // c0, c2, c4, c6, x, x, x, x, + __m256 v13 = _mm256_unpackhi_ps(v01, v04); // a1, a3, a5, a7, x, x, x, x, + __m256 v14 = _mm256_permute2f128_ps(v11, v12, 0x20); // b0, b2, b4, b6, c0, c2, c4, c6, + __m256 v15 = _mm256_permute2f128_ps(v10, v11, 0x31); // b1, b3, b5, b7, c1, c3, c5, c7, + + __m256 v20 = _mm256_unpacklo_ps(v14, v15); // b0, b1, b2, b3, c0, c1, c2, c3, + __m256 v21 = _mm256_unpackhi_ps(v14, v15); // b4, b5, b6, b7, c4, c5, c6, c7, + __m256 v22 = _mm256_unpacklo_ps(v10, v13); // a0, a1, a2, a3, x, x, x, x, + __m256 v23 = _mm256_unpackhi_ps(v10, v13); // a4, a5, a6, a7, x, x, x, x, + + a = _mm256_permute2f128_ps(v22, v23, 0x20); // a0, a1, a2, a3, a4, a5, a6, a7, + b = _mm256_permute2f128_ps(v20, v21, 0x20); // b0, b1, b2, b3, b4, b5, b6, b7, + c = _mm256_permute2f128_ps(v20, v21, 0x31); // c0, c1, c2, c3, c4, c5, c6, c7, +} + +// realign four 3-packed vector to three 4-packed vector +static inline void v_pack4x3to3x4(const __m128i& s0, const __m128i& s1, const __m128i& s2, const __m128i& s3, __m128i& d0, __m128i& d1, __m128i& d2) +{ + d0 = _mm_or_si128(s0, _mm_slli_si128(s1, 12)); + d1 = _mm_or_si128(_mm_srli_si128(s1, 4), _mm_slli_si128(s2, 8)); + d2 = _mm_or_si128(_mm_srli_si128(s2, 8), _mm_slli_si128(s3, 4)); +} + +// separate high and low 128 bit and cast to __m128i +static inline void v_separate_lo_hi(const __m256& src, __m128i& lo, __m128i& hi) +{ + lo = _mm_castps_si128(_mm256_castps256_ps128(src)); + hi = _mm_castps_si128(_mm256_extractf128_ps(src, 1)); +} + +// interleave three 8-float vector and store +static inline void store_interleave(float* ptr, const __m256& a, const __m256& b, const __m256& c) +{ + __m128i a0, a1, b0, b1, c0, c1; + v_separate_lo_hi(a, a0, a1); + v_separate_lo_hi(b, b0, b1); + v_separate_lo_hi(c, c0, c1); + + v_uint32x4 z = v_setzero_u32(); + v_uint32x4 u0, u1, u2, u3; + v_transpose4x4(v_uint32x4(a0), v_uint32x4(b0), v_uint32x4(c0), z, u0, u1, u2, u3); + v_pack4x3to3x4(u0.val, u1.val, u2.val, u3.val, a0, b0, c0); + v_transpose4x4(v_uint32x4(a1), v_uint32x4(b1), v_uint32x4(c1), z, u0, u1, u2, u3); + v_pack4x3to3x4(u0.val, u1.val, u2.val, u3.val, a1, b1, c1); + + _mm256_storeu_ps(ptr, _mm256_setr_m128(_mm_castsi128_ps(a0), _mm_castsi128_ps(b0))); + _mm256_storeu_ps(ptr + 8, _mm256_setr_m128(_mm_castsi128_ps(c0), _mm_castsi128_ps(a1))); + _mm256_storeu_ps(ptr + 16, _mm256_setr_m128(_mm_castsi128_ps(b1), _mm_castsi128_ps(c1))); +} +#endif // CV_AVX + static void calcMinEigenVal( const Mat& _cov, Mat& _dst ) { int i, j; Size size = _cov.size(); +#if CV_AVX + bool haveAvx = checkHardwareSupport(CV_CPU_AVX); +#endif #if CV_SIMD128 - bool simd = hasSIMD128(); + bool haveSimd = hasSIMD128(); #endif if( _cov.isContinuous() && _dst.isContinuous() ) @@ -67,8 +141,25 @@ static void calcMinEigenVal( const Mat& _cov, Mat& _dst ) const float* cov = _cov.ptr(i); float* dst = _dst.ptr(i); j = 0; - #if CV_SIMD128 - if( simd ) +#if CV_AVX + if( haveAvx ) + { + __m256 half = _mm256_set1_ps(0.5f); + for( ; j <= size.width - 8; j += 8 ) + { + __m256 v_a, v_b, v_c, v_t; + load_deinterleave(cov + j*3, v_a, v_b, v_c); + v_a = _mm256_mul_ps(v_a, half); + v_c = _mm256_mul_ps(v_c, half); + v_t = _mm256_sub_ps(v_a, v_c); + v_t = _mm256_add_ps(_mm256_mul_ps(v_b, v_b), _mm256_mul_ps(v_t, v_t)); + _mm256_storeu_ps(dst + j, _mm256_sub_ps(_mm256_add_ps(v_a, v_c), _mm256_sqrt_ps(v_t))); + } + } +#endif // CV_AVX + +#if CV_SIMD128 + if( haveSimd ) { v_float32x4 half = v_setall_f32(0.5f); for( ; j <= size.width - v_float32x4::nlanes; j += v_float32x4::nlanes ) @@ -82,7 +173,8 @@ static void calcMinEigenVal( const Mat& _cov, Mat& _dst ) v_store(dst + j, (v_a + v_c) - v_sqrt(v_t)); } } - #endif +#endif // CV_SIMD128 + for( ; j < size.width; j++ ) { float a = cov[j*3]*0.5f; @@ -98,8 +190,11 @@ static void calcHarris( const Mat& _cov, Mat& _dst, double k ) { int i, j; Size size = _cov.size(); +#if CV_AVX + bool haveAvx = checkHardwareSupport(CV_CPU_AVX); +#endif #if CV_SIMD128 - bool simd = hasSIMD128(); + bool haveSimd = hasSIMD128(); #endif if( _cov.isContinuous() && _dst.isContinuous() ) @@ -114,8 +209,26 @@ static void calcHarris( const Mat& _cov, Mat& _dst, double k ) float* dst = _dst.ptr(i); j = 0; - #if CV_SIMD128 - if( simd ) +#if CV_AVX + if( haveAvx ) + { + __m256 v_k = _mm256_set1_ps((float)k); + + for( ; j <= size.width - 8; j += 8 ) + { + __m256 v_a, v_b, v_c; + load_deinterleave(cov + j * 3, v_a, v_b, v_c); + + __m256 v_ac_bb = _mm256_sub_ps(_mm256_mul_ps(v_a, v_c), _mm256_mul_ps(v_b, v_b)); + __m256 v_ac = _mm256_add_ps(v_a, v_c); + __m256 v_dst = _mm256_sub_ps(v_ac_bb, _mm256_mul_ps(v_k, _mm256_mul_ps(v_ac, v_ac))); + _mm256_storeu_ps(dst + j, v_dst); + } + } +#endif // CV_AVX + +#if CV_SIMD128 + if( haveSimd ) { v_float32x4 v_k = v_setall_f32((float)k); @@ -130,7 +243,7 @@ static void calcHarris( const Mat& _cov, Mat& _dst, double k ) v_store(dst + j, v_dst); } } - #endif +#endif // CV_SIMD128 for( ; j < size.width; j++ ) { @@ -231,6 +344,9 @@ cornerEigenValsVecs( const Mat& src, Mat& eigenv, int block_size, if (tegra::useTegra() && tegra::cornerEigenValsVecs(src, eigenv, block_size, aperture_size, op_type, k, borderType)) return; #endif +#if CV_AVX + bool haveAvx = checkHardwareSupport(CV_CPU_AVX); +#endif #if CV_SIMD128 bool haveSimd = hasSIMD128(); #endif @@ -268,8 +384,26 @@ cornerEigenValsVecs( const Mat& src, Mat& eigenv, int block_size, const float* dydata = Dy.ptr(i); j = 0; - #if CV_SIMD128 - if (haveSimd) +#if CV_AVX + if( haveAvx ) + { + for( ; j <= size.width - 8; j += 8 ) + { + __m256 v_dx = _mm256_loadu_ps(dxdata + j); + __m256 v_dy = _mm256_loadu_ps(dydata + j); + + __m256 v_dst0, v_dst1, v_dst2; + v_dst0 = _mm256_mul_ps(v_dx, v_dx); + v_dst1 = _mm256_mul_ps(v_dx, v_dy); + v_dst2 = _mm256_mul_ps(v_dy, v_dy); + + store_interleave(cov_data + j * 3, v_dst0, v_dst1, v_dst2); + } + } +#endif // CV_AVX + +#if CV_SIMD128 + if( haveSimd ) { for( ; j <= size.width - v_float32x4::nlanes; j += v_float32x4::nlanes ) { @@ -284,7 +418,7 @@ cornerEigenValsVecs( const Mat& src, Mat& eigenv, int block_size, v_store_interleave(cov_data + j * 3, v_dst0, v_dst1, v_dst2); } } - #endif +#endif // CV_SIMD128 for( ; j < size.width; j++ ) { From c1dec72fb66986441765890078f8050132d38fe0 Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Wed, 25 Jan 2017 19:42:09 +0300 Subject: [PATCH 52/54] java: force 64F in solvePnP test --- modules/calib3d/misc/java/test/Calib3dTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/calib3d/misc/java/test/Calib3dTest.java b/modules/calib3d/misc/java/test/Calib3dTest.java index add668f190..67193d9586 100644 --- a/modules/calib3d/misc/java/test/Calib3dTest.java +++ b/modules/calib3d/misc/java/test/Calib3dTest.java @@ -499,7 +499,7 @@ public class Calib3dTest extends OpenCVTestCase { } public void testSolvePnPListOfPoint3ListOfPointMatMatMatMat() { - Mat intrinsics = Mat.eye(3, 3, CvType.CV_32F); + Mat intrinsics = Mat.eye(3, 3, CvType.CV_64F); intrinsics.put(0, 0, 400); intrinsics.put(1, 1, 400); intrinsics.put(0, 2, 640 / 2); From 820fdbff2309150eb2b5a328ddac774b865ec8a1 Mon Sep 17 00:00:00 2001 From: Tomoaki Teshima Date: Thu, 26 Jan 2017 18:37:56 +0900 Subject: [PATCH 53/54] brush up AVX optimization in popcount - make sure SIMD optimization works even when AVX is not available --- modules/core/src/stat.cpp | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/modules/core/src/stat.cpp b/modules/core/src/stat.cpp index 3336152a44..39e0fa7648 100644 --- a/modules/core/src/stat.cpp +++ b/modules/core/src/stat.cpp @@ -4261,7 +4261,9 @@ int normHamming(const uchar* a, int n) _r0 = _mm256_add_epi32(_r0, _mm256_shuffle_epi32(_r0, 2)); result = _mm256_extract_epi32_(_mm256_add_epi32(_r0, _mm256_permute2x128_si256(_r0, _r0, 1)), 0); } -#elif CV_POPCNT +#endif // CV_AVX2 + +#if CV_POPCNT if(checkHardwareSupport(CV_CPU_POPCNT)) { # if defined CV_POPCNT_U64 @@ -4275,7 +4277,9 @@ int normHamming(const uchar* a, int n) result += CV_POPCNT_U32(*(uint*)(a + i)); } } -#elif CV_SIMD128 +#endif // CV_POPCNT + +#if CV_SIMD128 if(hasSIMD128()) { v_uint32x4 t = v_setzero_u32(); @@ -4283,9 +4287,10 @@ int normHamming(const uchar* a, int n) { t += v_popcount(v_load(a + i)); } - result = v_reduce_sum(t); + result += v_reduce_sum(t); } -#endif +#endif // CV_SIMD128 + for(; i <= n - 4; i += 4) { result += popCountTable[a[i]] + popCountTable[a[i+1]] + @@ -4327,7 +4332,9 @@ int normHamming(const uchar* a, const uchar* b, int n) _r0 = _mm256_add_epi32(_r0, _mm256_shuffle_epi32(_r0, 2)); result = _mm256_extract_epi32_(_mm256_add_epi32(_r0, _mm256_permute2x128_si256(_r0, _r0, 1)), 0); } -#elif CV_POPCNT +#endif // CV_AVX2 + +#if CV_POPCNT if(checkHardwareSupport(CV_CPU_POPCNT)) { # if defined CV_POPCNT_U64 @@ -4341,7 +4348,9 @@ int normHamming(const uchar* a, const uchar* b, int n) result += CV_POPCNT_U32(*(uint*)(a + i) ^ *(uint*)(b + i)); } } -#elif CV_SIMD128 +#endif // CV_POPCNT + +#if CV_SIMD128 if(hasSIMD128()) { v_uint32x4 t = v_setzero_u32(); @@ -4349,9 +4358,10 @@ int normHamming(const uchar* a, const uchar* b, int n) { t += v_popcount(v_load(a + i) ^ v_load(b + i)); } - result = v_reduce_sum(t); + result += v_reduce_sum(t); } -#endif +#endif // CV_SIMD128 + for(; i <= n - 4; i += 4) { result += popCountTable[a[i] ^ b[i]] + popCountTable[a[i+1] ^ b[i+1]] + From ec47a0a6def8b60a26b6b3697ba3eda65d84ee66 Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Thu, 26 Jan 2017 18:15:18 +0300 Subject: [PATCH 54/54] build: workaround for missing _mm256_setr_m128 in GCC --- modules/imgproc/src/corner.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/modules/imgproc/src/corner.cpp b/modules/imgproc/src/corner.cpp index c276e86c5c..da2e08ddb6 100644 --- a/modules/imgproc/src/corner.cpp +++ b/modules/imgproc/src/corner.cpp @@ -113,9 +113,16 @@ static inline void store_interleave(float* ptr, const __m256& a, const __m256& b v_transpose4x4(v_uint32x4(a1), v_uint32x4(b1), v_uint32x4(c1), z, u0, u1, u2, u3); v_pack4x3to3x4(u0.val, u1.val, u2.val, u3.val, a1, b1, c1); +#if !defined(__GNUC__) || defined(__INTEL_COMPILER) _mm256_storeu_ps(ptr, _mm256_setr_m128(_mm_castsi128_ps(a0), _mm_castsi128_ps(b0))); _mm256_storeu_ps(ptr + 8, _mm256_setr_m128(_mm_castsi128_ps(c0), _mm_castsi128_ps(a1))); _mm256_storeu_ps(ptr + 16, _mm256_setr_m128(_mm_castsi128_ps(b1), _mm_castsi128_ps(c1))); +#else + // GCC: workaround for missing AVX intrinsic: "_mm256_setr_m128()" + _mm256_storeu_ps(ptr, _mm256_insertf128_ps(_mm256_castps128_ps256(_mm_castsi128_ps(a0)), _mm_castsi128_ps(b0), 1)); + _mm256_storeu_ps(ptr + 8, _mm256_insertf128_ps(_mm256_castps128_ps256(_mm_castsi128_ps(c0)), _mm_castsi128_ps(a1), 1)); + _mm256_storeu_ps(ptr + 16, _mm256_insertf128_ps(_mm256_castps128_ps256(_mm_castsi128_ps(b1)), _mm_castsi128_ps(c1), 1)); +#endif } #endif // CV_AVX