diff --git a/cmake/OpenCVModule.cmake b/cmake/OpenCVModule.cmake index 91b65f59aad65504ac4f9c9444431f0f480067b2..9d5ce074b6e44db21b35d8bc17a9d001c6be5106 100644 --- a/cmake/OpenCVModule.cmake +++ b/cmake/OpenCVModule.cmake @@ -164,6 +164,9 @@ macro(ocv_module_disable module) set(HAVE_${__modname} OFF CACHE INTERNAL "Module ${__modname} can not be built in current configuration") set(OPENCV_MODULE_${__modname}_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}" CACHE INTERNAL "Location of ${__modname} module sources") set(OPENCV_MODULES_DISABLED_FORCE "${OPENCV_MODULES_DISABLED_FORCE}" CACHE INTERNAL "List of OpenCV modules which can not be build in current configuration") + if(BUILD_${__modname}) + # touch variable controlling build of the module to suppress "unused variable" CMake warning + endif() unset(__modname) return() # leave the current folder endmacro() diff --git a/doc/check_docs2.py b/doc/check_docs2.py index bf03754590a956fc360b1cfa7f9f4f4cd2300ba9..0a29b503848468ed15d9e4f8517cb13a87c555e7 100755 --- a/doc/check_docs2.py +++ b/doc/check_docs2.py @@ -116,6 +116,8 @@ def compareSignatures(f, s): sarg = arg[1] ftype = re.sub(r"\b(cv|std)::", "", (farg[0] or "")) stype = re.sub(r"\b(cv|std)::", "", (sarg[0] or "")) + ftype = re.sub(r"\s+(\*|&)$", "\\1", ftype) + stype = re.sub(r"\s+(\*|&)$", "\\1", stype) if ftype != stype: return False, "type of argument #" + str(idx+1) + " mismatch" fname = farg[1] or "arg" + str(idx) @@ -151,6 +153,7 @@ def formatSignature(s): if idx > 0: _str += ", " argtype = re.sub(r"\bcv::", "", arg[0]) + argtype = re.sub(r"\s+(\*|&)$", "\\1", arg[0]) bidx = argtype.find('[') if bidx < 0: _str += argtype + " " diff --git a/doc/tutorials/introduction/android_binary_package/dev_with_OCV_on_Android.rst b/doc/tutorials/introduction/android_binary_package/dev_with_OCV_on_Android.rst index 09fb4df877b392d61c4d73748d7efd337960f0dc..3df3b340b41ea056cd46d86c500df6f2f6cc8b2b 100644 --- a/doc/tutorials/introduction/android_binary_package/dev_with_OCV_on_Android.rst +++ b/doc/tutorials/introduction/android_binary_package/dev_with_OCV_on_Android.rst @@ -1,13 +1,13 @@ .. _dev_with_OCV_on_Android: - -Android development with OpenCV +Android Development with OpenCV ******************************* -This tutorial is created to help you use OpenCV library within your Android project. +This tutorial has been created to help you use OpenCV library within your Android project. -This guide was written with Windows 7 in mind, though it should work with any other OS supported by OpenCV4Android SDK. +This guide was written with Windows 7 in mind, though it should work with any other OS supported by +OpenCV4Android SDK. This tutorial assumes you have the following installed and configured: @@ -23,41 +23,57 @@ This tutorial assumes you have the following installed and configured: If you need help with anything of the above, you may refer to our :ref:`android_dev_intro` guide. -This tutorial also assumes you have OpenCV4Android SDK already installed on your development machine and OpenCV Manager on your testing device correspondingly. If you need help with any of these, you may consult our :ref:`O4A_SDK` tutorial. +This tutorial also assumes you have OpenCV4Android SDK already installed on your development +machine and OpenCV Manager on your testing device correspondingly. If you need help with any of +these, you may consult our :ref:`O4A_SDK` tutorial. + +If you encounter any error after thoroughly following these steps, feel free to contact us via +`OpenCV4Android `_ discussion group or OpenCV +`Q&A forum `_ . We'll do our best to help you out. -If you encounter any error after thoroughly following these steps, feel free to contact us via `OpenCV4Android `_ discussion group or OpenCV `Q&A forum `_ . We'll do our best to help you out. -Using OpenCV library within your Android project +Using OpenCV Library Within Your Android Project ================================================ In this section we will explain how to make some existing project to use OpenCV. -Starting with 2.4.2 release for Android, *OpenCV Manager* is used to provide apps with the best available version of OpenCV. -You can get more information here: :ref:`Android_OpenCV_Manager` and in these `slides `_. +Starting with 2.4.2 release for Android, *OpenCV Manager* is used to provide apps with the best +available version of OpenCV. +You can get more information here: :ref:`Android_OpenCV_Manager` and in these +`slides `_. + Java ---- -Application development with async initialization + +Application Development with Async Initialization ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Using async initialization is a **recommended** way for application development. It uses the OpenCV Manager to access OpenCV libraries externally installed in the target system. +Using async initialization is a **recommended** way for application development. It uses the OpenCV +Manager to access OpenCV libraries externally installed in the target system. + +#. Add OpenCV library project to your workspace. Use menu + :guilabel:`File -> Import -> Existing project in your workspace`. -#. Add OpenCV library project to your workspace. Use menu :guilabel:`File -> Import -> Existing project in your workspace`, - press :guilabel:`Browse` button and locate OpenCV4Android SDK (:file:`OpenCV-2.4.3-android-sdk/sdk`). + Press :guilabel:`Browse` button and locate OpenCV4Android SDK + (:file:`OpenCV-2.4.3-android-sdk/sdk`). .. image:: images/eclipse_opencv_dependency0.png :alt: Add dependency from OpenCV library :align: center -#. In application project add a reference to the OpenCV Java SDK in :guilabel:`Project -> Properties -> Android -> Library -> Add` select ``OpenCV Library - 2.4.3``. +#. In application project add a reference to the OpenCV Java SDK in + :guilabel:`Project -> Properties -> Android -> Library -> Add` select ``OpenCV Library - 2.4.3``. .. image:: images/eclipse_opencv_dependency1.png :alt: Add dependency from OpenCV library :align: center -In most cases OpenCV Manager may be installed automatically from Google Play. For such case, when Google Play is not available, i.e. emulator, developer board, etc, you can -install it manually using adb tool. See :ref:`manager_selection` for details. +In most cases OpenCV Manager may be installed automatically from Google Play. For the case, when +Google Play is not available, i.e. emulator, developer board, etc, you can install it manually +using adb tool. See :ref:`manager_selection` for details. -There is a very base code snippet implementing the async initialization. It shows basic principles. See the "15-puzzle" OpenCV sample for details. +There is a very base code snippet implementing the async initialization. It shows basic principles. +See the "15-puzzle" OpenCV sample for details. .. code-block:: java :linenos: @@ -97,35 +113,48 @@ There is a very base code snippet implementing the async initialization. It show } } -It this case application works with OpenCV Manager in asynchronous fashion. ``OnManagerConnected`` callback will be called in UI thread, when initialization finishes. -Please note, that it is not allowed to use OpenCV calls or load OpenCV-dependent native libs before invoking this callback. +It this case application works with OpenCV Manager in asynchronous fashion. ``OnManagerConnected`` +callback will be called in UI thread, when initialization finishes. Please note, that it is not +allowed to use OpenCV calls or load OpenCV-dependent native libs before invoking this callback. Load your own native libraries that depend on OpenCV after the successful OpenCV initialization. -Default BaseLoaderCallback implementation treat application context as Activity and calls Activity.finish() method to exit in case of initialization failure. -To override this behavior you need to override finish() method of BaseLoaderCallback class and implement your own finalization method. +Default ``BaseLoaderCallback`` implementation treat application context as Activity and calls +``Activity.finish()`` method to exit in case of initialization failure. To override this behavior +you need to override ``finish()`` method of ``BaseLoaderCallback`` class and implement your own +finalization method. -Application development with static initialization + +Application Development with Static Initialization ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -According to this approach all OpenCV binaries are included into your application package. It is designed mostly for development purposes. -This approach is deprecated for the production code, release package is recommended to communicate with OpenCV Manager via the async initialization described above. +According to this approach all OpenCV binaries are included into your application package. It is +designed mostly for development purposes. This approach is deprecated for the production code, +release package is recommended to communicate with OpenCV Manager via the async initialization +described above. -#. Add the OpenCV library project to your workspace the same way as for the async initialization above. - Use menu :guilabel:`File -> Import -> Existing project in your workspace`, push :guilabel:`Browse` button and select OpenCV SDK path (:file:`OpenCV-2.4.3-android-sdk/sdk`). +#. Add the OpenCV library project to your workspace the same way as for the async initialization + above. Use menu :guilabel:`File -> Import -> Existing project in your workspace`, + press :guilabel:`Browse` button and select OpenCV SDK path + (:file:`OpenCV-2.4.3-android-sdk/sdk`). .. image:: images/eclipse_opencv_dependency0.png :alt: Add dependency from OpenCV library :align: center -#. In the application project add a reference to the OpenCV4Android SDK in :guilabel:`Project -> Properties -> Android -> Library -> Add` select ``OpenCV Library - 2.4.3``; +#. In the application project add a reference to the OpenCV4Android SDK in + :guilabel:`Project -> Properties -> Android -> Library -> Add` select ``OpenCV Library - 2.4.3``; .. image:: images/eclipse_opencv_dependency1.png :alt: Add dependency from OpenCV library :align: center -#. If your application project **doesn't have a JNI part**, just copy the corresponding OpenCV native libs from :file:`/sdk/native/libs/` to your project directory to folder :file:`libs/`. +#. If your application project **doesn't have a JNI part**, just copy the corresponding OpenCV + native libs from :file:`/sdk/native/libs/` to your + project directory to folder :file:`libs/`. - In case of the application project **with a JNI part**, instead of manual libraries copying you need to modify your ``Android.mk`` file: - add the following two code lines after the ``"include $(CLEAR_VARS)"`` and before ``"include path_to_OpenCV-2.4.3-android-sdk/sdk/native/jni/OpenCV.mk"`` + In case of the application project **with a JNI part**, instead of manual libraries copying you + need to modify your ``Android.mk`` file: + add the following two code lines after the ``"include $(CLEAR_VARS)"`` and before + ``"include path_to_OpenCV-2.4.3-android-sdk/sdk/native/jni/OpenCV.mk"`` .. code-block:: make :linenos: @@ -145,12 +174,14 @@ This approach is deprecated for the production code, release package is recommen OPENCV_INSTALL_MODULES:=on include ../../sdk/native/jni/OpenCV.mk - After that the OpenCV libraries will be copied to your application :file:`libs` folder during the JNI part build. + After that the OpenCV libraries will be copied to your application :file:`libs` folder during + the JNI build.v - Eclipse will automatically include all the libraries from the :file:`libs` folder to the application package (APK). + Eclipse will automatically include all the libraries from the :file:`libs` folder to the + application package (APK). -#. The last step of enabling OpenCV in your application is Java initialization code before call to OpenCV API. - It can be done, for example, in the static section of the ``Activity`` class: +#. The last step of enabling OpenCV in your application is Java initialization code before calling + OpenCV API. It can be done, for example, in the static section of the ``Activity`` class: .. code-block:: java :linenos: @@ -161,7 +192,8 @@ This approach is deprecated for the production code, release package is recommen } } - If you application includes other OpenCV-dependent native libraries you should load them **after** OpenCV initialization: + If you application includes other OpenCV-dependent native libraries you should load them + **after** OpenCV initialization: .. code-block:: java :linenos: @@ -175,39 +207,45 @@ This approach is deprecated for the production code, release package is recommen } } + Native/C++ ---------- -To build your own Android application, which uses OpenCV from native part, the following steps should be done: +To build your own Android application, using OpenCV as native part, the following steps should be +taken: -#. You can use an environment variable to specify the location of OpenCV package or just hardcode absolute or relative path in the :file:`jni/Android.mk` of your projects. +#. You can use an environment variable to specify the location of OpenCV package or just hardcode + absolute or relative path in the :file:`jni/Android.mk` of your projects. -#. The file :file:`jni/Android.mk` should be written for the current application using the common rules for this file. +#. The file :file:`jni/Android.mk` should be written for the current application using the common + rules for this file. - For detailed information see the Android NDK documentation from the Android NDK archive, in the file - :file:`/docs/ANDROID-MK.html` + For detailed information see the Android NDK documentation from the Android NDK archive, in the + file :file:`/docs/ANDROID-MK.html`. -#. The line +#. The following line: .. code-block:: make include C:\Work\OpenCV4Android\OpenCV-2.4.3-android-sdk\sdk\native\jni\OpenCV.mk - should be inserted into the :file:`jni/Android.mk` file **after** the line + Should be inserted into the :file:`jni/Android.mk` file **after** this line: .. code-block:: make include $(CLEAR_VARS) -#. Several variables can be used to customize OpenCV stuff, but you **don't need** to use them when your application uses the `async initialization` via the `OpenCV Manager` API. +#. Several variables can be used to customize OpenCV stuff, but you **don't need** to use them when + your application uses the `async initialization` via the `OpenCV Manager` API. - Note: these variables should be set **before** the ``"include .../OpenCV.mk"`` line: + .. note:: These variables should be set **before** the ``"include .../OpenCV.mk"`` line: - .. code-block:: make + .. code-block:: make - OPENCV_INSTALL_MODULES:=on + OPENCV_INSTALL_MODULES:=on - Copies necessary OpenCV dynamic libs to the project ``libs`` folder in order to include them into the APK. + Copies necessary OpenCV dynamic libs to the project ``libs`` folder in order to include them + into the APK. .. code-block:: make @@ -219,7 +257,8 @@ To build your own Android application, which uses OpenCV from native part, the f OPENCV_LIB_TYPE:=STATIC - Perform static link with OpenCV. By default dynamic link is used and the project JNI lib depends on ``libopencv_java.so``. + Perform static linking with OpenCV. By default dynamic link is used and the project JNI lib + depends on ``libopencv_java.so``. #. The file :file:`Application.mk` should exist and should contain lines: @@ -228,139 +267,250 @@ To build your own Android application, which uses OpenCV from native part, the f APP_STL := gnustl_static APP_CPPFLAGS := -frtti -fexceptions - Also the line like this one: + Also, the line like this one: .. code-block:: make APP_ABI := armeabi-v7a - should specify the application target platforms. + Should specify the application target platforms. - In some cases a linkage error (like ``"In function 'cv::toUtf16(std::basic_string<...>... undefined reference to 'mbstowcs'"``) happens - when building an application JNI library depending on OpenCV. - The following line in the :file:`Application.mk` usually fixes it: + In some cases a linkage error (like ``"In function 'cv::toUtf16(std::basic_string<...>... + undefined reference to 'mbstowcs'"``) happens when building an application JNI library, + depending on OpenCV. The following line in the :file:`Application.mk` usually fixes it: .. code-block:: make APP_PLATFORM := android-9 -#. Either use :ref:`manual ` ``ndk-build`` invocation or :ref:`setup Eclipse CDT Builder ` to build native JNI lib before Java part [re]build and APK creation. +#. Either use :ref:`manual ` ``ndk-build`` invocation or + :ref:`setup Eclipse CDT Builder ` to build native JNI lib before (re)building the Java + part and creating an APK. -"Hello OpenCV" Sample -===================== +Hello OpenCV Sample +=================== -Here are basic steps to guide you trough the creation process of a simple OpenCV-centric application. -It will be capable of accessing camera output, processing it and displaying the result. +Here are basic steps to guide you trough the process of creating a simple OpenCV-centric +application. It will be capable of accessing camera output, processing it and displaying the +result. -#. Open Eclipse IDE, create a new clean workspace, create a new Android project (:guilabel:`File -> New -> Android Project`). +#. Open Eclipse IDE, create a new clean workspace, create a new Android project + :menuselection:`File --> New --> Android Project`. #. Set name, target, package and ``minSDKVersion`` accordingly. -#. Add the following permissions to the ``AndroidManifest.xml`` file: +#. Create a new class :menuselection:`File -> New -> Class`. Name it for example: + *HelloOpenCVView*. + + .. image:: images/dev_OCV_new_class.png + :alt: Add a new class. + :align: center + + * It should extend ``SurfaceView`` class. + * It also should implement ``SurfaceHolder.Callback``, ``Runnable``. + +#. Edit ``HelloOpenCVView`` class. + + * Add an ``import`` line for ``android.content.context``. + + * Modify autogenerated stubs: ``HelloOpenCVView``, ``surfaceCreated``, ``surfaceDestroyed`` and + ``surfaceChanged``. + + .. code-block:: java + :linenos: + + package com.hello.opencv.test; + + import android.content.Context; + + public class HelloOpenCVView extends SurfaceView implements Callback, Runnable { + + public HelloOpenCVView(Context context) { + super(context); + getHolder().addCallback(this); + } + + public void surfaceCreated(SurfaceHolder holder) { + (new Thread(this)).start(); + } + + public void surfaceDestroyed(SurfaceHolder holder) { + cameraRelease(); + } + + public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { + cameraSetup(width, height); + } + + * Add ``cameraOpen``, ``cameraRelease`` and ``cameraSetup`` voids as shown below. + + * Also, don't forget to add the public void ``run()`` as follows: + + .. code-block:: java + :linenos: + + public void run() { + // TODO: loop { getFrame(), processFrame(), drawFrame() } + } + + public boolean cameraOpen() { + return false; //TODO: open camera + } + + private void cameraRelease() { + // TODO release camera + } + + private void cameraSetup(int width, int height) { + // TODO setup camera + } + +#. Create a new ``Activity`` :menuselection:`New -> Other -> Android -> Android Activity` and name + it, for example: *HelloOpenCVActivity*. For this activity define ``onCreate``, ``onResume`` and + ``onPause`` voids. + + .. code-block:: java + :linenos: + + public void onCreate (Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mView = new HelloOpenCVView(this); + setContentView (mView); + } + + protected void onPause() { + super.onPause(); + mView.cameraRelease(); + } + + protected void onResume() { + super.onResume(); + if( !mView.cameraOpen() ) { + // MessageBox and exit app + AlertDialog ad = new AlertDialog.Builder(this).create(); + ad.setCancelable(false); // This blocks the "BACK" button + ad.setMessage("Fatal error: can't open camera!"); + ad.setButton("OK", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + finish(); + } + }); + ad.show(); + } + } + +#. Add the following permissions to the :file:`AndroidManifest.xml` file: .. code-block:: xml :linenos: - + - - - - + + + -#. Reference the OpenCV library within your project properties. +#. Reference OpenCV library within your project properties. .. image:: images/dev_OCV_reference.png :alt: Reference OpenCV library. :align: center -#. Create new view layout for your application, lets name it ``hello_opencv.xml``, and add the following to it: - - .. code-block:: xml - :linenos: +#. We now need some code to handle the camera. Update the ``HelloOpenCVView`` class as follows: - + .. code-block:: java + :linenos: - + private VideoCapture mCamera; + + public boolean cameraOpen() { + synchronized (this) { + cameraRelease(); + mCamera = new VideoCapture(Highgui.CV_CAP_ANDROID); + if (!mCamera.isOpened()) { + mCamera.release(); + mCamera = null; + Log.e("HelloOpenCVView", "Failed to open native camera"); + return false; + } + } + return true; + } - + public void cameraRelease() { + synchronized(this) { + if (mCamera != null) { + mCamera.release(); + mCamera = null; + } + } + } -#. Remove default auto generated layout, if exists. + private void cameraSetup(int width, int height) { + synchronized (this) { + if (mCamera != null && mCamera.isOpened()) { + List sizes = mCamera.getSupportedPreviewSizes(); + int mFrameWidth = width; + int mFrameHeight = height; + { // selecting optimal camera preview size + double minDiff = Double.MAX_VALUE; + for (Size size : sizes) { + if (Math.abs(size.height - height) < minDiff) { + mFrameWidth = (int) size.width; + mFrameHeight = (int) size.height; + minDiff = Math.abs(size.height - height); + } + } + } + mCamera.set(Highgui.CV_CAP_PROP_FRAME_WIDTH, mFrameWidth); + mCamera.set(Highgui.CV_CAP_PROP_FRAME_HEIGHT, mFrameHeight); + } + } + } -#. Create a new ``Activity`` (:guilabel:`New -> Other -> Android -> Android Activity`) and name it, for example: ``HelloOpenCVActivity``. - Add ``CvCameraViewListener`` interface to ``implements`` list of ``HelloOpenCVActivity`` class. Add the following code to activity implementation: +#. The last step would be to update the ``run()`` void in ``HelloOpenCVView`` class as follows: .. code-block:: java :linenos: - public class Sample1Java extends Activity implements CvCameraViewListener { - - private CameraBridgeViewBase mOpenCvCameraView; + public void run() { + while (true) { + Bitmap bmp = null; + synchronized (this) { + if (mCamera == null) + break; + if (!mCamera.grab()) + break; + + bmp = processFrame(mCamera); + } + if (bmp != null) { + Canvas canvas = getHolder().lockCanvas(); + if (canvas != null) { + canvas.drawBitmap(bmp, (canvas.getWidth() - bmp.getWidth()) / 2, + (canvas.getHeight() - bmp.getHeight()) / 2, null); + getHolder().unlockCanvasAndPost(canvas); + + } + bmp.recycle(); + } + } + } - private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) { - @Override - public void onManagerConnected(int status) { - switch (status) { - case LoaderCallbackInterface.SUCCESS: { - Log.i(TAG, "OpenCV loaded successfully"); - mOpenCvCameraView.enableView(); - } break; - default: - super.onManagerConnected(status); - } - } - }; - - /** Called when the activity is first created. */ - @Override - public void onCreate(Bundle savedInstanceState) { - Log.i(TAG, "called onCreate"); - super.onCreate(savedInstanceState); - requestWindowFeature(Window.FEATURE_NO_TITLE); - getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); - setContentView(R.layout.hello_opencv); - mOpenCvCameraView = (CameraBridgeViewBase) findViewById(R.id.java_surface_view); - mOpenCvCameraView.setVisibility(SurfaceView.VISIBLE); - mOpenCvCameraView.setCvCameraViewListener(this); - } - - @Override - public void onPause() - { - if (mOpenCvCameraView != null) - mOpenCvCameraView.disableView(); - super.onPause(); - } - - @Override - public void onResume() - { - super.onResume(); - OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3, this, mLoaderCallback); - } - - public void onDestroy() { - super.onDestroy(); - if (mOpenCvCameraView != null) - mOpenCvCameraView.disableView(); - } - - public void onCameraViewStarted(int width, int height) { - } - - public void onCameraViewStopped() { - } - - public Mat onCameraFrame(Mat inputFrame) { - return inputFrame; - } - } + protected Bitmap processFrame(VideoCapture capture) { + Mat mRgba = new Mat(); + capture.retrieve(mRgba, Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA); + //process mRgba + Bitmap bmp = Bitmap.createBitmap(mRgba.cols(), mRgba.rows(), Bitmap.Config.ARGB_8888); + try { + Utils.matToBitmap(mRgba, bmp); + } catch(Exception e) { + Log.e("processFrame", "Utils.matToBitmap() throws an exception: " + e.getMessage()); + bmp.recycle(); + bmp = null; + } + return bmp; + } diff --git a/modules/contrib/doc/retina/index.rst b/modules/contrib/doc/retina/index.rst index 913f7d1079a2cd7653e64a162b8795f3a3b9b6b4..d80e45792e94442f543674ba788dc44b2cabc88e 100644 --- a/modules/contrib/doc/retina/index.rst +++ b/modules/contrib/doc/retina/index.rst @@ -208,7 +208,7 @@ Retina::getMagno Retina::getParameters +++++++++++++++++++++ -.. ocv:function:: Retina::RetinaParameters Retina::getParameters() +.. ocv:function:: struct Retina::RetinaParameters Retina::getParameters() Retrieve the current parameters values in a *Retina::RetinaParameters* structure diff --git a/modules/contrib/include/opencv2/contrib/retina.hpp b/modules/contrib/include/opencv2/contrib/retina.hpp index 3ee291a8b7f1c95b4a2348eefee8c1582de88369..ab8bc360c245bccb3988c1dc265bbd613fd3183c 100644 --- a/modules/contrib/include/opencv2/contrib/retina.hpp +++ b/modules/contrib/include/opencv2/contrib/retina.hpp @@ -203,10 +203,10 @@ public: */ void setup(RetinaParameters newParameters); - /** - * @return the current parameters setup - */ - struct Retina::RetinaParameters getParameters(); + /** + * @return the current parameters setup + */ + struct Retina::RetinaParameters getParameters(); /** * parameters setup display method diff --git a/modules/highgui/src/grfmt_jpeg.cpp b/modules/highgui/src/grfmt_jpeg.cpp index 6ecf2d6542fc6aaacb0a981990aa0310b990fe63..521517639fc8faaa275797c7a87bf3817bf21a41 100644 --- a/modules/highgui/src/grfmt_jpeg.cpp +++ b/modules/highgui/src/grfmt_jpeg.cpp @@ -63,6 +63,9 @@ typedef unsigned char boolean; #endif +#undef FALSE +#undef TRUE + extern "C" { #include "jpeglib.h" } diff --git a/modules/imgproc/perf/perf_houghLines.cpp b/modules/imgproc/perf/perf_houghLines.cpp index c6cc6e439a99136d703673a23fa21406afb4e95f..4e6b5b3fbaeb6853dc7d72c03efad013bc07f5f7 100644 --- a/modules/imgproc/perf/perf_houghLines.cpp +++ b/modules/imgproc/perf/perf_houghLines.cpp @@ -36,18 +36,5 @@ PERF_TEST_P(Image_RhoStep_ThetaStep_Threshold, HoughLines, TEST_CYCLE() HoughLines(image, lines, rhoStep, thetaStep, threshold); -#ifdef WIN32 - //FIXME: ugly fix to make sanity check pass on Win32, must be investigated, issue #2617 - if (lines.cols == 2015) - { - lines = lines(Rect(0, 0, lines.cols - 1, lines.rows)); - SANITY_CHECK(lines, 800.0); - } - else - { - SANITY_CHECK(lines); - } -#else SANITY_CHECK(lines); -#endif } diff --git a/modules/imgproc/src/histogram.cpp b/modules/imgproc/src/histogram.cpp index 3f0c3daa2969c51aafebfcf6cdcadf2d3abf1b74..864b49b314d23e817cf228281f676422f02c0ade 100644 --- a/modules/imgproc/src/histogram.cpp +++ b/modules/imgproc/src/histogram.cpp @@ -3023,7 +3023,7 @@ public: localHistogram[t0]++; localHistogram[t1]++; } - for (; x < width; ++x, ++ptr) + for (; x < width; ++x) localHistogram[ptr[x]]++; } diff --git a/modules/imgproc/src/templmatch.cpp b/modules/imgproc/src/templmatch.cpp index 5e1ad20343aad8df8cd441e9e484d2cffbfc9e1e..0a3b95d7c71b51050354d251cafc49601329489b 100644 --- a/modules/imgproc/src/templmatch.cpp +++ b/modules/imgproc/src/templmatch.cpp @@ -346,7 +346,10 @@ void cv::matchTemplate( InputArray _img, InputArray _templ, OutputArray _result, } if( numType == 2 ) + { num = wndSum2 - 2*num + templSum2; + num = MAX(num, 0.); + } } if( isNormed ) diff --git a/modules/java/generator/gen_java.py b/modules/java/generator/gen_java.py index c60730fad3302823857e0e08afcc7c2ef11f3bc2..429360cd28433aa5768442c69fc1bfa8b81e1713 100755 --- a/modules/java/generator/gen_java.py +++ b/modules/java/generator/gen_java.py @@ -1243,6 +1243,10 @@ extern "C" { jni_name = "&%(n)s" else: jni_name = "%(n)s" + if not a.out and not "jni_var" in type_dict[a.ctype]: + # explicit cast to C type to avoid ambiguous call error on platforms (mingw) + # where jni types are different from native types (e.g. jint is not the same as int) + jni_name = "(%s)%s" % (a.ctype, jni_name) if not a.ctype: # hidden jni_name = a.defval cvargs.append( type_dict[a.ctype].get("jni_name", jni_name) % {"n" : a.name}) @@ -1267,8 +1271,7 @@ JNIEXPORT $rtype JNICALL Java_org_opencv_${module}_${clazz}_$fname LOGD("$module::$fname()"); $prologue $retval$cvname( $cvargs ); - $epilogue - $ret + $epilogue$ret } catch(cv::Exception e) { LOGD("$module::$fname() catched cv::Exception: %s", e.what()); jclass je = env->FindClass("org/opencv/core/CvException"); @@ -1292,7 +1295,7 @@ JNIEXPORT $rtype JNICALL Java_org_opencv_${module}_${clazz}_$fname args = ", ".join(["%s %s" % (type_dict[a.ctype].get("jni_type"), a.name) for a in jni_args]), \ argst = ", ".join([type_dict[a.ctype].get("jni_type") for a in jni_args]), \ prologue = "\n ".join(c_prologue), \ - epilogue = " ".join(c_epilogue), \ + epilogue = " ".join(c_epilogue) + ("\n " if c_epilogue else ""), \ ret = ret, \ cvname = cvname, \ cvargs = ", ".join(cvargs), \ diff --git a/modules/java/generator/rst_parser.py b/modules/java/generator/rst_parser.py index f4ef5819044917593d8a986050b37cffba9d5a84..a9f5e04c99b1de609c330fdd013fcb4e5ff6c0bd 100755 --- a/modules/java/generator/rst_parser.py +++ b/modules/java/generator/rst_parser.py @@ -11,7 +11,7 @@ params_blacklist = { "fromarray" : ("object", "allowND"), # python only function "reprojectImageTo3D" : ("ddepth"), # python only argument "composeRT" : ("d*d*"), # wildchards in parameter names are not supported by this parser - "CvSVM::train_auto" : ("\*Grid"), # wildchards in parameter names are not supported by this parser + "CvSVM::train_auto" : ("\\*Grid"), # wildchards in parameter names are not supported by this parser "error" : "args", # parameter of supporting macro "getConvertElem" : ("from", "cn", "to", "beta", "alpha"), # arguments of returned functions "gpu::swapChannels" : ("dstOrder") # parameter is not parsed correctly by the hdr_parser @@ -71,7 +71,8 @@ class DeclarationParser(object): def isready(self): return self.balance == 0 - def getLang(self, line): + @classmethod + def getLang(cls, line): if line.startswith(".. ocv:function::"): return "C++" if line.startswith(".. ocv:cfunction::"): @@ -98,7 +99,7 @@ class ParamParser(object): offset = line.find(":param") assert offset > 0 self.prefix = line[:offset] - assert self.prefix==" "*len(self.prefix), ":param definition should be prefixed with spaces" + assert self.prefix == " "*len(self.prefix), ":param definition should be prefixed with spaces" line = line[offset + 6:].lstrip() name_end = line.find(":") assert name_end > 0 @@ -115,7 +116,8 @@ class ParamParser(object): else: self.active = False - def hasDeclaration(self, line): + @classmethod + def hasDeclaration(cls, line): return line.lstrip().startswith(":param") class RstParser(object): @@ -177,6 +179,7 @@ class RstParser(object): was_code_line = False fdecl = DeclarationParser() pdecl = ParamParser() + ll = None for l in lines: # read tail of function/method declaration if needed @@ -189,7 +192,7 @@ class RstParser(object): # continue capture seealso if capturing_seealso: if not l or l.startswith(" "): - seealso = func.get("seealso",[]) + seealso = func.get("seealso", []) seealso.extend(l.split(",")) func["seealso"] = seealso continue @@ -206,9 +209,7 @@ class RstParser(object): if skip_code_lines: if not l: continue - if l.startswith(" "): - None - else: + if not l.startswith(" "): skip_code_lines = False if ll.startswith(".. code-block::") or ll.startswith(".. image::"): @@ -248,7 +249,7 @@ class RstParser(object): if ll.endswith(".. seealso::"): capturing_seealso = True else: - seealso = func.get("seealso",[]) + seealso = func.get("seealso", []) seealso.extend(ll[ll.find("::")+2:].split(",")) func["seealso"] = seealso continue @@ -300,12 +301,12 @@ class RstParser(object): if (was_code_line): func["long"] = func.get("long", "") + "\n" + ll + "\n" else: - was_code_line = True; + was_code_line = True func["long"] = func.get("long", "") + ll +"\n\n\n // C++ code:\n\n" else: if (was_code_line): - func["long"] = func.get("long", "") + "\n" + ll + "\n\n"; - was_code_line = False; + func["long"] = func.get("long", "") + "\n" + ll + "\n\n" + was_code_line = False else: func["long"] = func.get("long", "") + "\n" + ll # endfor l in lines @@ -377,7 +378,8 @@ class RstParser(object): if len(lines) > 1: self.parse_section_safe(module_name, fname, doc, flineno, lines) - def parse_namespace(self, func, section_name): + @classmethod + def parse_namespace(cls, func, section_name): known_namespaces = ["cv", "gpu", "flann"] l = section_name.strip() for namespace in known_namespaces: @@ -390,7 +392,7 @@ class RstParser(object): if decl.fdecl.endswith(";"): print >> sys.stderr, "RST parser error E%03d: unexpected semicolon at the end of declaration in \"%s\" at %s:%s" \ % (ERROR_011_EOLEXPECTED, func["name"], func["file"], func["line"]) - decls = func.get("decls",[]) + decls = func.get("decls", []) if (decl.lang == "C++" or decl.lang == "C"): rst_decl = self.cpp_parser.parse_func_decl_no_wrap(decl.fdecl) decls.append( [decl.lang, decl.fdecl, rst_decl] ) @@ -398,8 +400,9 @@ class RstParser(object): decls.append( [decl.lang, decl.fdecl] ) func["decls"] = decls - def add_new_pdecl(self, func, decl): - params = func.get("params",{}) + @classmethod + def add_new_pdecl(cls, func, decl): + params = func.get("params", {}) if decl.name in params: if show_errors: #check black_list @@ -416,8 +419,8 @@ class RstParser(object): print >> out, "SKIPPED DEFINITION:" print >> out, "name: %s" % (func.get("name","~empty~")) print >> out, "file: %s:%s" % (func.get("file","~empty~"), func.get("line","~empty~")) - print >> out, "is class: %s" % func.get("isclass",False) - print >> out, "is struct: %s" % func.get("isstruct",False) + print >> out, "is class: %s" % func.get("isclass", False) + print >> out, "is struct: %s" % func.get("isstruct", False) print >> out, "module: %s" % func.get("module","~unknown~") print >> out, "namespace: %s" % func.get("namespace", "~empty~") print >> out, "class: %s" % (func.get("class","~empty~")) @@ -426,7 +429,7 @@ class RstParser(object): if "decls" in func: print >> out, "declarations:" for d in func["decls"]: - print >> out, " %7s: %s" % (d[0], re.sub(r"[ ]+", " ", d[1])) + print >> out, " %7s: %s" % (d[0], re.sub(r"[ ]+", " ", d[1])) if "seealso" in func: print >> out, "seealso: ", func["seealso"] if "params" in func: @@ -437,8 +440,8 @@ class RstParser(object): print >> out def validate(self, func): - if func.get("decls",None) is None: - if not func.get("isclass",False) and not func.get("isstruct",False): + if func.get("decls", None) is None: + if not func.get("isclass", False) and not func.get("isstruct", False): return False if func["name"] in self.definitions: if show_errors: @@ -448,7 +451,7 @@ class RstParser(object): return self.validateParams(func) def validateParams(self, func): - documentedParams = func.get("params",{}).keys() + documentedParams = func.get("params", {}).keys() params = [] for decl in func.get("decls", []): @@ -486,11 +489,11 @@ class RstParser(object): if "class" in func: func["class"] = self.normalizeText(func["class"]) if "brief" in func: - func["brief"] = self.normalizeText(func.get("brief",None)) + func["brief"] = self.normalizeText(func.get("brief", None)) if not func["brief"]: del func["brief"] if "long" in func: - func["long"] = self.normalizeText(func.get("long",None)) + func["long"] = self.normalizeText(func.get("long", None)) if not func["long"]: del func["long"] if "decls" in func: @@ -518,7 +521,7 @@ class RstParser(object): del func["seealso"] # special case for old C functions - section name should omit "cv" prefix - if not func.get("isclass",False) and not func.get("isstruct",False): + if not func.get("isclass", False) and not func.get("isstruct", False): self.fixOldCFunctionName(func) return func @@ -616,7 +619,7 @@ class RstParser(object): s = re.sub(r" +", " ", s) # restore math - s = re.sub(r" *
*","\n", s) + s = re.sub(r" *
*", "\n", s) # remove extra space before . s = re.sub(r"[\n ]+\.", ".", s) @@ -642,13 +645,13 @@ class RstParser(object): classes = 0 structs = 0 for name, d in self.definitions.items(): - if d.get("isclass", False): - classes += 1 - elif d.get("isstruct", False): - structs += 1 - else: - for decl in d.get("decls",[]): - stat[decl[0]] = stat.get(decl[0],0) + 1 + if d.get("isclass", False): + classes += 1 + elif d.get("isstruct", False): + structs += 1 + else: + for decl in d.get("decls", []): + stat[decl[0]] = stat.get(decl[0], 0) + 1 print print " classes documented: %s" % classes diff --git a/modules/ml/src/boost.cpp b/modules/ml/src/boost.cpp index eb8bebc791030adbf3428c6bffa6ad079a6cc030..3525a1173a054c8afb5fd661b79ffb8065f2d0a4 100644 --- a/modules/ml/src/boost.cpp +++ b/modules/ml/src/boost.cpp @@ -1598,7 +1598,6 @@ CvBoost::predict( const CvMat* _sample, const CvMat* _missing, { float value = -FLT_MAX; - CvMat sample, missing; CvSeqReader reader; double sum = 0; int wstep = 0; @@ -1648,10 +1647,15 @@ CvBoost::predict( const CvMat* _sample, const CvMat* _missing, const int* cmap = data->cat_map->data.i; const int* cofs = data->cat_ofs->data.i; + cv::Mat sample = _sample; + cv::Mat missing; + if(!_missing) + missing = _missing; + // if need, preprocess the input vector if( !raw_mode ) { - int step, mstep = 0; + int sstep, mstep = 0; const float* src_sample; const uchar* src_mask = 0; float* dst_sample; @@ -1660,12 +1664,14 @@ CvBoost::predict( const CvMat* _sample, const CvMat* _missing, const int* vidx_abs = active_vars_abs->data.i; bool have_mask = _missing != 0; - cv::AutoBuffer buf(var_count + (var_count+3)/4); - dst_sample = &buf[0]; - dst_mask = (uchar*)&buf[var_count]; + sample = cv::Mat(1, var_count, CV_32FC1); + missing = cv::Mat(1, var_count, CV_8UC1); + + dst_sample = sample.ptr(); + dst_mask = missing.ptr(); src_sample = _sample->data.fl; - step = CV_IS_MAT_CONT(_sample->type) ? 1 : _sample->step/sizeof(src_sample[0]); + sstep = CV_IS_MAT_CONT(_sample->type) ? 1 : _sample->step/sizeof(src_sample[0]); if( _missing ) { @@ -1676,7 +1682,7 @@ CvBoost::predict( const CvMat* _sample, const CvMat* _missing, for( i = 0; i < var_count; i++ ) { int idx = vidx[i], idx_abs = vidx_abs[i]; - float val = src_sample[idx_abs*step]; + float val = src_sample[idx_abs*sstep]; int ci = vtype[idx]; uchar m = src_mask ? src_mask[idx_abs*mstep] : (uchar)0; @@ -1715,14 +1721,8 @@ CvBoost::predict( const CvMat* _sample, const CvMat* _missing, dst_mask[i] = m; } - sample = cvMat( 1, var_count, CV_32F, dst_sample ); - _sample = &sample; - - if( have_mask ) - { - missing = cvMat( 1, var_count, CV_8UC1, dst_mask ); - _missing = &missing; - } + if( !have_mask ) + missing.release(); } else { @@ -1733,9 +1733,9 @@ CvBoost::predict( const CvMat* _sample, const CvMat* _missing, cvStartReadSeq( weak, &reader ); cvSetSeqReaderPos( &reader, slice.start_index ); - sample_data = _sample->data.fl; + sample_data = sample.ptr(); - if( !have_active_cat_vars && !_missing && !weak_responses ) + if( !have_active_cat_vars && missing.empty() && !weak_responses ) { for( i = 0; i < weak_count; i++ ) { @@ -1760,7 +1760,7 @@ CvBoost::predict( const CvMat* _sample, const CvMat* _missing, else { const int* avars = active_vars->data.i; - const uchar* m = _missing ? _missing->data.ptr : 0; + const uchar* m = !missing.empty() ? missing.ptr() : 0; // full-featured version for( i = 0; i < weak_count; i++ ) @@ -2147,5 +2147,3 @@ CvBoost::predict( const Mat& _sample, const Mat& _missing, } /* End of file. */ - - diff --git a/modules/objdetect/src/cascadedetect.cpp b/modules/objdetect/src/cascadedetect.cpp index ad3a7305224cad2f9e6c9f1cd76e2ce2ef325633..38c2e0a0bba96450fb38c8f46222dce60ad0bb78 100644 --- a/modules/objdetect/src/cascadedetect.cpp +++ b/modules/objdetect/src/cascadedetect.cpp @@ -992,9 +992,9 @@ public: { mtx->lock(); rectangles->push_back(Rect(cvRound(x*scalingFactor), cvRound(y*scalingFactor), winSize.width, winSize.height)); - mtx->unlock(); rejectLevels->push_back(-result); levelWeights->push_back(gypWeight); + mtx->unlock(); } } else if( result > 0 ) diff --git a/modules/objdetect/src/haar.cpp b/modules/objdetect/src/haar.cpp index 96bc7603b60ecd1c8a66a5f708f3242d22451fca..54133f5f31ca36a986b46982becfde75bde312ff 100644 --- a/modules/objdetect/src/haar.cpp +++ b/modules/objdetect/src/haar.cpp @@ -1277,14 +1277,15 @@ cvRunHaarClassifierCascade( const CvHaarClassifierCascade* _cascade, namespace cv { -struct HaarDetectObjects_ScaleImage_Invoker +class HaarDetectObjects_ScaleImage_Invoker : public ParallelLoopBody { +public: HaarDetectObjects_ScaleImage_Invoker( const CvHaarClassifierCascade* _cascade, int _stripSize, double _factor, const Mat& _sum1, const Mat& _sqsum1, Mat* _norm1, - Mat* _mask1, Rect _equRect, ConcurrentRectVector& _vec, + Mat* _mask1, Rect _equRect, std::vector& _vec, std::vector& _levels, std::vector& _weights, - bool _outputLevels ) + bool _outputLevels, Mutex *_mtx ) { cascade = _cascade; stripSize = _stripSize; @@ -1297,13 +1298,14 @@ struct HaarDetectObjects_ScaleImage_Invoker vec = &_vec; rejectLevels = _outputLevels ? &_levels : 0; levelWeights = _outputLevels ? &_weights : 0; + mtx = _mtx; } - void operator()( const BlockedRange& range ) const + void operator()( const Range& range ) const { Size winSize0 = cascade->orig_window_size; Size winSize(cvRound(winSize0.width*factor), cvRound(winSize0.height*factor)); - int y1 = range.begin()*stripSize, y2 = min(range.end()*stripSize, sum1.rows - 1 - winSize0.height); + int y1 = range.start*stripSize, y2 = min(range.end*stripSize, sum1.rows - 1 - winSize0.height); if (y2 <= y1 || sum1.cols <= 1 + winSize0.width) return; @@ -1356,8 +1358,10 @@ struct HaarDetectObjects_ScaleImage_Invoker for( x = 0; x < ssz.width; x += ystep ) if( mask1row[x] != 0 ) { + mtx->lock(); vec->push_back(Rect(cvRound(x*factor), cvRound(y*factor), winSize.width, winSize.height)); + mtx->unlock(); if( --positive == 0 ) break; } @@ -1378,17 +1382,23 @@ struct HaarDetectObjects_ScaleImage_Invoker result = -1*cascade->count; if( cascade->count + result < 4 ) { + mtx->lock(); vec->push_back(Rect(cvRound(x*factor), cvRound(y*factor), winSize.width, winSize.height)); rejectLevels->push_back(-result); levelWeights->push_back(gypWeight); + mtx->unlock(); } } else { if( result > 0 ) + { + mtx->lock(); vec->push_back(Rect(cvRound(x*factor), cvRound(y*factor), winSize.width, winSize.height)); + mtx->unlock(); + } } } } @@ -1398,18 +1408,20 @@ struct HaarDetectObjects_ScaleImage_Invoker double factor; Mat sum1, sqsum1, *norm1, *mask1; Rect equRect; - ConcurrentRectVector* vec; + std::vector* vec; std::vector* rejectLevels; std::vector* levelWeights; + Mutex* mtx; }; -struct HaarDetectObjects_ScaleCascade_Invoker +class HaarDetectObjects_ScaleCascade_Invoker : public ParallelLoopBody { +public: HaarDetectObjects_ScaleCascade_Invoker( const CvHaarClassifierCascade* _cascade, Size _winsize, const Range& _xrange, double _ystep, size_t _sumstep, const int** _p, const int** _pq, - ConcurrentRectVector& _vec ) + std::vector& _vec, Mutex* _mtx ) { cascade = _cascade; winsize = _winsize; @@ -1418,11 +1430,12 @@ struct HaarDetectObjects_ScaleCascade_Invoker sumstep = _sumstep; p = _p; pq = _pq; vec = &_vec; + mtx = _mtx; } - void operator()( const BlockedRange& range ) const + void operator()( const Range& range ) const { - int iy, startY = range.begin(), endY = range.end(); + int iy, startY = range.start, endY = range.end; const int *p0 = p[0], *p1 = p[1], *p2 = p[2], *p3 = p[3]; const int *pq0 = pq[0], *pq1 = pq[1], *pq2 = pq[2], *pq3 = pq[3]; bool doCannyPruning = p0 != 0; @@ -1449,7 +1462,11 @@ struct HaarDetectObjects_ScaleCascade_Invoker int result = cvRunHaarClassifierCascade( cascade, cvPoint(x, y), 0 ); if( result > 0 ) + { + mtx->lock(); vec->push_back(Rect(x, y, winsize.width, winsize.height)); + mtx->unlock(); + } ixstep = result != 0 ? 1 : 2; } } @@ -1462,7 +1479,8 @@ struct HaarDetectObjects_ScaleCascade_Invoker Range xrange; const int** p; const int** pq; - ConcurrentRectVector* vec; + std::vector* vec; + Mutex* mtx; }; @@ -1482,7 +1500,7 @@ cvHaarDetectObjectsForROC( const CvArr* _img, CvSeq* result_seq = 0; cv::Ptr temp_storage; - cv::ConcurrentRectVector allCandidates; + std::vector allCandidates; std::vector rectList; std::vector rweights; double factor; @@ -1490,6 +1508,7 @@ cvHaarDetectObjectsForROC( const CvArr* _img, bool doCannyPruning = (flags & CV_HAAR_DO_CANNY_PRUNING) != 0; bool findBiggestObject = (flags & CV_HAAR_FIND_BIGGEST_OBJECT) != 0; bool roughSearch = (flags & CV_HAAR_DO_ROUGH_SEARCH) != 0; + cv::Mutex mtx; if( !CV_IS_HAAR_CLASSIFIER(cascade) ) CV_Error( !cascade ? CV_StsNullPtr : CV_StsBadArg, "Invalid classifier cascade" ); @@ -1599,11 +1618,11 @@ cvHaarDetectObjectsForROC( const CvArr* _img, cvSetImagesForHaarClassifierCascade( cascade, &sum1, &sqsum1, _tilted, 1. ); cv::Mat _norm1(&norm1), _mask1(&mask1); - cv::parallel_for(cv::BlockedRange(0, stripCount), + cv::parallel_for_(cv::Range(0, stripCount), cv::HaarDetectObjects_ScaleImage_Invoker(cascade, (((sz1.height + stripCount - 1)/stripCount + ystep-1)/ystep)*ystep, factor, cv::Mat(&sum1), cv::Mat(&sqsum1), &_norm1, &_mask1, - cv::Rect(equRect), allCandidates, rejectLevels, levelWeights, outputRejectLevels)); + cv::Rect(equRect), allCandidates, rejectLevels, levelWeights, outputRejectLevels, &mtx)); } } else @@ -1695,10 +1714,10 @@ cvHaarDetectObjectsForROC( const CvArr* _img, endX = cvRound((scanROI.x + scanROI.width - winSize.width) / ystep); } - cv::parallel_for(cv::BlockedRange(startY, endY), + cv::parallel_for_(cv::Range(startY, endY), cv::HaarDetectObjects_ScaleCascade_Invoker(cascade, winSize, cv::Range(startX, endX), ystep, sum->step, (const int**)p, - (const int**)pq, allCandidates )); + (const int**)pq, allCandidates, &mtx )); if( findBiggestObject && !allCandidates.empty() && scanROI.area() == 0 ) { diff --git a/modules/ocl/doc/feature_detection_and_description.rst b/modules/ocl/doc/feature_detection_and_description.rst index aa2ed857c817c3689855784f10853fdba9721e8a..a6416d4e607479f196e7456656554d71a65096b1 100644 --- a/modules/ocl/doc/feature_detection_and_description.rst +++ b/modules/ocl/doc/feature_detection_and_description.rst @@ -36,8 +36,8 @@ Finds edges in an image using the [Canny86]_ algorithm. .. seealso:: :ocv:func:`Canny` -ocl::BruteForceMatcher_OCL --------------------------- +ocl::BruteForceMatcher_OCL_base +------------------------------- .. ocv:class:: ocl::BruteForceMatcher_OCL_base Brute-force descriptor matcher. For each descriptor in the first set, this matcher finds the closest descriptor in the second set by trying each one. This descriptor matcher supports masking permissible matches between descriptor sets. :: @@ -162,7 +162,7 @@ Finds the best match for each descriptor from a query set with train descriptors .. ocv:function:: void ocl::BruteForceMatcher_OCL_base::match(const oclMat& query, std::vector& matches, const std::vector& masks = std::vector()) -.. ocv:function:: void ocl::BruteForceMatcher_OCL_base::matchCollection(const oclMat& query, const oclMat& trainCollection, oclMat& trainIdx, oclMat& imgIdx, oclMat& distance, const oclMat& masks) +.. ocv:function:: void ocl::BruteForceMatcher_OCL_base::matchCollection( const oclMat& query, const oclMat& trainCollection, oclMat& trainIdx, oclMat& imgIdx, oclMat& distance, const oclMat& masks=oclMat() ) .. seealso:: :ocv:func:`DescriptorMatcher::match` @@ -175,15 +175,13 @@ Performs a GPU collection of train descriptors and masks in a suitable format fo .. ocv:function:: void ocl::BruteForceMatcher_OCL_base::makeGpuCollection(oclMat& trainCollection, oclMat& maskCollection, const vector& masks = std::vector()) - ocl::BruteForceMatcher_OCL_base::matchDownload ---------------------------------------------- Downloads matrices obtained via :ocv:func:`ocl::BruteForceMatcher_OCL_base::matchSingle` or :ocv:func:`ocl::BruteForceMatcher_OCL_base::matchCollection` to vector with :ocv:class:`DMatch`. -.. ocv:function:: void ocl::BruteForceMatcher_OCL_base::matchDownload(const oclMat& trainIdx, const oclMat& distance, std::vector&matches) - -.. ocv:function:: void ocl::BruteForceMatcher_OCL_base::matchDownload(const oclMat& trainIdx, oclMat& imgIdx, const oclMat& distance, std::vector&matches) +.. ocv:function:: static void ocl::BruteForceMatcher_OCL_base::matchDownload( const oclMat& trainIdx, const oclMat& distance, std::vector& matches ) +.. ocv:function:: static void ocl::BruteForceMatcher_OCL_base::matchDownload( const oclMat& trainIdx, const oclMat& imgIdx, const oclMat& distance, std::vector& matches ) ocl::BruteForceMatcher_OCL_base::matchConvert @@ -310,7 +308,7 @@ If ``compactResult`` is ``true`` , the ``matches`` vector does not contain match ocl::HOGDescriptor ------------------ -.. ocv:class:: ocl::HOGDescriptor +.. ocv:struct:: ocl::HOGDescriptor The class implements Histogram of Oriented Gradients ([Dalal2005]_) object detector. :: diff --git a/modules/ocl/doc/image_filtering.rst b/modules/ocl/doc/image_filtering.rst index 20e90c3d90b533a49a396bb09cef80021a781d8d..ca97d3a93b8484d11fe6c02c850f5eac061dfd1b 100644 --- a/modules/ocl/doc/image_filtering.rst +++ b/modules/ocl/doc/image_filtering.rst @@ -7,7 +7,7 @@ ocl::Sobel ------------------ Returns void -.. ocv:function:: void Sobel(const oclMat &src, oclMat &dst, int ddepth, int dx, int dy, int ksize = 3, double scale = 1, double delta = 0.0, int bordertype = BORDER_DEFAULT) +.. ocv:function:: void ocl::Sobel(const oclMat &src, oclMat &dst, int ddepth, int dx, int dy, int ksize = 3, double scale = 1, double delta = 0.0, int bordertype = BORDER_DEFAULT) :param src: The source image @@ -33,7 +33,7 @@ ocl::Scharr ------------------ Returns void -.. ocv:function:: void Scharr(const oclMat &src, oclMat &dst, int ddepth, int dx, int dy, double scale = 1, double delta = 0.0, int bordertype = BORDER_DEFAULT) +.. ocv:function:: void ocl::Scharr(const oclMat &src, oclMat &dst, int ddepth, int dx, int dy, double scale = 1, double delta = 0.0, int bordertype = BORDER_DEFAULT) :param src: The source image @@ -57,7 +57,7 @@ ocl::GaussianBlur ------------------ Returns void -.. ocv:function:: void GaussianBlur(const oclMat &src, oclMat &dst, Size ksize, double sigma1, double sigma2 = 0, int bordertype = BORDER_DEFAULT) +.. ocv:function:: void ocl::GaussianBlur(const oclMat &src, oclMat &dst, Size ksize, double sigma1, double sigma2 = 0, int bordertype = BORDER_DEFAULT) :param src: The source image @@ -75,7 +75,7 @@ ocl::boxFilter ------------------ Returns void -.. ocv:function:: void boxFilter(const oclMat &src, oclMat &dst, int ddepth, Size ksize, Point anchor = Point(-1, -1), int borderType = BORDER_DEFAULT) +.. ocv:function:: void ocl::boxFilter(const oclMat &src, oclMat &dst, int ddepth, Size ksize, Point anchor = Point(-1, -1), int borderType = BORDER_DEFAULT) :param src: The source image @@ -95,7 +95,7 @@ ocl::Laplacian ------------------ Returns void -.. ocv:function:: void Laplacian(const oclMat &src, oclMat &dst, int ddepth, int ksize = 1, double scale = 1) +.. ocv:function:: void ocl::Laplacian(const oclMat &src, oclMat &dst, int ddepth, int ksize = 1, double scale = 1) :param src: The source image @@ -113,7 +113,7 @@ ocl::convolve ------------------ Returns void -.. ocv:function:: void convolve(const oclMat &image, const oclMat &temp1, oclMat &result) +.. ocv:function:: void ocl::convolve(const oclMat &image, const oclMat &temp1, oclMat &result) :param image: The source image @@ -127,7 +127,7 @@ ocl::bilateralFilter -------------------- Returns void -.. ocv:function:: void bilateralFilter(const oclMat &src, oclMat &dst, int d, double sigmaColor, double sigmaSpave, int borderType=BORDER_DEFAULT) +.. ocv:function:: void ocl::bilateralFilter(const oclMat &src, oclMat &dst, int d, double sigmaColor, double sigmaSpave, int borderType=BORDER_DEFAULT) :param src: The source image @@ -147,7 +147,7 @@ ocl::copyMakeBorder -------------------- Returns void -.. ocv:function:: void copyMakeBorder(const oclMat &src, oclMat &dst, int top, int bottom, int left, int right, int boardtype, const Scalar &value = Scalar()) +.. ocv:function:: void ocl::copyMakeBorder(const oclMat &src, oclMat &dst, int top, int bottom, int left, int right, int boardtype, const Scalar &value = Scalar()) :param src: The source image @@ -165,7 +165,7 @@ ocl::dilate ------------------ Returns void -.. ocv:function:: void dilate( const oclMat &src, oclMat &dst, const Mat &kernel, Point anchor = Point(-1, -1), int iterations = 1, int borderType = BORDER_CONSTANT, const Scalar &borderValue = morphologyDefaultBorderValue()) +.. ocv:function:: void ocl::dilate( const oclMat &src, oclMat &dst, const Mat &kernel, Point anchor = Point(-1, -1), int iterations = 1, int borderType = BORDER_CONSTANT, const Scalar &borderValue = morphologyDefaultBorderValue()) :param src: The source image @@ -187,7 +187,7 @@ ocl::erode ------------------ Returns void -.. ocv:function:: void erode( const oclMat &src, oclMat &dst, const Mat &kernel, Point anchor = Point(-1, -1), int iterations = 1, int borderType = BORDER_CONSTANT, const Scalar &borderValue = morphologyDefaultBorderValue()) +.. ocv:function:: void ocl::erode( const oclMat &src, oclMat &dst, const Mat &kernel, Point anchor = Point(-1, -1), int iterations = 1, int borderType = BORDER_CONSTANT, const Scalar &borderValue = morphologyDefaultBorderValue()) :param src: The source image @@ -209,7 +209,7 @@ ocl::morphologyEx ------------------ Returns void -.. ocv:function:: void morphologyEx( const oclMat &src, oclMat &dst, int op, const Mat &kernel, Point anchor = Point(-1, -1), int iterations = 1, int borderType = BORDER_CONSTANT, const Scalar &borderValue = morphologyDefaultBorderValue()) +.. ocv:function:: void ocl::morphologyEx( const oclMat &src, oclMat &dst, int op, const Mat &kernel, Point anchor = Point(-1, -1), int iterations = 1, int borderType = BORDER_CONSTANT, const Scalar &borderValue = morphologyDefaultBorderValue()) :param src: The source image diff --git a/modules/ocl/doc/image_processing.rst b/modules/ocl/doc/image_processing.rst index 461fb98a5db93c2c2e7729620206bdc4c099ee85..94712e091d9ca5d0dc02629b3d765f70eb4dbdea 100644 --- a/modules/ocl/doc/image_processing.rst +++ b/modules/ocl/doc/image_processing.rst @@ -7,7 +7,7 @@ ocl::cornerHarris ------------------ Returns void -.. ocv:function:: void cornerHarris(const oclMat &src, oclMat &dst, int blockSize, int ksize, double k, int bordertype = cv::BORDER_DEFAULT) +.. ocv:function:: void ocl::cornerHarris(const oclMat &src, oclMat &dst, int blockSize, int ksize, double k, int bordertype = cv::BORDER_DEFAULT) :param src: Source image. Only CV_8UC1 and CV_32FC1 images are supported now. @@ -27,7 +27,7 @@ ocl::cornerMinEigenVal ------------------------ Returns void -.. ocv:function:: void cornerMinEigenVal(const oclMat &src, oclMat &dst, int blockSize, int ksize, int bordertype = cv::BORDER_DEFAULT) +.. ocv:function:: void ocl::cornerMinEigenVal(const oclMat &src, oclMat &dst, int blockSize, int ksize, int bordertype = cv::BORDER_DEFAULT) :param src: Source image. Only CV_8UC1 and CV_32FC1 images are supported now. @@ -45,7 +45,7 @@ ocl::calcHist ------------------ Returns void -.. ocv:function:: void calcHist(const oclMat &mat_src, oclMat &mat_hist) +.. ocv:function:: void ocl::calcHist(const oclMat &mat_src, oclMat &mat_hist) :param src: Source arrays. They all should have the same depth, CV 8U, and the same size. Each of them can have an arbitrary number of channels. @@ -57,7 +57,7 @@ ocl::remap ------------------ Returns void -.. ocv:function:: void remap(const oclMat &src, oclMat &dst, oclMat &map1, oclMat &map2, int interpolation, int bordertype, const Scalar &value = Scalar()) +.. ocv:function:: void ocl::remap(const oclMat &src, oclMat &dst, oclMat &map1, oclMat &map2, int interpolation, int bordertype, const Scalar &value = Scalar()) :param src: Source image. Only CV_8UC1 and CV_32FC1 images are supported now. @@ -79,7 +79,7 @@ ocl::resize ------------------ Returns void -.. ocv:function:: void resize(const oclMat &src, oclMat &dst, Size dsize, double fx = 0, double fy = 0, int interpolation = INTER_LINEAR) +.. ocv:function:: void ocl::resize(const oclMat &src, oclMat &dst, Size dsize, double fx = 0, double fy = 0, int interpolation = INTER_LINEAR) :param src: Source image. @@ -99,7 +99,7 @@ ocl::warpAffine ------------------ Returns void -.. ocv:function:: void warpAffine(const oclMat &src, oclMat &dst, const Mat &M, Size dsize, int flags = INTER_LINEAR) +.. ocv:function:: void ocl::warpAffine(const oclMat &src, oclMat &dst, const Mat &M, Size dsize, int flags = INTER_LINEAR) :param src: Source image. @@ -117,7 +117,7 @@ ocl::warpPerspective --------------------- Returns void -.. ocv:function:: void warpPerspective(const oclMat &src, oclMat &dst, const Mat &M, Size dsize, int flags = INTER_LINEAR) +.. ocv:function:: void ocl::warpPerspective(const oclMat &src, oclMat &dst, const Mat &M, Size dsize, int flags = INTER_LINEAR) :param src: Source image. @@ -135,7 +135,7 @@ ocl::cvtColor ------------------ Returns void -.. ocv:function:: void cvtColor(const oclMat &src, oclMat &dst, int code , int dcn = 0) +.. ocv:function:: void ocl::cvtColor(const oclMat &src, oclMat &dst, int code , int dcn = 0) :param src: Source image. @@ -151,7 +151,7 @@ ocl::threshold ------------------ Returns Threshold value -.. ocv:function:: double threshold(const oclMat &src, oclMat &dst, double thresh, double maxVal, int type = THRESH_TRUNC) +.. ocv:function:: double ocl::threshold(const oclMat &src, oclMat &dst, double thresh, double maxVal, int type = THRESH_TRUNC) :param src: The source array @@ -169,7 +169,7 @@ ocl::buildWarpPlaneMaps ----------------------- Builds plane warping maps. -.. ocv:function:: void ocl::buildWarpPlaneMaps(Size src_size, Rect dst_roi, const Mat& R, double f, double s, double dist, oclMat& map_x, oclMat& map_y) +.. ocv:function:: void ocl::buildWarpPlaneMaps( Size src_size, Rect dst_roi, const Mat& K, const Mat& R, const Mat& T, float scale, oclMat& map_x, oclMat& map_y ) @@ -177,7 +177,7 @@ ocl::buildWarpCylindricalMaps ----------------------------- Builds cylindrical warping maps. -.. ocv:function:: void ocl::buildWarpCylindricalMaps(Size src_size, Rect dst_roi, const Mat& R, double f, double s, oclMat& map_x, oclMat& map_y) +.. ocv:function:: void ocl::buildWarpCylindricalMaps( Size src_size, Rect dst_roi, const Mat& K, const Mat& R, float scale, oclMat& map_x, oclMat& map_y ) @@ -186,14 +186,14 @@ ocl::buildWarpSphericalMaps --------------------------- Builds spherical warping maps. -.. ocv:function:: void ocl::buildWarpSphericalMaps(Size src_size, Rect dst_roi, const Mat& R, double f, double s, oclMat& map_x, oclMat& map_y) +.. ocv:function:: void ocl::buildWarpSphericalMaps( Size src_size, Rect dst_roi, const Mat& K, const Mat& R, float scale, oclMat& map_x, oclMat& map_y ) ocl::buildWarpPerspectiveMaps ----------------------------- Builds transformation maps for perspective transformation. -.. ocv:function:: void buildWarpAffineMaps(const Mat& M, bool inverse, Size dsize, oclMat& xmap, oclMat& ymap) +.. ocv:function:: void ocl::buildWarpAffineMaps(const Mat& M, bool inverse, Size dsize, oclMat& xmap, oclMat& ymap) :param M: *3x3* transformation matrix. @@ -212,7 +212,7 @@ ocl::buildWarpAffineMaps ------------------------ Builds transformation maps for affine transformation. -.. ocv:function:: void buildWarpAffineMaps(const Mat& M, bool inverse, Size dsize, oclMat& xmap, oclMat& ymap) +.. ocv:function:: void ocl::buildWarpAffineMaps(const Mat& M, bool inverse, Size dsize, oclMat& xmap, oclMat& ymap) :param M: *2x3* transformation matrix. diff --git a/modules/ocl/doc/matrix_reductions.rst b/modules/ocl/doc/matrix_reductions.rst index 6eb889a0387fc9e3b0661f4204442f4cdbb6d358..69b27eb6582276d40f31de814cf48a73a0a2a5f2 100644 --- a/modules/ocl/doc/matrix_reductions.rst +++ b/modules/ocl/doc/matrix_reductions.rst @@ -7,7 +7,7 @@ ocl::countNonZero ------------------ Returns the number of non-zero elements in src -.. ocv:function:: int countNonZero(const oclMat &src) +.. ocv:function:: int ocl::countNonZero(const oclMat &src) :param src: Single-channel array @@ -17,7 +17,7 @@ ocl::minMax ------------------ Returns void -.. ocv:function:: void minMax(const oclMat &src, double *minVal, double *maxVal = 0, const oclMat &mask = oclMat()) +.. ocv:function:: void ocl::minMax(const oclMat &src, double *minVal, double *maxVal = 0, const oclMat &mask = oclMat()) :param src: Single-channel array @@ -33,7 +33,7 @@ ocl::minMaxLoc ------------------ Returns void -.. ocv:function:: void minMaxLoc(const oclMat &src, double *minVal, double *maxVal = 0, Point *minLoc = 0, Point *maxLoc = 0,const oclMat &mask = oclMat()) +.. ocv:function:: void ocl::minMaxLoc(const oclMat &src, double *minVal, double *maxVal = 0, Point *minLoc = 0, Point *maxLoc = 0,const oclMat &mask = oclMat()) :param src: Single-channel array @@ -53,7 +53,7 @@ ocl::Sum ------------------ Returns the sum of matrix elements for each channel -.. ocv:function:: Scalar sum(const oclMat &m) +.. ocv:function:: Scalar ocl::sum(const oclMat &m) :param m: The Source image of all depth @@ -63,7 +63,7 @@ ocl::sqrSum ------------------ Returns the squared sum of matrix elements for each channel -.. ocv:function:: Scalar sqrSum(const oclMat &m) +.. ocv:function:: Scalar ocl::sqrSum(const oclMat &m) :param m: The Source image of all depth diff --git a/modules/ocl/doc/object_detection.rst b/modules/ocl/doc/object_detection.rst index cbbcd78d1a407ed2d2342b5e526c8c76f751c5eb..6cd3a12acc9ae417704831297b251ba852872fc9 100644 --- a/modules/ocl/doc/object_detection.rst +++ b/modules/ocl/doc/object_detection.rst @@ -3,12 +3,13 @@ Object Detection .. highlight:: cpp -ocl::oclCascadeClassifier +ocl::OclCascadeClassifier ------------------------- +.. ocv:class:: ocl::OclCascadeClassifier : public CascadeClassifier Cascade classifier class used for object detection. Supports HAAR cascade classifier in the form of cross link :: - class CV_EXPORTS OclCascadeClassifier : public cv::CascadeClassifier + class CV_EXPORTS OclCascadeClassifier : public CascadeClassifier { public: OclCascadeClassifier() {}; @@ -19,11 +20,11 @@ Cascade classifier class used for object detection. Supports HAAR cascade classi CvSize maxSize = cvSize(0, 0)); }; -ocl::oclCascadeClassifier::oclHaarDetectObjects +ocl::OclCascadeClassifier::oclHaarDetectObjects ------------------------------------------------------ Returns the detected objects by a list of rectangles -.. ocv:function:: CvSeq *OclCascadeClassifier::oclHaarDetectObjects(oclMat &gimg, CvMemStorage *storage, double scaleFactor,int minNeighbors, int flags, CvSize minSize = cvSize(0, 0), CvSize maxSize = cvSize(0, 0)) +.. ocv:function:: CvSeq* ocl::OclCascadeClassifier::oclHaarDetectObjects(oclMat &gimg, CvMemStorage *storage, double scaleFactor,int minNeighbors, int flags, CvSize minSize = cvSize(0, 0), CvSize maxSize = cvSize(0, 0)) :param image: Matrix of type CV_8U containing an image where objects should be detected. @@ -39,7 +40,7 @@ Detects objects of different sizes in the input image,only tested for face detec ocl::MatchTemplateBuf --------------------- -.. ocv:class:: ocl::MatchTemplateBuf +.. ocv:struct:: ocl::MatchTemplateBuf Class providing memory buffers for :ocv:func:`ocl::matchTemplate` function, plus it allows to adjust some specific parameters. :: diff --git a/modules/ocl/doc/operations_on_matrices.rst b/modules/ocl/doc/operations_on_matrices.rst index 27696ca136885557c5429647dba8ef23976ebab8..145659b9916e73c516fa2e39765ebfd2c779cdb8 100644 --- a/modules/ocl/doc/operations_on_matrices.rst +++ b/modules/ocl/doc/operations_on_matrices.rst @@ -3,11 +3,11 @@ Operations on Matrics .. highlight:: cpp -ocl::convertTo ------------------- +ocl::oclMat::convertTo +---------------------- Returns void -.. ocv:function:: void convertTo( oclMat &m, int rtype, double alpha = 1, double beta = 0 ) const +.. ocv:function:: void ocl::oclMat::convertTo( oclMat &m, int rtype, double alpha = 1, double beta = 0 ) const :param m: The destination matrix. If it does not have a proper size or type before the operation, it will be reallocated @@ -19,11 +19,11 @@ Returns void The method converts source pixel values to the target datatype. saturate cast is applied in the end to avoid possible overflows. Supports CV_8UC1, CV_8UC4, CV_32SC1, CV_32SC4, CV_32FC1, CV_32FC4. -ocl::copyTo ------------------- +ocl::oclMat::copyTo +------------------- Returns void -.. ocv:function:: void copyTo( oclMat &m, const oclMat &mask ) const +.. ocv:function:: void ocl::oclMat::copyTo( oclMat &m, const oclMat &mask ) const :param m: The destination matrix. If it does not have a proper size or type before the operation, it will be reallocated @@ -31,11 +31,11 @@ Returns void Copies the matrix to another one. Supports CV_8UC1, CV_8UC4, CV_32SC1, CV_32SC4, CV_32FC1, CV_32FC4 -ocl::setTo +ocl::oclMat::setTo ------------------ Returns oclMat -.. ocv:function:: oclMat &setTo(const Scalar &s, const oclMat &mask = oclMat()) +.. ocv:function:: oclMat& ocl::oclMat::setTo(const Scalar &s, const oclMat &mask = oclMat()) :param s: Assigned scalar, which is converted to the actual array type @@ -47,15 +47,16 @@ ocl::absdiff ------------------ Returns void -.. ocv:function:: void absdiff(const oclMat &a, const oclMat &b, oclMat &c) +.. ocv:function:: void ocl::absdiff( const oclMat& a, const oclMat& b, oclMat& c ) + +.. ocv:function:: void ocl::absdiff( const oclMat& a, const Scalar& s, oclMat& c ) -.. ocv:function:: void absdiff(const oclMat &a, const Scalar& sc, oclMat &c) :param a: The first input array :param b: The second input array, must be the same size and same type as a - :param sc: Scalar, the second input parameter + :param s: Scalar, the second input parameter :param c: The destination array, it will have the same size and same type as a @@ -65,17 +66,19 @@ ocl::add ------------------ Returns void -.. ocv:function:: void add(const oclMat &src1, const oclMat &src2, oclMat &dst, const oclMat& mask=oclMat()) +.. ocv:function:: void ocl::add( const oclMat & a, const oclMat & b, oclMat & c ) -.. ocv:function:: void add(const oclMat &src1, const Scalar &sc, oclMat &dst, const oclMat& mask=oclMat()) +.. ocv:function:: void ocl::add( const oclMat & a, const oclMat & b, oclMat & c, const oclMat & mask ) - :param src1: The first input array +.. ocv:function:: void ocl::add( const oclMat & a, const Scalar & sc, oclMat & c, const oclMat & mask=oclMat() ) - :param src2: The second input array, must be the same size and same type as src1 + :param a: The first input array + + :param b: The second input array, must be the same size and same type as src1 :param sc: Scalar, the second input parameter - :param dst: The destination array, it will have the same size and same type as src1 + :param c: The destination array, it will have the same size and same type as src1 :param mask: he optional operation mask, 8-bit single channel array; specifies elements of the destination array to be changed @@ -85,17 +88,22 @@ ocl::subtract ------------------ Returns void -.. ocv:function:: void subtract(const oclMat &src1, const oclMat &src2, oclMat &dst, const oclMat& mask=oclMat()) +.. ocv:function:: void ocl::subtract( const oclMat& a, const oclMat& b, oclMat& c ) -.. ocv:function:: void subtract(const oclMat &src1, const Scalar &sc, oclMat &dst, const oclMat& mask=oclMat()) +.. ocv:function:: void ocl::subtract( const oclMat& a, const oclMat& b, oclMat& c, const oclMat& mask ) - :param src1: The first input array +.. ocv:function:: void ocl::subtract( const oclMat& a, const Scalar& sc, oclMat& c, const oclMat& mask=oclMat() ) - :param src2: The second input array, must be the same size and same type as src1 +.. ocv:function:: void ocl::subtract( const Scalar& sc, const oclMat& a, oclMat& c, const oclMat& mask=oclMat() ) + + + :param a: The first input array + + :param b: The second input array, must be the same size and same type as src1 :param sc: Scalar, the second input parameter - :param dst: The destination array, it will have the same size and same type as src1 + :param c: The destination array, it will have the same size and same type as src1 :param mask: he optional operation mask, 8-bit single channel array; specifies elements of the destination array to be changed @@ -105,13 +113,13 @@ ocl::multiply ------------------ Returns void -.. ocv:function:: void multiply(const oclMat &src1, const oclMat &src2, oclMat &dst, double scale = 1) +.. ocv:function:: void ocl::multiply( const oclMat& a, const oclMat& b, oclMat& c, double scale=1 ) - :param src1: The first input array + :param a: The first input array - :param src2: The second input array, must be the same size and same type as src1 + :param b: The second input array, must be the same size and same type as src1 - :param dst: The destination array, it will have the same size and same type as src1 + :param c: The destination array, it will have the same size and same type as src1 :param scale: must be 1 now @@ -121,13 +129,15 @@ ocl::divide ------------------ Returns void -.. ocv:function:: void divide(const oclMat &src1, const oclMat &src2, oclMat &dst, double scale = 1) +.. ocv:function:: void ocl::divide( const oclMat& a, const oclMat& b, oclMat& c, double scale=1 ) - :param src1: The first input array +.. ocv:function:: void ocl::divide( double scale, const oclMat& b, oclMat& c ) - :param src2: The second input array, must be the same size and same type as src1 + :param a: The first input array - :param dst: The destination array, it will have the same size and same type as src1 + :param b: The second input array, must be the same size and same type as src1 + + :param c: The destination array, it will have the same size and same type as src1 :param scale: must be 1 now @@ -137,15 +147,15 @@ ocl::bitwise_and ------------------ Returns void -.. ocv:function:: void bitwise_and(const oclMat &src1, const oclMat &src2, oclMat &dst, const oclMat& mask=oclMat()) +.. ocv:function:: void ocl::bitwise_and( const oclMat& src1, const oclMat& src2, oclMat& dst, const oclMat& mask=oclMat() ) -.. ocv:function:: void bitwise_and(const oclMat &src1, const Scalar &sc, oclMat &dst, const oclMat& mask=oclMat()) +.. ocv:function:: void ocl::bitwise_and( const oclMat& src1, const Scalar& s, oclMat& dst, const oclMat& mask=oclMat() ) :param src1: The first input array :param src2: The second input array, must be the same size and same type as src1 - :param sc: Scalar, the second input parameter + :param s: Scalar, the second input parameter :param dst: The destination array, it will have the same size and same type as src1 @@ -157,15 +167,15 @@ ocl::bitwise_or ------------------ Returns void -.. ocv:function:: void bitwise_or(const oclMat &src1, const oclMat &src2, oclMat &dst, const oclMat& mask=oclMat()) +.. ocv:function:: void ocl::bitwise_or( const oclMat& src1, const oclMat& src2, oclMat& dst, const oclMat& mask=oclMat() ) -.. ocv:function:: void bitwise_or(const oclMat &src1, const Scalar &sc, oclMat &dst, const oclMat& mask=oclMat()) +.. ocv:function:: void ocl::bitwise_or( const oclMat& src1, const Scalar& s, oclMat& dst, const oclMat& mask=oclMat() ) :param src1: The first input array :param src2: The second input array, must be the same size and same type as src1 - :param sc: Scalar, the second input parameter + :param s: Scalar, the second input parameter :param dst: The destination array, it will have the same size and same type as src1 @@ -177,9 +187,9 @@ ocl::bitwise_xor ------------------ Returns void -.. ocv:function:: void bitwise_xor(const oclMat &src1, const oclMat &src2, oclMat &dst, const oclMat& mask=oclMat()) +.. ocv:function:: void ocl::bitwise_xor( const oclMat& src1, const oclMat& src2, oclMat& dst, const oclMat& mask=oclMat() ) -.. ocv:function:: void bitwise_xor(const oclMat &src1, const Scalar &sc, oclMat &dst, const oclMat& mask=oclMat()) +.. ocv:function:: void ocl::bitwise_xor( const oclMat& src1, const Scalar& s, oclMat& dst, const oclMat& mask=oclMat() ) :param src1: The first input array @@ -197,7 +207,7 @@ ocl::bitwise_not ------------------ Returns void -.. ocv:function:: void bitwise_not(const oclMat &src, oclMat &dst) +.. ocv:function:: void ocl::bitwise_not(const oclMat &src, oclMat &dst) :param src: The input array @@ -209,7 +219,7 @@ ocl::cartToPolar ------------------ Returns void -.. ocv:function:: void cartToPolar(const oclMat &x, const oclMat &y, oclMat &magnitude, oclMat &angle, bool angleInDegrees = false) +.. ocv:function:: void ocl::cartToPolar(const oclMat &x, const oclMat &y, oclMat &magnitude, oclMat &angle, bool angleInDegrees = false) :param x: The array of x-coordinates; must be single-precision or double-precision floating-point array @@ -227,7 +237,7 @@ ocl::polarToCart ------------------ Returns void -.. ocv:function:: void polarToCart(const oclMat &magnitude, const oclMat &angle, oclMat &x, oclMat &y, bool angleInDegrees = false) +.. ocv:function:: void ocl::polarToCart(const oclMat &magnitude, const oclMat &angle, oclMat &x, oclMat &y, bool angleInDegrees = false) :param magnitude: The source floating-point array of magnitudes of 2D vectors. It can be an empty matrix (=Mat()) - in this case the function assumes that all the magnitudes are =1. If it's not empty, it must have the same size and same type as angle @@ -245,7 +255,7 @@ ocl::compare ------------------ Returns void -.. ocv:function:: void compare(const oclMat &a, const oclMat &b, oclMat &c, int cmpop) +.. ocv:function:: void ocl::compare(const oclMat &a, const oclMat &b, oclMat &c, int cmpop) :param a: The first source array @@ -261,7 +271,7 @@ ocl::exp ------------------ Returns void -.. ocv:function:: void exp(const oclMat &a, oclMat &b) +.. ocv:function:: void ocl::exp(const oclMat &a, oclMat &b) :param a: The first source array @@ -273,7 +283,7 @@ ocl::log ------------------ Returns void -.. ocv:function:: void log(const oclMat &a, oclMat &b) +.. ocv:function:: void ocl::log(const oclMat &a, oclMat &b) :param a: The first source array @@ -285,7 +295,7 @@ ocl::LUT ------------------ Returns void -.. ocv:function:: void LUT(const oclMat &src, const oclMat &lut, oclMat &dst) +.. ocv:function:: void ocl::LUT(const oclMat &src, const oclMat &lut, oclMat &dst) :param src: Source array of 8-bit elements @@ -299,7 +309,7 @@ ocl::magnitude ------------------ Returns void -.. ocv:function:: void magnitude(const oclMat &x, const oclMat &y, oclMat &magnitude) +.. ocv:function:: void ocl::magnitude(const oclMat &x, const oclMat &y, oclMat &magnitude) :param x: The floating-point array of x-coordinates of the vectors @@ -313,11 +323,11 @@ ocl::flip ------------------ Returns void -.. ocv:function:: void flip(const oclMat &src, oclMat &dst, int flipCode) +.. ocv:function:: void ocl::flip( const oclMat& a, oclMat& b, int flipCode ) - :param src: Source image. + :param a: Source image. - :param dst: Destination image + :param b: Destination image :param flipCode: Specifies how to flip the array: 0 means flipping around the x-axis, positive (e.g., 1) means flipping around y-axis, and negative (e.g., -1) means flipping around both axes. @@ -327,7 +337,7 @@ ocl::meanStdDev ------------------ Returns void -.. ocv:function:: void meanStdDev(const oclMat &mtx, Scalar &mean, Scalar &stddev) +.. ocv:function:: void ocl::meanStdDev(const oclMat &mtx, Scalar &mean, Scalar &stddev) :param mtx: Source image. @@ -341,7 +351,7 @@ ocl::merge ------------------ Returns void -.. ocv:function:: void merge(const vector &src, oclMat &dst) +.. ocv:function:: void ocl::merge(const vector &src, oclMat &dst) :param src: The source array or vector of the single-channel matrices to be merged. All the matrices in src must have the same size and the same type @@ -353,7 +363,7 @@ ocl::split ------------------ Returns void -.. ocv:function:: void split(const oclMat &src, vector &dst) +.. ocv:function:: void ocl::split(const oclMat &src, vector &dst) :param src: The source multi-channel array @@ -365,9 +375,9 @@ ocl::norm ------------------ Returns the calculated norm -.. ocv:function:: double norm(const oclMat &src1, int normType = NORM_L2) +.. ocv:function:: double ocl::norm(const oclMat &src1, int normType = NORM_L2) -.. ocv:function:: double norm(const oclMat &src1, const oclMat &src2, int normType = NORM_L2) +.. ocv:function:: double ocl::norm(const oclMat &src1, const oclMat &src2, int normType = NORM_L2) :param src1: The first source array @@ -381,7 +391,7 @@ ocl::phase ------------------ Returns void -.. ocv:function:: void phase(const oclMat &x, const oclMat &y, oclMat &angle, bool angleInDegrees = false) +.. ocv:function:: void ocl::phase(const oclMat &x, const oclMat &y, oclMat &angle, bool angleInDegrees = false) :param x: The source floating-point array of x-coordinates of 2D vectors @@ -397,7 +407,7 @@ ocl::pow ------------------ Returns void -.. ocv:function:: void pow(const oclMat &x, double p, oclMat &y) +.. ocv:function:: void ocl::pow(const oclMat &x, double p, oclMat &y) :param x: The source array @@ -411,7 +421,7 @@ ocl::transpose ------------------ Returns void -.. ocv:function:: void transpose(const oclMat &src, oclMat &dst) +.. ocv:function:: void ocl::transpose(const oclMat &src, oclMat &dst) :param src: The source array @@ -424,7 +434,7 @@ ocl::dft ------------ Performs a forward or inverse discrete Fourier transform (1D or 2D) of the floating point matrix. -.. ocv:function:: void ocl::dft(const oclMat& src, oclMat& dst, Size dft_size, int flags=0) +.. ocv:function:: void ocl::dft( const oclMat& src, oclMat& dst, Size dft_size=Size(0, 0), int flags=0 ) :param src: Source matrix (real or complex). @@ -452,7 +462,7 @@ ocl::gemm ------------------ Performs generalized matrix multiplication. -.. ocv:function:: void gemm(const oclMat& src1, const oclMat& src2, double alpha, const oclMat& src3, double beta, oclMat& dst, int flags = 0) +.. ocv:function:: void ocl::gemm(const oclMat& src1, const oclMat& src2, double alpha, const oclMat& src3, double beta, oclMat& dst, int flags = 0) :param src1: First multiplied input matrix that should be ``CV_32FC1`` type. diff --git a/modules/ocl/doc/structures_and_utility_functions.rst b/modules/ocl/doc/structures_and_utility_functions.rst index df19a3c1d9673e7b8489af522ecbc247adedd205..32aa8b9eae71a50b16baea60589649a3a661824d 100644 --- a/modules/ocl/doc/structures_and_utility_functions.rst +++ b/modules/ocl/doc/structures_and_utility_functions.rst @@ -35,7 +35,7 @@ ocl::setBinpath ------------------ Returns void -.. ocv:function:: void setBinpath(const char *path) +.. ocv:function:: void ocl::setBinpath(const char *path) :param path: the path of OpenCL kernel binaries @@ -45,7 +45,7 @@ ocl::getoclContext ------------------ Returns the pointer to the opencl context -.. ocv:function:: void *getoclContext() +.. ocv:function:: void* ocl::getoclContext() Thefunction are used to get opencl context so that opencv can interactive with other opencl program. @@ -53,6 +53,6 @@ ocl::getoclCommandQueue -------------------------- Returns the pointer to the opencl command queue -.. ocv:function:: void *getoclCommandQueue() +.. ocv:function:: void* ocl::getoclCommandQueue() Thefunction are used to get opencl command queue so that opencv can interactive with other opencl program. \ No newline at end of file diff --git a/modules/ocl/include/opencv2/ocl/ocl.hpp b/modules/ocl/include/opencv2/ocl/ocl.hpp index 419b05b6355c28181b763f1b895a35773ea5cf10..4a56cff204f0afc5e8a22ba7813e0bfa72c3101a 100644 --- a/modules/ocl/include/opencv2/ocl/ocl.hpp +++ b/modules/ocl/include/opencv2/ocl/ocl.hpp @@ -95,9 +95,9 @@ namespace cv //other opencl program - CV_EXPORTS void *getoclContext(); + CV_EXPORTS void* getoclContext(); - CV_EXPORTS void *getoclCommandQueue(); + CV_EXPORTS void* getoclCommandQueue(); //////////////////////////////// Error handling //////////////////////// CV_EXPORTS void error(const char *error_string, const char *file, const int line, const char *func); @@ -191,10 +191,10 @@ namespace cv //! sets every oclMatrix element to s //It supports 8UC1 8UC4 32SC1 32SC4 32FC1 32FC4 - oclMat &operator = (const Scalar &s); + oclMat& operator = (const Scalar &s); //! sets some of the oclMatrix elements to s, according to the mask //It supports 8UC1 8UC4 32SC1 32SC4 32FC1 32FC4 - oclMat &setTo(const Scalar &s, const oclMat &mask = oclMat()); + oclMat& setTo(const Scalar &s, const oclMat &mask = oclMat()); //! creates alternative oclMatrix header for the same data, with different // number of channels and/or different number of rows. see cvReshape. oclMat reshape(int cn, int rows = 0) const; @@ -213,7 +213,7 @@ namespace cv //! locates oclMatrix header within a parent oclMatrix. See below void locateROI( Size &wholeSize, Point &ofs ) const; //! moves/resizes the current oclMatrix ROI inside the parent oclMatrix. - oclMat &adjustROI( int dtop, int dbottom, int dleft, int dright ); + oclMat& adjustROI( int dtop, int dbottom, int dleft, int dright ); //! extracts a rectangular sub-oclMatrix // (this is a generalized form of row, rowRange etc.) oclMat operator()( Range rowRange, Range colRange ) const; @@ -249,7 +249,7 @@ namespace cv bool empty() const; //! returns pointer to y-th row - uchar *ptr(int y = 0); + uchar* ptr(int y = 0); const uchar *ptr(int y = 0) const; //! template version of the above method @@ -347,7 +347,7 @@ namespace cv //! transposes the matrix // supports CV_8UC1, 8UC4, 8SC4, 16UC2, 16SC2, 32SC1 and 32FC1.(the same as cuda) - CV_EXPORTS void transpose(const oclMat &src1, oclMat &dst); + CV_EXPORTS void transpose(const oclMat &src, oclMat &dst); //! computes element-wise absolute difference of two arrays (c = abs(a - b)) // supports all types except CV_8SC1,CV_8SC2,CV8SC3 and CV_8SC4 @@ -407,7 +407,7 @@ namespace cv CV_EXPORTS void equalizeHist(const oclMat &mat_src, oclMat &mat_dst); //! bilateralFilter // supports 8UC1 8UC4 - CV_EXPORTS void bilateralFilter(const oclMat &, oclMat &, int , double, double, int); + CV_EXPORTS void bilateralFilter(const oclMat& src, oclMat& dst, int d, double sigmaColor, double sigmaSpave, int borderType=BORDER_DEFAULT); //! computes exponent of each matrix element (b = e**a) // supports only CV_32FC1 type CV_EXPORTS void exp(const oclMat &a, oclMat &b); @@ -719,7 +719,7 @@ namespace cv OclCascadeClassifier() {}; ~OclCascadeClassifier() {}; - CvSeq *oclHaarDetectObjects(oclMat &gimg, CvMemStorage *storage, double scaleFactor, + CvSeq* oclHaarDetectObjects(oclMat &gimg, CvMemStorage *storage, double scaleFactor, int minNeighbors, int flags, CvSize minSize = cvSize(0, 0), CvSize maxSize = cvSize(0, 0)); }; @@ -729,7 +729,7 @@ namespace cv CV_EXPORTS void pyrDown(const oclMat &src, oclMat &dst); //! upsamples the source image and then smoothes it - CV_EXPORTS void pyrUp(const cv::ocl::oclMat &src, cv::ocl::oclMat &dst); + CV_EXPORTS void pyrUp(const oclMat &src, oclMat &dst); //! performs linear blending of two images //! to avoid accuracy errors sum of weigths shouldn't be very close to zero @@ -1705,11 +1705,11 @@ namespace cv }; //////////////// build warping maps //////////////////// //! builds plane warping maps - CV_EXPORTS void buildWarpPlaneMaps(Size, Rect, const Mat &, const Mat &, const Mat &, float, oclMat &, oclMat &); + CV_EXPORTS void buildWarpPlaneMaps(Size src_size, Rect dst_roi, const Mat &K, const Mat &R, const Mat &T, float scale, oclMat &map_x, oclMat &map_y); //! builds cylindrical warping maps - CV_EXPORTS void buildWarpCylindricalMaps(Size, Rect, const Mat &, const Mat &, float, oclMat &, oclMat &); + CV_EXPORTS void buildWarpCylindricalMaps(Size src_size, Rect dst_roi, const Mat &K, const Mat &R, float scale, oclMat &map_x, oclMat &map_y); //! builds spherical warping maps - CV_EXPORTS void buildWarpSphericalMaps(Size, Rect, const Mat &, const Mat &, float, oclMat &, oclMat &); + CV_EXPORTS void buildWarpSphericalMaps(Size src_size, Rect dst_roi, const Mat &K, const Mat &R, float scale, oclMat &map_x, oclMat &map_y); //! builds Affine warping maps CV_EXPORTS void buildWarpAffineMaps(const Mat &M, bool inverse, Size dsize, oclMat &xmap, oclMat &ymap); diff --git a/modules/python/src2/hdr_parser.py b/modules/python/src2/hdr_parser.py index 090ed6f64ad5841e0a094b7cea03901c7ea16dd2..4c81b04ff71c5aca679be41d38dcda85020d4ce3 100755 --- a/modules/python/src2/hdr_parser.py +++ b/modules/python/src2/hdr_parser.py @@ -337,10 +337,10 @@ class CppHeaderParser(object): atype = arg[:pos+1].strip() if aname.endswith("&") or aname.endswith("*") or (aname in ["int", "string", "Mat"]): atype = (atype + " " + aname).strip() - aname = "param" + aname = "" else: atype = arg - aname = "param" + aname = "" if aname.endswith("]"): bidx = aname.find('[') atype += aname[bidx:] @@ -575,6 +575,8 @@ class CppHeaderParser(object): """ if not self.block_stack: return name + if name.startswith("cv."): + return name n = "" for b in self.block_stack: block_type, block_name = b[self.BLOCK_TYPE], b[self.BLOCK_NAME] diff --git a/modules/ts/misc/perf_tests_timing.py b/modules/ts/misc/perf_tests_timing.py index 70d2aa2f0389ad84824998e893ee483d2f2d4a93..781bfdfd29d5f3853c53bcc0908c606e27504e7a 100644 --- a/modules/ts/misc/perf_tests_timing.py +++ b/modules/ts/misc/perf_tests_timing.py @@ -5,6 +5,7 @@ from table_formatter import * from optparse import OptionParser from operator import itemgetter, attrgetter from summary import getSetName, alphanum_keyselector +import re if __name__ == "__main__": usage = "%prog .xml [...]" @@ -21,14 +22,13 @@ if __name__ == "__main__": options.generateHtml = detectHtmlOutputType(options.format) - # expand wildcards and filter duplicates - file = os.path.abspath(args[0]) + input_file = args[0] + file = os.path.abspath(input_file) if not os.path.isfile(file): sys.stderr.write("IOError reading \"" + file + "\" - " + str(err) + os.linesep) parser.print_help() exit(0) - # read all passed files test_sets = [] try: tests = testlog_parser.parseLogFile(file) @@ -41,7 +41,7 @@ if __name__ == "__main__": if not test_sets: sys.stderr.write("Error: no test data found" + os.linesep) - quit() + exit(0) # find matches setsCount = len(test_sets) @@ -81,6 +81,13 @@ if __name__ == "__main__": if case.get('status') == 'failed': has_failed = True + testsuits.append({'name': prevGroupName, 'time': suit_time, \ + 'failed': has_failed}) + + if len(testsuits)==0: + print 'No testsuits found' + exit(0) + tbl = table() # header @@ -103,4 +110,11 @@ if __name__ == "__main__": tbl.htmlPrintTable(sys.stdout) htmlPrintFooter(sys.stdout) else: - tbl.consolePrintTable(sys.stdout) \ No newline at end of file + input_file = re.sub(r'^[\.\/]*', '', input_file) + find_module_name = re.search(r'([^_]*)', input_file) + module_name = find_module_name.group(0) + + splitter = 15 * '*' + print '\n%s\n %s\n%s\n' % (splitter, module_name, splitter) + tbl.consolePrintTable(sys.stdout) + print 4 * '\n' \ No newline at end of file diff --git a/modules/video/src/lkpyramid.cpp b/modules/video/src/lkpyramid.cpp index 552bfbda2f1384583314890cd22bbd95653af828..bad55586229e3f2eeea1f01e66ee25457a240215 100644 --- a/modules/video/src/lkpyramid.cpp +++ b/modules/video/src/lkpyramid.cpp @@ -1194,8 +1194,8 @@ cvCalcOpticalFlowPyrLK( const void* arrA, const void* arrB, st = cv::Mat(count, 1, CV_8U, (void*)status); if( error ) err = cv::Mat(count, 1, CV_32F, (void*)error); - cv::calcOpticalFlowPyrLK( A, B, ptA, ptB, status ? cv::_OutputArray(st) : cv::_OutputArray(), - error ? cv::_OutputArray(err) : cv::_OutputArray(), + cv::calcOpticalFlowPyrLK( A, B, ptA, ptB, st, + error ? cv::_OutputArray(err) : cv::noArray(), winSize, level, criteria, flags); }