mirror of
https://github.com/opencv/opencv.git
synced 2026-07-30 15:53:03 +04:00
Compare commits
35 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 0354d01e79 | |||
| 45d3aac730 | |||
| 318ac6b8c9 | |||
| 7d332100a4 | |||
| 56072c4406 | |||
| cd64b504b8 | |||
| 443059e371 | |||
| 8f9c4d23e0 | |||
| 8b90db3f25 | |||
| ec16307632 | |||
| fdefc4b09d | |||
| 61d8292652 | |||
| 43f1b72e92 | |||
| 1f4b8c2785 | |||
| 97eae6b546 | |||
| 572d6d795d | |||
| 7459388dd9 | |||
| 249edb2c99 | |||
| 00cc4aa230 | |||
| 7c0193bb75 | |||
| 97507e42a1 | |||
| 91fe01beca | |||
| 591a08721e | |||
| a28733148e | |||
| e10e628036 | |||
| 738b388a64 | |||
| 9802024f71 | |||
| 1659e96766 | |||
| c1dea8465e | |||
| 678d383f26 | |||
| e15a56d142 | |||
| c46521ad65 | |||
| d0f3468477 | |||
| 3224b0a75a | |||
| 7d8110772a |
+4
-4
@@ -1,10 +1,10 @@
|
|||||||
|
# ignore dot files/directories
|
||||||
|
.*
|
||||||
|
!.gitignore
|
||||||
|
|
||||||
*.autosave
|
*.autosave
|
||||||
*.pyc
|
*.pyc
|
||||||
*.user
|
*.user
|
||||||
*~
|
*~
|
||||||
.*.swp
|
|
||||||
.DS_Store
|
|
||||||
.sw[a-z]
|
|
||||||
tags
|
tags
|
||||||
tegra/
|
tegra/
|
||||||
.cache
|
|
||||||
|
|||||||
Vendored
+1
-1
@@ -25,7 +25,7 @@ endif(WIN32 AND NOT MINGW)
|
|||||||
|
|
||||||
ocv_warnings_disable(CMAKE_C_FLAGS -Wno-implicit-function-declaration -Wno-uninitialized -Wmissing-prototypes
|
ocv_warnings_disable(CMAKE_C_FLAGS -Wno-implicit-function-declaration -Wno-uninitialized -Wmissing-prototypes
|
||||||
-Wno-unused-but-set-parameter -Wmissing-declarations -Wunused -Wshadow -Wsign-compare)
|
-Wno-unused-but-set-parameter -Wmissing-declarations -Wunused -Wshadow -Wsign-compare)
|
||||||
ocv_warnings_disable(CMAKE_C_FLAGS -Wunused-parameter) # clang
|
ocv_warnings_disable(CMAKE_C_FLAGS -Wunused-parameter -Wstrict-prototypes) # clang
|
||||||
ocv_warnings_disable(CMAKE_C_FLAGS /wd4013 /wd4018 /wd4101 /wd4244 /wd4267 /wd4715) # vs2005
|
ocv_warnings_disable(CMAKE_C_FLAGS /wd4013 /wd4018 /wd4101 /wd4244 /wd4267 /wd4715) # vs2005
|
||||||
|
|
||||||
if(UNIX)
|
if(UNIX)
|
||||||
|
|||||||
Vendored
+2
-2
@@ -3,7 +3,7 @@
|
|||||||
#
|
#
|
||||||
# ----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------
|
||||||
|
|
||||||
if(ARM AND ENABLE_NEON AND NOT AARCH64)
|
if(ARM AND ENABLE_NEON AND NOT AARCH64 AND NOT IOS)
|
||||||
project(${PNG_LIBRARY} ASM)
|
project(${PNG_LIBRARY} ASM)
|
||||||
else()
|
else()
|
||||||
project(${PNG_LIBRARY})
|
project(${PNG_LIBRARY})
|
||||||
@@ -14,7 +14,7 @@ ocv_include_directories("${CMAKE_CURRENT_SOURCE_DIR}" ${ZLIB_INCLUDE_DIR})
|
|||||||
file(GLOB lib_srcs *.c)
|
file(GLOB lib_srcs *.c)
|
||||||
file(GLOB lib_hdrs *.h)
|
file(GLOB lib_hdrs *.h)
|
||||||
|
|
||||||
if(ARM AND ENABLE_NEON AND NOT AARCH64)
|
if(ARM AND ENABLE_NEON AND NOT AARCH64 AND NOT IOS)
|
||||||
list(APPEND lib_srcs arm/filter_neon.S arm/arm_init.c)
|
list(APPEND lib_srcs arm/filter_neon.S arm/arm_init.c)
|
||||||
add_definitions(-DPNG_ARM_NEON_OPT=2)
|
add_definitions(-DPNG_ARM_NEON_OPT=2)
|
||||||
else()
|
else()
|
||||||
|
|||||||
@@ -683,6 +683,16 @@ endif()
|
|||||||
# ========================== build platform ==========================
|
# ========================== build platform ==========================
|
||||||
status("")
|
status("")
|
||||||
status(" Platform:")
|
status(" Platform:")
|
||||||
|
if(NOT DEFINED OPENCV_TIMESTAMP
|
||||||
|
AND NOT CMAKE_VERSION VERSION_LESS 2.8.11
|
||||||
|
AND NOT BUILD_INFO_SKIP_TIMESTAMP
|
||||||
|
)
|
||||||
|
string(TIMESTAMP OPENCV_TIMESTAMP "" UTC)
|
||||||
|
set(OPENCV_TIMESTAMP "${OPENCV_TIMESTAMP}" CACHE STRING "Timestamp of OpenCV build configuration" FORCE)
|
||||||
|
endif()
|
||||||
|
if(OPENCV_TIMESTAMP)
|
||||||
|
status(" Timestamp:" ${OPENCV_TIMESTAMP})
|
||||||
|
endif()
|
||||||
status(" Host:" ${CMAKE_HOST_SYSTEM_NAME} ${CMAKE_HOST_SYSTEM_VERSION} ${CMAKE_HOST_SYSTEM_PROCESSOR})
|
status(" Host:" ${CMAKE_HOST_SYSTEM_NAME} ${CMAKE_HOST_SYSTEM_VERSION} ${CMAKE_HOST_SYSTEM_PROCESSOR})
|
||||||
if(CMAKE_CROSSCOMPILING)
|
if(CMAKE_CROSSCOMPILING)
|
||||||
status(" Target:" ${CMAKE_SYSTEM_NAME} ${CMAKE_SYSTEM_VERSION} ${CMAKE_SYSTEM_PROCESSOR})
|
status(" Target:" ${CMAKE_SYSTEM_NAME} ${CMAKE_SYSTEM_VERSION} ${CMAKE_SYSTEM_PROCESSOR})
|
||||||
|
|||||||
@@ -164,7 +164,7 @@ if(CMAKE_COMPILER_IS_GNUCXX)
|
|||||||
# Other optimizations
|
# Other optimizations
|
||||||
if(ENABLE_OMIT_FRAME_POINTER)
|
if(ENABLE_OMIT_FRAME_POINTER)
|
||||||
add_extra_compiler_option(-fomit-frame-pointer)
|
add_extra_compiler_option(-fomit-frame-pointer)
|
||||||
else()
|
elseif(DEFINED ENABLE_OMIT_FRAME_POINTER)
|
||||||
add_extra_compiler_option(-fno-omit-frame-pointer)
|
add_extra_compiler_option(-fno-omit-frame-pointer)
|
||||||
endif()
|
endif()
|
||||||
if(ENABLE_FAST_MATH)
|
if(ENABLE_FAST_MATH)
|
||||||
|
|||||||
@@ -61,7 +61,9 @@ if(NOT DEFINED OpenCV_CUDA)
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(MSVC)
|
if(DEFINED OpenCV_ARCH AND DEFINED OpenCV_RUNTIME)
|
||||||
|
# custom overrided values
|
||||||
|
elseif(MSVC)
|
||||||
if(CMAKE_CL_64)
|
if(CMAKE_CL_64)
|
||||||
set(OpenCV_ARCH x64)
|
set(OpenCV_ARCH x64)
|
||||||
set(OpenCV_TBB_ARCH intel64)
|
set(OpenCV_TBB_ARCH intel64)
|
||||||
@@ -81,7 +83,7 @@ if(MSVC)
|
|||||||
set(OpenCV_RUNTIME vc12)
|
set(OpenCV_RUNTIME vc12)
|
||||||
elseif(MSVC_VERSION EQUAL 1900)
|
elseif(MSVC_VERSION EQUAL 1900)
|
||||||
set(OpenCV_RUNTIME vc14)
|
set(OpenCV_RUNTIME vc14)
|
||||||
elseif(MSVC_VERSION EQUAL 1910 OR MSVC_VERSION EQUAL 1911)
|
elseif(MSVC_VERSION MATCHES "^191[0-9]$")
|
||||||
set(OpenCV_RUNTIME vc15)
|
set(OpenCV_RUNTIME vc15)
|
||||||
endif()
|
endif()
|
||||||
elseif(MINGW)
|
elseif(MINGW)
|
||||||
|
|||||||
@@ -82,7 +82,9 @@ if(NOT DEFINED OpenCV_STATIC)
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(MSVC)
|
if(DEFINED OpenCV_ARCH AND DEFINED OpenCV_RUNTIME)
|
||||||
|
# custom overrided values
|
||||||
|
elseif(MSVC)
|
||||||
if(CMAKE_CL_64)
|
if(CMAKE_CL_64)
|
||||||
set(OpenCV_ARCH x64)
|
set(OpenCV_ARCH x64)
|
||||||
else()
|
else()
|
||||||
@@ -100,7 +102,7 @@ if(MSVC)
|
|||||||
set(OpenCV_RUNTIME vc12)
|
set(OpenCV_RUNTIME vc12)
|
||||||
elseif(MSVC_VERSION EQUAL 1900)
|
elseif(MSVC_VERSION EQUAL 1900)
|
||||||
set(OpenCV_RUNTIME vc14)
|
set(OpenCV_RUNTIME vc14)
|
||||||
elseif(MSVC_VERSION EQUAL 1910 OR MSVC_VERSION EQUAL 1911)
|
elseif(MSVC_VERSION MATCHES "^191[0-9]$")
|
||||||
set(OpenCV_RUNTIME vc15)
|
set(OpenCV_RUNTIME vc15)
|
||||||
endif()
|
endif()
|
||||||
elseif(MINGW)
|
elseif(MINGW)
|
||||||
|
|||||||
@@ -751,7 +751,10 @@ endfunction()
|
|||||||
|
|
||||||
macro(ocv_get_libname var_name)
|
macro(ocv_get_libname var_name)
|
||||||
get_filename_component(__libname "${ARGN}" NAME)
|
get_filename_component(__libname "${ARGN}" NAME)
|
||||||
string(REGEX REPLACE "^lib(.+).(a|so)(.[.0-9]+)?$" "\\1" __libname "${__libname}")
|
# libopencv_core.so.3.3 -> opencv_core
|
||||||
|
string(REGEX REPLACE "^lib(.+)\\.(a|so)(\\.[.0-9]+)?$" "\\1" __libname "${__libname}")
|
||||||
|
# MacOSX: libopencv_core.3.3.1.dylib -> opencv_core
|
||||||
|
string(REGEX REPLACE "^lib(.+[^.0-9])\\.([.0-9]+\\.)?dylib$" "\\1" __libname "${__libname}")
|
||||||
set(${var_name} "${__libname}")
|
set(${var_name} "${__libname}")
|
||||||
endmacro()
|
endmacro()
|
||||||
|
|
||||||
|
|||||||
@@ -440,5 +440,5 @@ You may observe a runtime instance of this on the `YouTube here <https://www.you
|
|||||||
.. raw:: html
|
.. raw:: html
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
<iframe title=" Camera calibration With OpenCV - Chessboard or asymmetrical circle pattern." width="560" height="349" src="http://www.youtube.com/embed/ViPN810E0SU?rel=0&loop=1" frameborder="0" allowfullscreen align="middle"></iframe>
|
<iframe title=" Camera calibration With OpenCV - Chessboard or asymmetrical circle pattern." width="560" height="349" src="https://www.youtube.com/embed/ViPN810E0SU?rel=0&loop=1" frameborder="0" allowfullscreen align="middle"></iframe>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
+1
-1
@@ -275,5 +275,5 @@ You may observe a runtime instance of this on the `YouTube here <https://www.you
|
|||||||
.. raw:: html
|
.. raw:: html
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
<iframe title="File Input and Output using XML and YAML files in OpenCV" width="560" height="349" src="http://www.youtube.com/embed/A4yqVnByMMM?rel=0&loop=1" frameborder="0" allowfullscreen align="middle"></iframe>
|
<iframe title="File Input and Output using XML and YAML files in OpenCV" width="560" height="349" src="https://www.youtube.com/embed/A4yqVnByMMM?rel=0&loop=1" frameborder="0" allowfullscreen align="middle"></iframe>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -179,5 +179,5 @@ Finally, you may watch a sample run of the program on the `video posted <https:/
|
|||||||
.. raw:: html
|
.. raw:: html
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
<iframe title="How to scan images in OpenCV?" width="560" height="349" src="http://www.youtube.com/embed/fB3AN5fjgwc?rel=0&loop=1" frameborder="0" allowfullscreen align="middle"></iframe>
|
<iframe title="How to scan images in OpenCV?" width="560" height="349" src="https://www.youtube.com/embed/fB3AN5fjgwc?rel=0&loop=1" frameborder="0" allowfullscreen align="middle"></iframe>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
+1
-1
@@ -125,5 +125,5 @@ You may observe a runtime instance of this on the `YouTube here <https://www.you
|
|||||||
.. raw:: html
|
.. raw:: html
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
<iframe title="Interoperability with OpenCV 1" width="560" height="349" src="http://www.youtube.com/embed/qckm-zvo31w?rel=0&loop=1" frameborder="0" allowfullscreen align="middle"></iframe>
|
<iframe title="Interoperability with OpenCV 1" width="560" height="349" src="https://www.youtube.com/embed/qckm-zvo31w?rel=0&loop=1" frameborder="0" allowfullscreen align="middle"></iframe>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -128,7 +128,7 @@ For example:
|
|||||||
|
|
||||||
You can download this source code from :download:`here <../../../../samples/cpp/tutorial_code/core/mat_mask_operations/mat_mask_operations.cpp>` or look in the OpenCV source code libraries sample directory at :file:`samples/cpp/tutorial_code/core/mat_mask_operations/mat_mask_operations.cpp`.
|
You can download this source code from :download:`here <../../../../samples/cpp/tutorial_code/core/mat_mask_operations/mat_mask_operations.cpp>` or look in the OpenCV source code libraries sample directory at :file:`samples/cpp/tutorial_code/core/mat_mask_operations/mat_mask_operations.cpp`.
|
||||||
|
|
||||||
Check out an instance of running the program on our `YouTube channel <http://www.youtube.com/watch?v=7PF1tAU9se4>`_ .
|
Check out an instance of running the program on our `YouTube channel <https://www.youtube.com/watch?v=7PF1tAU9se4>`_ .
|
||||||
|
|
||||||
.. raw:: html
|
.. raw:: html
|
||||||
|
|
||||||
|
|||||||
@@ -307,5 +307,5 @@ You can also find a quick video demonstration of this on `YouTube <https://www.y
|
|||||||
.. raw:: html
|
.. raw:: html
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
<iframe title="Install OpenCV by using its source files - Part 1" width="560" height="349" src="http://www.youtube.com/embed/1tibU7vGWpk?rel=0&loop=1" frameborder="0" allowfullscreen align="middle"></iframe>
|
<iframe title="Install OpenCV by using its source files - Part 1" width="560" height="349" src="https://www.youtube.com/embed/1tibU7vGWpk?rel=0&loop=1" frameborder="0" allowfullscreen align="middle"></iframe>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -144,5 +144,5 @@ In both cases we managed a performance increase of almost 100% compared to the C
|
|||||||
.. raw:: html
|
.. raw:: html
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
<iframe title="Similarity check (PNSR and SSIM) on the GPU" width="560" height="349" src="http://www.youtube.com/embed/3_ESXmFlnvY?rel=0&loop=1" frameborder="0" allowfullscreen align="middle"></iframe>
|
<iframe title="Similarity check (PNSR and SSIM) on the GPU" width="560" height="349" src="https://www.youtube.com/embed/3_ESXmFlnvY?rel=0&loop=1" frameborder="0" allowfullscreen align="middle"></iframe>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -212,5 +212,5 @@ You may observe a runtime instance of this on the `YouTube here <https://www.you
|
|||||||
.. raw:: html
|
.. raw:: html
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
<iframe title="Video Input with OpenCV (Plus PSNR and MSSIM)" width="560" height="349" src="http://www.youtube.com/embed/iOcNljutOgg?rel=0&loop=1" frameborder="0" allowfullscreen align="middle"></iframe>
|
<iframe title="Video Input with OpenCV (Plus PSNR and MSSIM)" width="560" height="349" src="https://www.youtube.com/embed/iOcNljutOgg?rel=0&loop=1" frameborder="0" allowfullscreen align="middle"></iframe>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -132,5 +132,5 @@ You may observe a runtime instance of this on the `YouTube here <https://www.you
|
|||||||
.. raw:: html
|
.. raw:: html
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
<iframe title="Creating a video with OpenCV" width="560" height="349" src="http://www.youtube.com/embed/jpBwHxsl1_0?rel=0&loop=1" frameborder="0" allowfullscreen align="middle"></iframe>
|
<iframe title="Creating a video with OpenCV" width="560" height="349" src="https://www.youtube.com/embed/jpBwHxsl1_0?rel=0&loop=1" frameborder="0" allowfullscreen align="middle"></iframe>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
+1
-1
@@ -81,7 +81,7 @@ Gaussian Filter
|
|||||||
|
|
||||||
G_{0}(x, y) = A e^{ \dfrac{ -(x - \mu_{x})^{2} }{ 2\sigma^{2}_{x} } + \dfrac{ -(y - \mu_{y})^{2} }{ 2\sigma^{2}_{y} } }
|
G_{0}(x, y) = A e^{ \dfrac{ -(x - \mu_{x})^{2} }{ 2\sigma^{2}_{x} } + \dfrac{ -(y - \mu_{y})^{2} }{ 2\sigma^{2}_{y} } }
|
||||||
|
|
||||||
where :math:`\mu` is the mean (the peak) and :math:`\sigma` represents the variance (per each of the variables :math:`x` and :math:`y`)
|
where :math:`\mu` is the mean (the peak) and :math:`\sigma` represents the standard deviation (per each of the variables :math:`x` and :math:`y`)
|
||||||
|
|
||||||
|
|
||||||
Median Filter
|
Median Filter
|
||||||
|
|||||||
@@ -129,5 +129,5 @@ Result
|
|||||||
.. raw:: html
|
.. raw:: html
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
<iframe title="Introduction - Display an Image" width="560" height="349" src="http://www.youtube.com/embed/1OJEqpuaGc4?rel=0&loop=1" frameborder="0" allowfullscreen align="middle"></iframe>
|
<iframe title="Introduction - Display an Image" width="560" height="349" src="https://www.youtube.com/embed/1OJEqpuaGc4?rel=0&loop=1" frameborder="0" allowfullscreen align="middle"></iframe>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -358,7 +358,7 @@ Now here's our recommendation for the structure of the tutorial (although, remem
|
|||||||
.. raw:: html
|
.. raw:: html
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
<iframe title="Creating a video with OpenCV" width="560" height="349" src="http://www.youtube.com/embed/jpBwHxsl1_0?rel=0&loop=1" frameborder="0" allowfullscreen align="middle"></iframe>
|
<iframe title="Creating a video with OpenCV" width="560" height="349" src="https://www.youtube.com/embed/jpBwHxsl1_0?rel=0&loop=1" frameborder="0" allowfullscreen align="middle"></iframe>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
This results in the text and video: You may observe a runtime instance of this on the `YouTube here <https://www.youtube.com/watch?v=jpBwHxsl1_0>`_.
|
This results in the text and video: You may observe a runtime instance of this on the `YouTube here <https://www.youtube.com/watch?v=jpBwHxsl1_0>`_.
|
||||||
@@ -366,7 +366,7 @@ Now here's our recommendation for the structure of the tutorial (although, remem
|
|||||||
.. raw:: html
|
.. raw:: html
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
<iframe title="Creating a video with OpenCV" width="560" height="349" src="http://www.youtube.com/embed/jpBwHxsl1_0?rel=0&loop=1" frameborder="0" allowfullscreen align="middle"></iframe>
|
<iframe title="Creating a video with OpenCV" width="560" height="349" src="https://www.youtube.com/embed/jpBwHxsl1_0?rel=0&loop=1" frameborder="0" allowfullscreen align="middle"></iframe>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
When these aren't self-explanatory make sure to throw in a few guiding lines about what and why we can see.
|
When these aren't self-explanatory make sure to throw in a few guiding lines about what and why we can see.
|
||||||
|
|||||||
@@ -40,8 +40,8 @@ You may find the content of this tutorial also inside the following videos: `Par
|
|||||||
.. raw:: html
|
.. raw:: html
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
<iframe title="Install OpenCV by using its source files - Part 1" width="560" height="349" src="http://www.youtube.com/embed/NnovZ1cTlMs?rel=0&loop=1" frameborder="0" allowfullscreen align="middle"></iframe>
|
<iframe title="Install OpenCV by using its source files - Part 1" width="560" height="349" src="https://www.youtube.com/embed/NnovZ1cTlMs?rel=0&loop=1" frameborder="0" allowfullscreen align="middle"></iframe>
|
||||||
<iframe title="Install OpenCV by using its source files - Part 2" width="560" height="349" src="http://www.youtube.com/embed/qGNWMcfWwPU?rel=0&loop=1" frameborder="0" allowfullscreen align="middle"></iframe>
|
<iframe title="Install OpenCV by using its source files - Part 2" width="560" height="349" src="https://www.youtube.com/embed/qGNWMcfWwPU?rel=0&loop=1" frameborder="0" allowfullscreen align="middle"></iframe>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
.. warning:: These videos above are long-obsolete and contain inaccurate information. Be careful, since solutions described in those videos are no longer supported and may even break your install.
|
.. warning:: These videos above are long-obsolete and contain inaccurate information. Be careful, since solutions described in those videos are no longer supported and may even break your install.
|
||||||
|
|||||||
@@ -120,10 +120,10 @@ After the processing we need to convert it back to UIImage.
|
|||||||
:alt: header
|
:alt: header
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
Check out an instance of running code with more Image Effects on `YouTube <http://www.youtube.com/watch?v=Ko3K_xdhJ1I>`_ .
|
Check out an instance of running code with more Image Effects on `YouTube <https://www.youtube.com/watch?v=Ko3K_xdhJ1I>`_ .
|
||||||
|
|
||||||
.. raw:: html
|
.. raw:: html
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
<iframe width="560" height="350" src="http://www.youtube.com/embed/Ko3K_xdhJ1I" frameborder="0" allowfullscreen></iframe>
|
<iframe width="560" height="350" src="https://www.youtube.com/embed/Ko3K_xdhJ1I" frameborder="0" allowfullscreen></iframe>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -215,5 +215,5 @@ You may observe a runtime instance of this on the `YouTube here <https://www.you
|
|||||||
.. raw:: html
|
.. raw:: html
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
<iframe title="Support Vector Machines for Non-Linearly Separable Data" width="560" height="349" src="http://www.youtube.com/embed/vFv2yPcSo-Q?rel=0&loop=1" frameborder="0" allowfullscreen align="middle"></iframe>
|
<iframe title="Support Vector Machines for Non-Linearly Separable Data" width="560" height="349" src="https://www.youtube.com/embed/vFv2yPcSo-Q?rel=0&loop=1" frameborder="0" allowfullscreen align="middle"></iframe>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -864,10 +864,10 @@ Rect getValidDisparityROI( Rect roi1, Rect roi2,
|
|||||||
int SADWindowSize )
|
int SADWindowSize )
|
||||||
{
|
{
|
||||||
int SW2 = SADWindowSize/2;
|
int SW2 = SADWindowSize/2;
|
||||||
int minD = minDisparity, maxD = minDisparity + numberOfDisparities - 1;
|
int maxD = minDisparity + numberOfDisparities - 1;
|
||||||
|
|
||||||
int xmin = max(roi1.x, roi2.x + maxD) + SW2;
|
int xmin = max(roi1.x, roi2.x + maxD) + SW2;
|
||||||
int xmax = min(roi1.x + roi1.width, roi2.x + roi2.width - minD) - SW2;
|
int xmax = min(roi1.x + roi1.width, roi2.x + roi2.width) - SW2;
|
||||||
int ymin = max(roi1.y, roi2.y) + SW2;
|
int ymin = max(roi1.y, roi2.y) + SW2;
|
||||||
int ymax = min(roi1.y + roi1.height, roi2.y + roi2.height) - SW2;
|
int ymax = min(roi1.y + roi1.height, roi2.y + roi2.height) - SW2;
|
||||||
|
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ protected:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
std::string combine(const std::string& _item1, const std::string& _item2);
|
std::string combine(const std::string& _item1, const std::string& _item2);
|
||||||
cv::Mat mergeRectification(const cv::Mat& l, const cv::Mat& r);
|
static void merge4(const cv::Mat& tl, const cv::Mat& tr, const cv::Mat& bl, const cv::Mat& br, cv::Mat& merged);
|
||||||
};
|
};
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
@@ -385,11 +385,7 @@ TEST_F(fisheyeTest, EstimateUncertainties)
|
|||||||
CV_Assert(errors.alpha == 0);
|
CV_Assert(errors.alpha == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_TEGRA_OPTIMIZATION
|
TEST_F(fisheyeTest, stereoRectify)
|
||||||
TEST_F(fisheyeTest, DISABLED_rectify)
|
|
||||||
#else
|
|
||||||
TEST_F(fisheyeTest, rectify)
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
const std::string folder =combine(datasets_repository_path, "calib-3_stereo_from_JY");
|
const std::string folder =combine(datasets_repository_path, "calib-3_stereo_from_JY");
|
||||||
|
|
||||||
@@ -405,20 +401,65 @@ TEST_F(fisheyeTest, rectify)
|
|||||||
cv::fisheye::stereoRectify(K1, D1, K2, D2, calibration_size, theR, theT, R1, R2, P1, P2, Q,
|
cv::fisheye::stereoRectify(K1, D1, K2, D2, calibration_size, theR, theT, R1, R2, P1, P2, Q,
|
||||||
cv::CALIB_ZERO_DISPARITY, requested_size, balance, fov_scale);
|
cv::CALIB_ZERO_DISPARITY, requested_size, balance, fov_scale);
|
||||||
|
|
||||||
|
// Collected with these CMake flags: -DWITH_IPP=OFF -DCMAKE_BUILD_TYPE=Debug
|
||||||
|
cv::Matx33d R1_ref(
|
||||||
|
0.9992853269091279, 0.03779164101000276, -0.0007920188690205426,
|
||||||
|
-0.03778569762983931, 0.9992646472015868, 0.006511981857667881,
|
||||||
|
0.001037534936357442, -0.006477400933964018, 0.9999784831677112
|
||||||
|
);
|
||||||
|
cv::Matx33d R2_ref(
|
||||||
|
0.9994868963898833, -0.03197579751378937, -0.001868774538573449,
|
||||||
|
0.03196298186616116, 0.9994677442608699, -0.0065265589947392,
|
||||||
|
0.002076471801477729, 0.006463478587068991, 0.9999769555891836
|
||||||
|
);
|
||||||
|
cv::Matx34d P1_ref(
|
||||||
|
420.8551870450913, 0, 586.501617798451, 0,
|
||||||
|
0, 420.8551870450913, 374.7667511986098, 0,
|
||||||
|
0, 0, 1, 0
|
||||||
|
);
|
||||||
|
cv::Matx34d P2_ref(
|
||||||
|
420.8551870450913, 0, 586.501617798451, -41.77758076597302,
|
||||||
|
0, 420.8551870450913, 374.7667511986098, 0,
|
||||||
|
0, 0, 1, 0
|
||||||
|
);
|
||||||
|
cv::Matx44d Q_ref(
|
||||||
|
1, 0, 0, -586.501617798451,
|
||||||
|
0, 1, 0, -374.7667511986098,
|
||||||
|
0, 0, 0, 420.8551870450913,
|
||||||
|
0, 0, 10.07370889670733, -0
|
||||||
|
);
|
||||||
|
|
||||||
|
const double eps = 1e-10;
|
||||||
|
EXPECT_MAT_NEAR(R1_ref, R1, eps);
|
||||||
|
EXPECT_MAT_NEAR(R2_ref, R2, eps);
|
||||||
|
EXPECT_MAT_NEAR(P1_ref, P1, eps);
|
||||||
|
EXPECT_MAT_NEAR(P2_ref, P2, eps);
|
||||||
|
EXPECT_MAT_NEAR(Q_ref, Q, eps);
|
||||||
|
|
||||||
|
if (::testing::Test::HasFailure())
|
||||||
|
{
|
||||||
|
std::cout << "Actual values are:" << std::endl
|
||||||
|
<< "R1 =" << std::endl << R1 << std::endl
|
||||||
|
<< "R2 =" << std::endl << R2 << std::endl
|
||||||
|
<< "P1 =" << std::endl << P1 << std::endl
|
||||||
|
<< "P2 =" << std::endl << P2 << std::endl
|
||||||
|
<< "Q =" << std::endl << Q << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if 1 // Debug code
|
||||||
cv::Mat lmapx, lmapy, rmapx, rmapy;
|
cv::Mat lmapx, lmapy, rmapx, rmapy;
|
||||||
//rewrite for fisheye
|
//rewrite for fisheye
|
||||||
cv::fisheye::initUndistortRectifyMap(K1, D1, R1, P1, requested_size, CV_32F, lmapx, lmapy);
|
cv::fisheye::initUndistortRectifyMap(K1, D1, R1, P1, requested_size, CV_32F, lmapx, lmapy);
|
||||||
cv::fisheye::initUndistortRectifyMap(K2, D2, R2, P2, requested_size, CV_32F, rmapx, rmapy);
|
cv::fisheye::initUndistortRectifyMap(K2, D2, R2, P2, requested_size, CV_32F, rmapx, rmapy);
|
||||||
|
|
||||||
cv::Mat l, r, lundist, rundist;
|
cv::Mat l, r, lundist, rundist;
|
||||||
cv::VideoCapture lcap(combine(folder, "left/stereo_pair_%03d.jpg")),
|
for (int i = 0; i < 34; ++i)
|
||||||
rcap(combine(folder, "right/stereo_pair_%03d.jpg"));
|
|
||||||
|
|
||||||
for(int i = 0;; ++i)
|
|
||||||
{
|
{
|
||||||
lcap >> l; rcap >> r;
|
SCOPED_TRACE(cv::format("image %d", i));
|
||||||
if (l.empty() || r.empty())
|
l = imread(combine(folder, cv::format("left/stereo_pair_%03d.jpg", i)), cv::IMREAD_COLOR);
|
||||||
break;
|
r = imread(combine(folder, cv::format("right/stereo_pair_%03d.jpg", i)), cv::IMREAD_COLOR);
|
||||||
|
ASSERT_FALSE(l.empty());
|
||||||
|
ASSERT_FALSE(r.empty());
|
||||||
|
|
||||||
int ndisp = 128;
|
int ndisp = 128;
|
||||||
cv::rectangle(l, cv::Rect(255, 0, 829, l.rows-1), CV_RGB(255, 0, 0));
|
cv::rectangle(l, cv::Rect(255, 0, 829, l.rows-1), CV_RGB(255, 0, 0));
|
||||||
@@ -427,15 +468,18 @@ TEST_F(fisheyeTest, rectify)
|
|||||||
cv::remap(l, lundist, lmapx, lmapy, cv::INTER_LINEAR);
|
cv::remap(l, lundist, lmapx, lmapy, cv::INTER_LINEAR);
|
||||||
cv::remap(r, rundist, rmapx, rmapy, cv::INTER_LINEAR);
|
cv::remap(r, rundist, rmapx, rmapy, cv::INTER_LINEAR);
|
||||||
|
|
||||||
cv::Mat rectification = mergeRectification(lundist, rundist);
|
for (int ii = 0; ii < lundist.rows; ii += 20)
|
||||||
|
{
|
||||||
|
cv::line(lundist, cv::Point(0, ii), cv::Point(lundist.cols, ii), cv::Scalar(0, 255, 0));
|
||||||
|
cv::line(rundist, cv::Point(0, ii), cv::Point(lundist.cols, ii), cv::Scalar(0, 255, 0));
|
||||||
|
}
|
||||||
|
|
||||||
cv::Mat correct = cv::imread(combine(datasets_repository_path, cv::format("rectification_AB_%03d.png", i)));
|
cv::Mat rectification;
|
||||||
|
merge4(l, r, lundist, rundist, rectification);
|
||||||
|
|
||||||
if (correct.empty())
|
cv::imwrite(cv::format("fisheye_rectification_AB_%03d.png", i), rectification);
|
||||||
cv::imwrite(combine(datasets_repository_path, cv::format("rectification_AB_%03d.png", i)), rectification);
|
}
|
||||||
else
|
#endif
|
||||||
EXPECT_MAT_NEAR(correct, rectification, 1e-10);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(fisheyeTest, stereoCalibrate)
|
TEST_F(fisheyeTest, stereoCalibrate)
|
||||||
@@ -601,17 +645,17 @@ std::string fisheyeTest::combine(const std::string& _item1, const std::string& _
|
|||||||
return item1 + (last != '/' ? "/" : "") + item2;
|
return item1 + (last != '/' ? "/" : "") + item2;
|
||||||
}
|
}
|
||||||
|
|
||||||
cv::Mat fisheyeTest::mergeRectification(const cv::Mat& l, const cv::Mat& r)
|
void fisheyeTest::merge4(const cv::Mat& tl, const cv::Mat& tr, const cv::Mat& bl, const cv::Mat& br, cv::Mat& merged)
|
||||||
{
|
{
|
||||||
CV_Assert(l.type() == r.type() && l.size() == r.size());
|
int type = tl.type();
|
||||||
cv::Mat merged(l.rows, l.cols * 2, l.type());
|
cv::Size sz = tl.size();
|
||||||
cv::Mat lpart = merged.colRange(0, l.cols);
|
ASSERT_EQ(type, tr.type()); ASSERT_EQ(type, bl.type()); ASSERT_EQ(type, br.type());
|
||||||
cv::Mat rpart = merged.colRange(l.cols, merged.cols);
|
ASSERT_EQ(sz.width, tr.cols); ASSERT_EQ(sz.width, bl.cols); ASSERT_EQ(sz.width, br.cols);
|
||||||
l.copyTo(lpart);
|
ASSERT_EQ(sz.height, tr.rows); ASSERT_EQ(sz.height, bl.rows); ASSERT_EQ(sz.height, br.rows);
|
||||||
r.copyTo(rpart);
|
|
||||||
|
|
||||||
for(int i = 0; i < l.rows; i+=20)
|
merged.create(cv::Size(sz.width * 2, sz.height * 2), type);
|
||||||
cv::line(merged, cv::Point(0, i), cv::Point(merged.cols, i), CV_RGB(0, 255, 0));
|
tl.copyTo(merged(cv::Rect(0, 0, sz.width, sz.height)));
|
||||||
|
tr.copyTo(merged(cv::Rect(sz.width, 0, sz.width, sz.height)));
|
||||||
return merged;
|
bl.copyTo(merged(cv::Rect(0, sz.height, sz.width, sz.height)));
|
||||||
|
bl.copyTo(merged(cv::Rect(sz.width, sz.height, sz.width, sz.height)));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -326,9 +326,15 @@ string ERROR_PREFIXES[] = { "borderedAll",
|
|||||||
"borderedTextureless",
|
"borderedTextureless",
|
||||||
"borderedDepthDiscont" }; // size of ERROR_KINDS_COUNT
|
"borderedDepthDiscont" }; // size of ERROR_KINDS_COUNT
|
||||||
|
|
||||||
|
string ROI_PREFIXES[] = { "roiX",
|
||||||
|
"roiY",
|
||||||
|
"roiWidth",
|
||||||
|
"roiHeight" };
|
||||||
|
|
||||||
|
|
||||||
const string RMS_STR = "RMS";
|
const string RMS_STR = "RMS";
|
||||||
const string BAD_PXLS_FRACTION_STR = "BadPxlsFraction";
|
const string BAD_PXLS_FRACTION_STR = "BadPxlsFraction";
|
||||||
|
const string ROI_STR = "ValidDisparityROI";
|
||||||
|
|
||||||
class QualityEvalParams
|
class QualityEvalParams
|
||||||
{
|
{
|
||||||
@@ -366,16 +372,20 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
// assumed that left image is a reference image
|
// assumed that left image is a reference image
|
||||||
virtual int runStereoMatchingAlgorithm( const Mat& leftImg, const Mat& rightImg,
|
virtual int runStereoMatchingAlgorithm( const Mat& leftImg, const Mat& rightImg,
|
||||||
Mat& leftDisp, Mat& rightDisp, int caseIdx ) = 0; // return ignored border width
|
Rect& calcROI, Mat& leftDisp, Mat& rightDisp, int caseIdx ) = 0; // return ignored border width
|
||||||
|
|
||||||
int readDatasetsParams( FileStorage& fs );
|
int readDatasetsParams( FileStorage& fs );
|
||||||
virtual int readRunParams( FileStorage& fs );
|
virtual int readRunParams( FileStorage& fs );
|
||||||
void writeErrors( const string& errName, const vector<float>& errors, FileStorage* fs = 0 );
|
void writeErrors( const string& errName, const vector<float>& errors, FileStorage* fs = 0 );
|
||||||
|
void writeROI( const Rect& calcROI, FileStorage* fs = 0 );
|
||||||
void readErrors( FileNode& fn, const string& errName, vector<float>& errors );
|
void readErrors( FileNode& fn, const string& errName, vector<float>& errors );
|
||||||
|
void readROI( FileNode& fn, Rect& trueROI );
|
||||||
int compareErrors( const vector<float>& calcErrors, const vector<float>& validErrors,
|
int compareErrors( const vector<float>& calcErrors, const vector<float>& validErrors,
|
||||||
const vector<float>& eps, const string& errName );
|
const vector<float>& eps, const string& errName );
|
||||||
|
int compareROI( const Rect& calcROI, const Rect& validROI );
|
||||||
int processStereoMatchingResults( FileStorage& fs, int caseIdx, bool isWrite,
|
int processStereoMatchingResults( FileStorage& fs, int caseIdx, bool isWrite,
|
||||||
const Mat& leftImg, const Mat& rightImg,
|
const Mat& leftImg, const Mat& rightImg,
|
||||||
|
const Rect& calcROI,
|
||||||
const Mat& trueLeftDisp, const Mat& trueRightDisp,
|
const Mat& trueLeftDisp, const Mat& trueRightDisp,
|
||||||
const Mat& leftDisp, const Mat& rightDisp,
|
const Mat& leftDisp, const Mat& rightDisp,
|
||||||
const QualityEvalParams& qualityEvalParams );
|
const QualityEvalParams& qualityEvalParams );
|
||||||
@@ -451,6 +461,7 @@ void CV_StereoMatchingTest::run(int)
|
|||||||
Mat rightImg = imread(datasetFullDirName + RIGHT_IMG_NAME);
|
Mat rightImg = imread(datasetFullDirName + RIGHT_IMG_NAME);
|
||||||
Mat trueLeftDisp = imread(datasetFullDirName + TRUE_LEFT_DISP_NAME, 0);
|
Mat trueLeftDisp = imread(datasetFullDirName + TRUE_LEFT_DISP_NAME, 0);
|
||||||
Mat trueRightDisp = imread(datasetFullDirName + TRUE_RIGHT_DISP_NAME, 0);
|
Mat trueRightDisp = imread(datasetFullDirName + TRUE_RIGHT_DISP_NAME, 0);
|
||||||
|
Rect calcROI;
|
||||||
|
|
||||||
if( leftImg.empty() || rightImg.empty() || trueLeftDisp.empty() )
|
if( leftImg.empty() || rightImg.empty() || trueLeftDisp.empty() )
|
||||||
{
|
{
|
||||||
@@ -473,7 +484,7 @@ void CV_StereoMatchingTest::run(int)
|
|||||||
}
|
}
|
||||||
|
|
||||||
Mat leftDisp, rightDisp;
|
Mat leftDisp, rightDisp;
|
||||||
int ignBorder = max(runStereoMatchingAlgorithm(leftImg, rightImg, leftDisp, rightDisp, ci), EVAL_IGNORE_BORDER);
|
int ignBorder = max(runStereoMatchingAlgorithm(leftImg, rightImg, calcROI, leftDisp, rightDisp, ci), EVAL_IGNORE_BORDER);
|
||||||
|
|
||||||
leftDisp.convertTo( tmp, CV_32FC1 );
|
leftDisp.convertTo( tmp, CV_32FC1 );
|
||||||
leftDisp = tmp;
|
leftDisp = tmp;
|
||||||
@@ -484,7 +495,7 @@ void CV_StereoMatchingTest::run(int)
|
|||||||
tmp.release();
|
tmp.release();
|
||||||
|
|
||||||
int tempCode = processStereoMatchingResults( resFS, ci, isWrite,
|
int tempCode = processStereoMatchingResults( resFS, ci, isWrite,
|
||||||
leftImg, rightImg, trueLeftDisp, trueRightDisp, leftDisp, rightDisp, QualityEvalParams(ignBorder));
|
leftImg, rightImg, calcROI, trueLeftDisp, trueRightDisp, leftDisp, rightDisp, QualityEvalParams(ignBorder));
|
||||||
code = tempCode==cvtest::TS::OK ? code : tempCode;
|
code = tempCode==cvtest::TS::OK ? code : tempCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -538,6 +549,7 @@ void calcErrors( const Mat& leftImg, const Mat& /*rightImg*/,
|
|||||||
|
|
||||||
int CV_StereoMatchingTest::processStereoMatchingResults( FileStorage& fs, int caseIdx, bool isWrite,
|
int CV_StereoMatchingTest::processStereoMatchingResults( FileStorage& fs, int caseIdx, bool isWrite,
|
||||||
const Mat& leftImg, const Mat& rightImg,
|
const Mat& leftImg, const Mat& rightImg,
|
||||||
|
const Rect& calcROI,
|
||||||
const Mat& trueLeftDisp, const Mat& trueRightDisp,
|
const Mat& trueLeftDisp, const Mat& trueRightDisp,
|
||||||
const Mat& leftDisp, const Mat& rightDisp,
|
const Mat& leftDisp, const Mat& rightDisp,
|
||||||
const QualityEvalParams& qualityEvalParams )
|
const QualityEvalParams& qualityEvalParams )
|
||||||
@@ -574,6 +586,8 @@ int CV_StereoMatchingTest::processStereoMatchingResults( FileStorage& fs, int ca
|
|||||||
writeErrors( RMS_STR, rmss, &fs );
|
writeErrors( RMS_STR, rmss, &fs );
|
||||||
cvWriteComment( fs.fs, BAD_PXLS_FRACTION_STR.c_str(), 0 );
|
cvWriteComment( fs.fs, BAD_PXLS_FRACTION_STR.c_str(), 0 );
|
||||||
writeErrors( BAD_PXLS_FRACTION_STR, badPxlsFractions, &fs );
|
writeErrors( BAD_PXLS_FRACTION_STR, badPxlsFractions, &fs );
|
||||||
|
cvWriteComment( fs.fs, ROI_STR.c_str(), 0 );
|
||||||
|
writeROI( calcROI, &fs );
|
||||||
fs << "}"; // datasetName
|
fs << "}"; // datasetName
|
||||||
}
|
}
|
||||||
else // compare
|
else // compare
|
||||||
@@ -583,16 +597,22 @@ int CV_StereoMatchingTest::processStereoMatchingResults( FileStorage& fs, int ca
|
|||||||
writeErrors( RMS_STR, rmss );
|
writeErrors( RMS_STR, rmss );
|
||||||
ts->printf( cvtest::TS::LOG, "%s\n", BAD_PXLS_FRACTION_STR.c_str() );
|
ts->printf( cvtest::TS::LOG, "%s\n", BAD_PXLS_FRACTION_STR.c_str() );
|
||||||
writeErrors( BAD_PXLS_FRACTION_STR, badPxlsFractions );
|
writeErrors( BAD_PXLS_FRACTION_STR, badPxlsFractions );
|
||||||
|
ts->printf( cvtest::TS::LOG, "%s\n", ROI_STR.c_str() );
|
||||||
|
writeROI( calcROI );
|
||||||
|
|
||||||
FileNode fn = fs.getFirstTopLevelNode()[caseNames[caseIdx]];
|
FileNode fn = fs.getFirstTopLevelNode()[caseNames[caseIdx]];
|
||||||
vector<float> validRmss, validBadPxlsFractions;
|
vector<float> validRmss, validBadPxlsFractions;
|
||||||
|
Rect validROI;
|
||||||
|
|
||||||
readErrors( fn, RMS_STR, validRmss );
|
readErrors( fn, RMS_STR, validRmss );
|
||||||
readErrors( fn, BAD_PXLS_FRACTION_STR, validBadPxlsFractions );
|
readErrors( fn, BAD_PXLS_FRACTION_STR, validBadPxlsFractions );
|
||||||
|
readROI( fn, validROI );
|
||||||
int tempCode = compareErrors( rmss, validRmss, rmsEps, RMS_STR );
|
int tempCode = compareErrors( rmss, validRmss, rmsEps, RMS_STR );
|
||||||
code = tempCode==cvtest::TS::OK ? code : tempCode;
|
code = tempCode==cvtest::TS::OK ? code : tempCode;
|
||||||
tempCode = compareErrors( badPxlsFractions, validBadPxlsFractions, fracEps, BAD_PXLS_FRACTION_STR );
|
tempCode = compareErrors( badPxlsFractions, validBadPxlsFractions, fracEps, BAD_PXLS_FRACTION_STR );
|
||||||
code = tempCode==cvtest::TS::OK ? code : tempCode;
|
code = tempCode==cvtest::TS::OK ? code : tempCode;
|
||||||
|
tempCode = compareROI( calcROI, validROI );
|
||||||
|
code = tempCode==cvtest::TS::OK ? code : tempCode;
|
||||||
}
|
}
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
@@ -642,6 +662,24 @@ void CV_StereoMatchingTest::writeErrors( const string& errName, const vector<flo
|
|||||||
ts->printf( cvtest::TS::LOG, "%s = %f\n", string(ERROR_PREFIXES[i]+errName).c_str(), *it );
|
ts->printf( cvtest::TS::LOG, "%s = %f\n", string(ERROR_PREFIXES[i]+errName).c_str(), *it );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CV_StereoMatchingTest::writeROI( const Rect& calcROI, FileStorage* fs )
|
||||||
|
{
|
||||||
|
if( fs )
|
||||||
|
{
|
||||||
|
*fs << ROI_PREFIXES[0] << calcROI.x;
|
||||||
|
*fs << ROI_PREFIXES[1] << calcROI.y;
|
||||||
|
*fs << ROI_PREFIXES[2] << calcROI.width;
|
||||||
|
*fs << ROI_PREFIXES[3] << calcROI.height;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ts->printf( cvtest::TS::LOG, "%s = %d\n", ROI_PREFIXES[0].c_str(), calcROI.x );
|
||||||
|
ts->printf( cvtest::TS::LOG, "%s = %d\n", ROI_PREFIXES[1].c_str(), calcROI.y );
|
||||||
|
ts->printf( cvtest::TS::LOG, "%s = %d\n", ROI_PREFIXES[2].c_str(), calcROI.width );
|
||||||
|
ts->printf( cvtest::TS::LOG, "%s = %d\n", ROI_PREFIXES[3].c_str(), calcROI.height );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void CV_StereoMatchingTest::readErrors( FileNode& fn, const string& errName, vector<float>& errors )
|
void CV_StereoMatchingTest::readErrors( FileNode& fn, const string& errName, vector<float>& errors )
|
||||||
{
|
{
|
||||||
errors.resize( ERROR_KINDS_COUNT );
|
errors.resize( ERROR_KINDS_COUNT );
|
||||||
@@ -650,6 +688,14 @@ void CV_StereoMatchingTest::readErrors( FileNode& fn, const string& errName, vec
|
|||||||
fn[ERROR_PREFIXES[i]+errName] >> *it;
|
fn[ERROR_PREFIXES[i]+errName] >> *it;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CV_StereoMatchingTest::readROI( FileNode& fn, Rect& validROI )
|
||||||
|
{
|
||||||
|
fn[ROI_PREFIXES[0]] >> validROI.x;
|
||||||
|
fn[ROI_PREFIXES[1]] >> validROI.y;
|
||||||
|
fn[ROI_PREFIXES[2]] >> validROI.width;
|
||||||
|
fn[ROI_PREFIXES[3]] >> validROI.height;
|
||||||
|
}
|
||||||
|
|
||||||
int CV_StereoMatchingTest::compareErrors( const vector<float>& calcErrors, const vector<float>& validErrors,
|
int CV_StereoMatchingTest::compareErrors( const vector<float>& calcErrors, const vector<float>& validErrors,
|
||||||
const vector<float>& eps, const string& errName )
|
const vector<float>& eps, const string& errName )
|
||||||
{
|
{
|
||||||
@@ -669,6 +715,26 @@ int CV_StereoMatchingTest::compareErrors( const vector<float>& calcErrors, const
|
|||||||
return ok ? cvtest::TS::OK : cvtest::TS::FAIL_BAD_ACCURACY;
|
return ok ? cvtest::TS::OK : cvtest::TS::FAIL_BAD_ACCURACY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int CV_StereoMatchingTest::compareROI( const Rect& calcROI, const Rect& validROI )
|
||||||
|
{
|
||||||
|
int compare[4][2] = {
|
||||||
|
{ calcROI.x, validROI.x },
|
||||||
|
{ calcROI.y, validROI.y },
|
||||||
|
{ calcROI.width, validROI.width },
|
||||||
|
{ calcROI.height, validROI.height },
|
||||||
|
};
|
||||||
|
bool ok = true;
|
||||||
|
for (int i = 0; i < 4; i++)
|
||||||
|
{
|
||||||
|
if (compare[i][0] != compare[i][1])
|
||||||
|
{
|
||||||
|
ts->printf( cvtest::TS::LOG, "bad accuracy of %s (valid=%d; calc=%d)\n", ROI_PREFIXES[i].c_str(), compare[i][1], compare[i][0] );
|
||||||
|
ok = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ok ? cvtest::TS::OK : cvtest::TS::FAIL_BAD_ACCURACY;
|
||||||
|
}
|
||||||
|
|
||||||
//----------------------------------- StereoBM test -----------------------------------------------------
|
//----------------------------------- StereoBM test -----------------------------------------------------
|
||||||
|
|
||||||
class CV_StereoBMTest : public CV_StereoMatchingTest
|
class CV_StereoBMTest : public CV_StereoMatchingTest
|
||||||
@@ -685,6 +751,7 @@ protected:
|
|||||||
struct RunParams
|
struct RunParams
|
||||||
{
|
{
|
||||||
int ndisp;
|
int ndisp;
|
||||||
|
int mindisp;
|
||||||
int winSize;
|
int winSize;
|
||||||
};
|
};
|
||||||
vector<RunParams> caseRunParams;
|
vector<RunParams> caseRunParams;
|
||||||
@@ -694,12 +761,13 @@ protected:
|
|||||||
int code = CV_StereoMatchingTest::readRunParams( fs );
|
int code = CV_StereoMatchingTest::readRunParams( fs );
|
||||||
FileNode fn = fs.getFirstTopLevelNode();
|
FileNode fn = fs.getFirstTopLevelNode();
|
||||||
assert(fn.isSeq());
|
assert(fn.isSeq());
|
||||||
for( int i = 0; i < (int)fn.size(); i+=4 )
|
for( int i = 0; i < (int)fn.size(); i+=5 )
|
||||||
{
|
{
|
||||||
string caseName = fn[i], datasetName = fn[i+1];
|
string caseName = fn[i], datasetName = fn[i+1];
|
||||||
RunParams params;
|
RunParams params;
|
||||||
string ndisp = fn[i+2]; params.ndisp = atoi(ndisp.c_str());
|
String ndisp = fn[i+2]; params.ndisp = atoi(ndisp.c_str());
|
||||||
string winSize = fn[i+3]; params.winSize = atoi(winSize.c_str());
|
String mindisp = fn[i+3]; params.mindisp = atoi(mindisp.c_str());
|
||||||
|
String winSize = fn[i+4]; params.winSize = atoi(winSize.c_str());
|
||||||
caseNames.push_back( caseName );
|
caseNames.push_back( caseName );
|
||||||
caseDatasets.push_back( datasetName );
|
caseDatasets.push_back( datasetName );
|
||||||
caseRunParams.push_back( params );
|
caseRunParams.push_back( params );
|
||||||
@@ -708,7 +776,7 @@ protected:
|
|||||||
}
|
}
|
||||||
|
|
||||||
virtual int runStereoMatchingAlgorithm( const Mat& _leftImg, const Mat& _rightImg,
|
virtual int runStereoMatchingAlgorithm( const Mat& _leftImg, const Mat& _rightImg,
|
||||||
Mat& leftDisp, Mat& /*rightDisp*/, int caseIdx )
|
Rect& calcROI, Mat& leftDisp, Mat& /*rightDisp*/, int caseIdx )
|
||||||
{
|
{
|
||||||
RunParams params = caseRunParams[caseIdx];
|
RunParams params = caseRunParams[caseIdx];
|
||||||
assert( params.ndisp%16 == 0 );
|
assert( params.ndisp%16 == 0 );
|
||||||
@@ -717,7 +785,21 @@ protected:
|
|||||||
Mat rightImg; cvtColor( _rightImg, rightImg, CV_BGR2GRAY );
|
Mat rightImg; cvtColor( _rightImg, rightImg, CV_BGR2GRAY );
|
||||||
|
|
||||||
StereoBM bm( StereoBM::BASIC_PRESET, params.ndisp, params.winSize );
|
StereoBM bm( StereoBM::BASIC_PRESET, params.ndisp, params.winSize );
|
||||||
|
bm.state->minDisparity = params.mindisp;
|
||||||
|
|
||||||
|
Rect cROI(0, 0, _leftImg.cols, _leftImg.rows);
|
||||||
|
calcROI = getValidDisparityROI(cROI, cROI, params.mindisp, params.ndisp, params.winSize);
|
||||||
|
|
||||||
bm( leftImg, rightImg, leftDisp, CV_32F );
|
bm( leftImg, rightImg, leftDisp, CV_32F );
|
||||||
|
|
||||||
|
if (params.mindisp != 0)
|
||||||
|
for (int y = 0; y < leftDisp.rows; y++)
|
||||||
|
for (int x = 0; x < leftDisp.cols; x++)
|
||||||
|
{
|
||||||
|
if (leftDisp.at<float>(y, x) < params.mindisp)
|
||||||
|
leftDisp.at<float>(y, x) = -0.0625; // treat disparity < mindisp as no disparity
|
||||||
|
}
|
||||||
|
|
||||||
return params.winSize/2;
|
return params.winSize/2;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -754,7 +836,13 @@ protected:
|
|||||||
RunParams params;
|
RunParams params;
|
||||||
string ndisp = fn[i+2]; params.ndisp = atoi(ndisp.c_str());
|
string ndisp = fn[i+2]; params.ndisp = atoi(ndisp.c_str());
|
||||||
string winSize = fn[i+3]; params.winSize = atoi(winSize.c_str());
|
string winSize = fn[i+3]; params.winSize = atoi(winSize.c_str());
|
||||||
string fullDP = fn[i+4]; params.fullDP = atoi(fullDP.c_str()) == 0 ? false : true;
|
string fullDP = fn[i+4];
|
||||||
|
int n = atoi(fullDP.c_str());
|
||||||
|
params.fullDP = n == 0 ? false : true;
|
||||||
|
|
||||||
|
if (n > 1)
|
||||||
|
continue; // OpenCV 3+ compatibility - skip tests for mode > 1
|
||||||
|
|
||||||
caseNames.push_back( caseName );
|
caseNames.push_back( caseName );
|
||||||
caseDatasets.push_back( datasetName );
|
caseDatasets.push_back( datasetName );
|
||||||
caseRunParams.push_back( params );
|
caseRunParams.push_back( params );
|
||||||
@@ -763,12 +851,16 @@ protected:
|
|||||||
}
|
}
|
||||||
|
|
||||||
virtual int runStereoMatchingAlgorithm( const Mat& leftImg, const Mat& rightImg,
|
virtual int runStereoMatchingAlgorithm( const Mat& leftImg, const Mat& rightImg,
|
||||||
Mat& leftDisp, Mat& /*rightDisp*/, int caseIdx )
|
Rect& calcROI, Mat& leftDisp, Mat& /*rightDisp*/, int caseIdx )
|
||||||
{
|
{
|
||||||
RunParams params = caseRunParams[caseIdx];
|
RunParams params = caseRunParams[caseIdx];
|
||||||
assert( params.ndisp%16 == 0 );
|
assert( params.ndisp%16 == 0 );
|
||||||
StereoSGBM sgbm( 0, params.ndisp, params.winSize, 10*params.winSize*params.winSize, 40*params.winSize*params.winSize,
|
StereoSGBM sgbm( 0, params.ndisp, params.winSize, 10*params.winSize*params.winSize, 40*params.winSize*params.winSize,
|
||||||
1, 63, 10, 100, 32, params.fullDP );
|
1, 63, 10, 100, 32, params.fullDP );
|
||||||
|
|
||||||
|
Rect cROI(0, 0, leftImg.cols, leftImg.rows);
|
||||||
|
calcROI = getValidDisparityROI(cROI, cROI, 0, params.ndisp, params.winSize);
|
||||||
|
|
||||||
sgbm( leftImg, rightImg, leftDisp );
|
sgbm( leftImg, rightImg, leftDisp );
|
||||||
assert( leftDisp.type() == CV_16SC1 );
|
assert( leftDisp.type() == CV_16SC1 );
|
||||||
leftDisp/=16;
|
leftDisp/=16;
|
||||||
|
|||||||
@@ -50,7 +50,7 @@
|
|||||||
#define CV_VERSION_EPOCH 2
|
#define CV_VERSION_EPOCH 2
|
||||||
#define CV_VERSION_MAJOR 4
|
#define CV_VERSION_MAJOR 4
|
||||||
#define CV_VERSION_MINOR 13
|
#define CV_VERSION_MINOR 13
|
||||||
#define CV_VERSION_REVISION 4
|
#define CV_VERSION_REVISION 6
|
||||||
|
|
||||||
#define CVAUX_STR_EXP(__A) #__A
|
#define CVAUX_STR_EXP(__A) #__A
|
||||||
#define CVAUX_STR(__A) CVAUX_STR_EXP(__A)
|
#define CVAUX_STR(__A) CVAUX_STR_EXP(__A)
|
||||||
|
|||||||
@@ -2994,6 +2994,7 @@ PCA& PCA::computeVar(InputArray _data, InputArray __mean, int flags, double reta
|
|||||||
{
|
{
|
||||||
CV_Assert( _mean.size() == mean_sz );
|
CV_Assert( _mean.size() == mean_sz );
|
||||||
_mean.convertTo(mean, ctype);
|
_mean.convertTo(mean, ctype);
|
||||||
|
covar_flags |= CV_COVAR_USE_AVG;
|
||||||
}
|
}
|
||||||
|
|
||||||
calcCovarMatrix( data, covar, mean, covar_flags, ctype );
|
calcCovarMatrix( data, covar, mean, covar_flags, ctype );
|
||||||
|
|||||||
@@ -272,9 +272,8 @@ void SimpleBlobDetector::findBlobs(const cv::Mat &image, const cv::Mat &binaryIm
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void SimpleBlobDetector::detectImpl(const cv::Mat& image, std::vector<cv::KeyPoint>& keypoints, const cv::Mat&) const
|
void SimpleBlobDetector::detectImpl(const cv::Mat& image, std::vector<cv::KeyPoint>& keypoints, const cv::Mat& mask) const
|
||||||
{
|
{
|
||||||
//TODO: support mask
|
|
||||||
keypoints.clear();
|
keypoints.clear();
|
||||||
Mat grayscaleImage;
|
Mat grayscaleImage;
|
||||||
if (image.channels() == 3)
|
if (image.channels() == 3)
|
||||||
@@ -355,6 +354,11 @@ void SimpleBlobDetector::detectImpl(const cv::Mat& image, std::vector<cv::KeyPoi
|
|||||||
keypoints.push_back(kpt);
|
keypoints.push_back(kpt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!mask.empty())
|
||||||
|
{
|
||||||
|
KeyPointsFilter::runByPixelsMask(keypoints, mask);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef DEBUG_BLOB_DETECTOR
|
#ifdef DEBUG_BLOB_DETECTOR
|
||||||
namedWindow("keypoints", CV_WINDOW_NORMAL);
|
namedWindow("keypoints", CV_WINDOW_NORMAL);
|
||||||
Mat outImg = image.clone();
|
Mat outImg = image.clone();
|
||||||
|
|||||||
@@ -42,6 +42,7 @@
|
|||||||
|
|
||||||
#include "precomp.hpp"
|
#include "precomp.hpp"
|
||||||
#include "bitstrm.hpp"
|
#include "bitstrm.hpp"
|
||||||
|
#include "utils.hpp"
|
||||||
|
|
||||||
namespace cv
|
namespace cv
|
||||||
{
|
{
|
||||||
@@ -103,7 +104,6 @@ void RBaseStream::readBlock()
|
|||||||
fseek( m_file, m_block_pos, SEEK_SET );
|
fseek( m_file, m_block_pos, SEEK_SET );
|
||||||
size_t readed = fread( m_start, 1, m_block_size, m_file );
|
size_t readed = fread( m_start, 1, m_block_size, m_file );
|
||||||
m_end = m_start + readed;
|
m_end = m_start + readed;
|
||||||
m_current = m_start;
|
|
||||||
|
|
||||||
if( readed == 0 || m_current >= m_end )
|
if( readed == 0 || m_current >= m_end )
|
||||||
throw RBS_THROW_EOS;
|
throw RBS_THROW_EOS;
|
||||||
@@ -164,7 +164,7 @@ void RBaseStream::release()
|
|||||||
|
|
||||||
void RBaseStream::setPos( int pos )
|
void RBaseStream::setPos( int pos )
|
||||||
{
|
{
|
||||||
assert( isOpened() && pos >= 0 );
|
CV_Assert(isOpened() && pos >= 0);
|
||||||
|
|
||||||
if( !m_file )
|
if( !m_file )
|
||||||
{
|
{
|
||||||
@@ -181,14 +181,19 @@ void RBaseStream::setPos( int pos )
|
|||||||
|
|
||||||
int RBaseStream::getPos()
|
int RBaseStream::getPos()
|
||||||
{
|
{
|
||||||
assert( isOpened() );
|
CV_Assert(isOpened());
|
||||||
return m_block_pos + (int)(m_current - m_start);
|
int pos = validateToInt((m_current - m_start) + m_block_pos);
|
||||||
|
CV_Assert(pos >= m_block_pos); // overflow check
|
||||||
|
CV_Assert(pos >= 0); // overflow check
|
||||||
|
return pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RBaseStream::skip( int bytes )
|
void RBaseStream::skip( int bytes )
|
||||||
{
|
{
|
||||||
assert( bytes >= 0 );
|
CV_Assert(bytes >= 0);
|
||||||
|
uchar* old = m_current;
|
||||||
m_current += bytes;
|
m_current += bytes;
|
||||||
|
CV_Assert(m_current >= old); // overflow check
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////// RLByteStream ////////////////////////////
|
///////////////////////// RLByteStream ////////////////////////////
|
||||||
@@ -220,7 +225,7 @@ int RLByteStream::getBytes( void* buffer, int count )
|
|||||||
{
|
{
|
||||||
uchar* data = (uchar*)buffer;
|
uchar* data = (uchar*)buffer;
|
||||||
int readed = 0;
|
int readed = 0;
|
||||||
assert( count >= 0 );
|
CV_Assert(count >= 0);
|
||||||
|
|
||||||
while( count > 0 )
|
while( count > 0 )
|
||||||
{
|
{
|
||||||
@@ -371,7 +376,7 @@ void WBaseStream::writeBlock()
|
|||||||
{
|
{
|
||||||
int size = (int)(m_current - m_start);
|
int size = (int)(m_current - m_start);
|
||||||
|
|
||||||
assert( isOpened() );
|
CV_Assert(isOpened());
|
||||||
if( size == 0 )
|
if( size == 0 )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -442,7 +447,7 @@ void WBaseStream::release()
|
|||||||
|
|
||||||
int WBaseStream::getPos()
|
int WBaseStream::getPos()
|
||||||
{
|
{
|
||||||
assert( isOpened() );
|
CV_Assert(isOpened());
|
||||||
return m_block_pos + (int)(m_current - m_start);
|
return m_block_pos + (int)(m_current - m_start);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -465,7 +470,7 @@ void WLByteStream::putBytes( const void* buffer, int count )
|
|||||||
{
|
{
|
||||||
uchar* data = (uchar*)buffer;
|
uchar* data = (uchar*)buffer;
|
||||||
|
|
||||||
assert( data && m_current && count >= 0 );
|
CV_Assert(data && m_current && count >= 0);
|
||||||
|
|
||||||
while( count )
|
while( count )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -92,6 +92,7 @@ bool BmpDecoder::readHeader()
|
|||||||
m_offset = m_strm.getDWord();
|
m_offset = m_strm.getDWord();
|
||||||
|
|
||||||
int size = m_strm.getDWord();
|
int size = m_strm.getDWord();
|
||||||
|
CV_Assert(size > 0); // overflow, 2Gb limit
|
||||||
|
|
||||||
if( size >= 36 )
|
if( size >= 36 )
|
||||||
{
|
{
|
||||||
@@ -115,7 +116,7 @@ bool BmpDecoder::readHeader()
|
|||||||
|
|
||||||
if( m_bpp <= 8 )
|
if( m_bpp <= 8 )
|
||||||
{
|
{
|
||||||
CV_Assert(clrused <= 256);
|
CV_Assert(clrused >= 0 && clrused <= 256);
|
||||||
memset(m_palette, 0, sizeof(m_palette));
|
memset(m_palette, 0, sizeof(m_palette));
|
||||||
m_strm.getBytes(m_palette, (clrused == 0? 1<<m_bpp : clrused)*4 );
|
m_strm.getBytes(m_palette, (clrused == 0? 1<<m_bpp : clrused)*4 );
|
||||||
iscolor = IsColorPalette( m_palette, m_bpp );
|
iscolor = IsColorPalette( m_palette, m_bpp );
|
||||||
|
|||||||
@@ -77,7 +77,8 @@ static JasperInitializer initialize_jasper;
|
|||||||
|
|
||||||
Jpeg2KDecoder::Jpeg2KDecoder()
|
Jpeg2KDecoder::Jpeg2KDecoder()
|
||||||
{
|
{
|
||||||
m_signature = '\0' + string() + '\0' + string() + '\0' + string("\x0cjP \r\n\x87\n");
|
static const unsigned char signature_[12] = { 0, 0, 0, 0x0c, 'j', 'P', ' ', ' ', 13, 10, 0x87, 10};
|
||||||
|
m_signature = string((const char*)signature_, (const char*)signature_ + sizeof(signature_));
|
||||||
m_stream = 0;
|
m_stream = 0;
|
||||||
m_image = 0;
|
m_image = 0;
|
||||||
}
|
}
|
||||||
@@ -121,6 +122,8 @@ bool Jpeg2KDecoder::readHeader()
|
|||||||
jas_image_t* image = jas_image_decode( stream, -1, 0 );
|
jas_image_t* image = jas_image_decode( stream, -1, 0 );
|
||||||
m_image = image;
|
m_image = image;
|
||||||
if( image ) {
|
if( image ) {
|
||||||
|
CV_Assert(0 == (jas_image_tlx(image)) && "not supported");
|
||||||
|
CV_Assert(0 == (jas_image_tly(image)) && "not supported");
|
||||||
m_width = jas_image_width( image );
|
m_width = jas_image_width( image );
|
||||||
m_height = jas_image_height( image );
|
m_height = jas_image_height( image );
|
||||||
|
|
||||||
@@ -130,14 +133,31 @@ bool Jpeg2KDecoder::readHeader()
|
|||||||
for( int i = 0; i < numcmpts; i++ )
|
for( int i = 0; i < numcmpts; i++ )
|
||||||
{
|
{
|
||||||
int depth_i = jas_image_cmptprec( image, i );
|
int depth_i = jas_image_cmptprec( image, i );
|
||||||
|
CV_Assert(depth == 0 || depth == depth_i); // component data type mismatch
|
||||||
depth = MAX(depth, depth_i);
|
depth = MAX(depth, depth_i);
|
||||||
if( jas_image_cmpttype( image, i ) > 2 )
|
if( jas_image_cmpttype( image, i ) > 2 )
|
||||||
continue;
|
continue;
|
||||||
|
int sgnd = jas_image_cmptsgnd(image, i);
|
||||||
|
int xstart = jas_image_cmpttlx(image, i);
|
||||||
|
int xend = jas_image_cmptbrx(image, i);
|
||||||
|
int xstep = jas_image_cmpthstep(image, i);
|
||||||
|
int ystart = jas_image_cmpttly(image, i);
|
||||||
|
int yend = jas_image_cmptbry(image, i);
|
||||||
|
int ystep = jas_image_cmptvstep(image, i);
|
||||||
|
CV_Assert(sgnd == 0 && "not supported");
|
||||||
|
CV_Assert(xstart == 0 && "not supported");
|
||||||
|
CV_Assert(ystart == 0 && "not supported");
|
||||||
|
CV_Assert(xstep == 1 && "not supported");
|
||||||
|
CV_Assert(ystep == 1 && "not supported");
|
||||||
|
CV_Assert(xend == m_width);
|
||||||
|
CV_Assert(yend == m_height);
|
||||||
cntcmpts++;
|
cntcmpts++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( cntcmpts )
|
if( cntcmpts )
|
||||||
{
|
{
|
||||||
|
CV_Assert(depth == 8 || depth == 16);
|
||||||
|
CV_Assert(cntcmpts == 1 || cntcmpts == 3);
|
||||||
m_type = CV_MAKETYPE(depth <= 8 ? CV_8U : CV_16U, cntcmpts > 1 ? 3 : 1);
|
m_type = CV_MAKETYPE(depth <= 8 ? CV_8U : CV_16U, cntcmpts > 1 ? 3 : 1);
|
||||||
result = true;
|
result = true;
|
||||||
}
|
}
|
||||||
@@ -150,9 +170,15 @@ bool Jpeg2KDecoder::readHeader()
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void Jpeg2KDecoder_close(Jpeg2KDecoder* ptr)
|
||||||
|
{
|
||||||
|
ptr->close();
|
||||||
|
}
|
||||||
|
template<> void Ptr<Jpeg2KDecoder>::delete_obj() { Jpeg2KDecoder_close(obj); }
|
||||||
|
|
||||||
bool Jpeg2KDecoder::readData( Mat& img )
|
bool Jpeg2KDecoder::readData( Mat& img )
|
||||||
{
|
{
|
||||||
|
Ptr<Jpeg2KDecoder> close_this(this); // auto cleanup: Jpeg2KDecoder_close
|
||||||
bool result = false;
|
bool result = false;
|
||||||
int color = img.channels() > 1;
|
int color = img.channels() > 1;
|
||||||
uchar* data = img.data;
|
uchar* data = img.data;
|
||||||
@@ -204,11 +230,16 @@ bool Jpeg2KDecoder::readData( Mat& img )
|
|||||||
result = true;
|
result = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
fprintf(stderr, "JPEG 2000 LOADER ERROR: cannot convert colorspace\n");
|
{
|
||||||
|
jas_cmprof_destroy(clrprof);
|
||||||
|
CV_Error(CV_StsError, "JPEG 2000 LOADER ERROR: cannot convert colorspace");
|
||||||
|
}
|
||||||
jas_cmprof_destroy( clrprof );
|
jas_cmprof_destroy( clrprof );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
fprintf(stderr, "JPEG 2000 LOADER ERROR: unable to create colorspace\n");
|
{
|
||||||
|
CV_Error(CV_StsError, "JPEG 2000 LOADER ERROR: unable to create colorspace");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
result = true;
|
result = true;
|
||||||
@@ -257,8 +288,8 @@ bool Jpeg2KDecoder::readData( Mat& img )
|
|||||||
result = readComponent16u( ((unsigned short *)data) + i, buffer, validateToInt(step / 2), cmptlut[i], maxval, offset, ncmpts );
|
result = readComponent16u( ((unsigned short *)data) + i, buffer, validateToInt(step / 2), cmptlut[i], maxval, offset, ncmpts );
|
||||||
if( !result )
|
if( !result )
|
||||||
{
|
{
|
||||||
i = ncmpts;
|
jas_matrix_destroy( buffer );
|
||||||
result = false;
|
CV_Error(CV_StsError, "JPEG2000 LOADER ERROR: failed to read component");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
jas_matrix_destroy( buffer );
|
jas_matrix_destroy( buffer );
|
||||||
@@ -267,10 +298,12 @@ bool Jpeg2KDecoder::readData( Mat& img )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
fprintf(stderr, "JPEG2000 LOADER ERROR: colorspace conversion failed\n" );
|
{
|
||||||
|
CV_Error(CV_StsError, "JPEG2000 LOADER ERROR: colorspace conversion failed");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
close();
|
CV_Assert(result == true);
|
||||||
|
|
||||||
#ifndef WIN32
|
#ifndef WIN32
|
||||||
if (!clr.empty())
|
if (!clr.empty())
|
||||||
|
|||||||
@@ -331,7 +331,7 @@ bool PxMDecoder::readData( Mat& img )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
memcpy( data, src, m_width*(bit_depth/8) );
|
memcpy(data, src, img.elemSize1()*m_width);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -120,7 +120,7 @@ bool SunRasterDecoder::readHeader()
|
|||||||
m_type = IsColorPalette( m_palette, m_bpp ) ? CV_8UC3 : CV_8UC1;
|
m_type = IsColorPalette( m_palette, m_bpp ) ? CV_8UC3 : CV_8UC1;
|
||||||
m_offset = m_strm.getPos();
|
m_offset = m_strm.getPos();
|
||||||
|
|
||||||
assert( m_offset == 32 + m_maplength );
|
CV_Assert(m_offset == 32 + m_maplength);
|
||||||
result = true;
|
result = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -133,7 +133,7 @@ bool SunRasterDecoder::readHeader()
|
|||||||
|
|
||||||
m_offset = m_strm.getPos();
|
m_offset = m_strm.getPos();
|
||||||
|
|
||||||
assert( m_offset == 32 + m_maplength );
|
CV_Assert(m_offset == 32 + m_maplength);
|
||||||
result = true;
|
result = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -226,7 +226,7 @@ bool SunRasterDecoder::readData( Mat& img )
|
|||||||
code = m_strm.getByte();
|
code = m_strm.getByte();
|
||||||
if( len > line_end - tsrc )
|
if( len > line_end - tsrc )
|
||||||
{
|
{
|
||||||
assert(0);
|
CV_Error(CV_StsInternal, "");
|
||||||
goto bad_decoding_1bpp;
|
goto bad_decoding_1bpp;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -367,7 +367,7 @@ bad_decoding_end:
|
|||||||
result = true;
|
result = true;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
assert(0);
|
CV_Error(CV_StsInternal, "");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch( ... )
|
catch( ... )
|
||||||
|
|||||||
@@ -54,7 +54,7 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <assert.h>
|
#include <assert.h> // FIX IT: remove this
|
||||||
|
|
||||||
#if defined WIN32 || defined WINCE
|
#if defined WIN32 || defined WINCE
|
||||||
#if !defined _WIN32_WINNT
|
#if !defined _WIN32_WINNT
|
||||||
|
|||||||
@@ -670,7 +670,7 @@ cvConvertImage( const CvArr* srcarr, CvArr* dstarr, int flags )
|
|||||||
icvCvt_BGR2Gray_8u_C3C1R( s, s_step, d, d_step, size, swap_rb );
|
icvCvt_BGR2Gray_8u_C3C1R( s, s_step, d, d_step, size, swap_rb );
|
||||||
break;
|
break;
|
||||||
case 33:
|
case 33:
|
||||||
assert( swap_rb );
|
CV_Assert(swap_rb);
|
||||||
icvCvt_RGB2BGR_8u_C3R( s, s_step, d, d_step, size );
|
icvCvt_RGB2BGR_8u_C3R( s, s_step, d, d_step, size );
|
||||||
break;
|
break;
|
||||||
case 41:
|
case 41:
|
||||||
|
|||||||
@@ -49,6 +49,7 @@ def build_opencv(srcroot, buildroot, target, arch):
|
|||||||
# for some reason, if you do not specify CMAKE_BUILD_TYPE, it puts libs to "RELEASE" rather than "Release"
|
# for some reason, if you do not specify CMAKE_BUILD_TYPE, it puts libs to "RELEASE" rather than "Release"
|
||||||
cmakeargs = ("-GXcode " +
|
cmakeargs = ("-GXcode " +
|
||||||
"-DCMAKE_BUILD_TYPE=Release " +
|
"-DCMAKE_BUILD_TYPE=Release " +
|
||||||
|
("-DIOS_ARCH=%s " % arch) +
|
||||||
"-DCMAKE_TOOLCHAIN_FILE=%s/platforms/ios/cmake/Toolchains/Toolchain-%s_Xcode.cmake " +
|
"-DCMAKE_TOOLCHAIN_FILE=%s/platforms/ios/cmake/Toolchains/Toolchain-%s_Xcode.cmake " +
|
||||||
"-DBUILD_opencv_world=ON " +
|
"-DBUILD_opencv_world=ON " +
|
||||||
"-DCMAKE_C_FLAGS=\"-Wno-implicit-function-declaration\" " +
|
"-DCMAKE_C_FLAGS=\"-Wno-implicit-function-declaration\" " +
|
||||||
|
|||||||
@@ -43,7 +43,10 @@ set (no_warn "-Wno-unused-function -Wno-overloaded-virtual")
|
|||||||
set (CMAKE_C_FLAGS "${no_warn}")
|
set (CMAKE_C_FLAGS "${no_warn}")
|
||||||
set (CMAKE_CXX_FLAGS "-stdlib=libc++ -fvisibility=hidden -fvisibility-inlines-hidden ${no_warn}")
|
set (CMAKE_CXX_FLAGS "-stdlib=libc++ -fvisibility=hidden -fvisibility-inlines-hidden ${no_warn}")
|
||||||
|
|
||||||
set (CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG -O3 -fomit-frame-pointer -ffast-math")
|
set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG -O3 -ffast-math")
|
||||||
|
if(NOT IOS_ARCH STREQUAL "armv7" AND NOT IOS_ARCH STREQUAL "armv7s")
|
||||||
|
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fomit-frame-pointer")
|
||||||
|
endif()
|
||||||
|
|
||||||
if (HAVE_FLAG_SEARCH_PATHS_FIRST)
|
if (HAVE_FLAG_SEARCH_PATHS_FIRST)
|
||||||
set (CMAKE_C_LINK_FLAGS "-Wl,-search_paths_first ${CMAKE_C_LINK_FLAGS}")
|
set (CMAKE_C_LINK_FLAGS "-Wl,-search_paths_first ${CMAKE_C_LINK_FLAGS}")
|
||||||
|
|||||||
@@ -2,7 +2,10 @@ message (STATUS "Setting up iPhoneOS toolchain")
|
|||||||
set (IPHONEOS TRUE)
|
set (IPHONEOS TRUE)
|
||||||
|
|
||||||
# Standard settings
|
# Standard settings
|
||||||
set (CMAKE_SYSTEM_NAME iOS)
|
set(CMAKE_SYSTEM_NAME iOS)
|
||||||
|
set(CMAKE_SYSTEM_VERSION 6.0)
|
||||||
|
set(CMAKE_SYSTEM_PROCESSOR "${IOS_ARCH}")
|
||||||
|
|
||||||
# Include extra modules for the iOS platform files
|
# Include extra modules for the iOS platform files
|
||||||
set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/cmake/Modules")
|
set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/cmake/Modules")
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,10 @@ message (STATUS "Setting up iPhoneSimulator toolchain")
|
|||||||
set (IPHONESIMULATOR TRUE)
|
set (IPHONESIMULATOR TRUE)
|
||||||
|
|
||||||
# Standard settings
|
# Standard settings
|
||||||
set (CMAKE_SYSTEM_NAME iOS)
|
set(CMAKE_SYSTEM_NAME iOS)
|
||||||
|
set(CMAKE_SYSTEM_VERSION 6.0)
|
||||||
|
set(CMAKE_SYSTEM_PROCESSOR "${IOS_ARCH}")
|
||||||
|
|
||||||
# Include extra modules for the iOS platform files
|
# Include extra modules for the iOS platform files
|
||||||
set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/cmake/Modules")
|
set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/cmake/Modules")
|
||||||
|
|
||||||
|
|||||||
@@ -8,9 +8,9 @@ Example of using features2d framework for interactive video homography matching.
|
|||||||
ORB features and FLANN matcher are used. The actual tracking is implemented by
|
ORB features and FLANN matcher are used. The actual tracking is implemented by
|
||||||
PlaneTracker class in plane_tracker.py
|
PlaneTracker class in plane_tracker.py
|
||||||
|
|
||||||
Inspired by http://www.youtube.com/watch?v=-ZNYoL8rzPY
|
Inspired by https://www.youtube.com/watch?v=-ZNYoL8rzPY
|
||||||
|
|
||||||
video: http://www.youtube.com/watch?v=FirtmYcC0Vc
|
video: https://www.youtube.com/watch?v=FirtmYcC0Vc
|
||||||
|
|
||||||
Usage
|
Usage
|
||||||
-----
|
-----
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ This sample shows an example of augmented reality overlay over a planar object
|
|||||||
tracked by PlaneTracker from plane_tracker.py. solvePnP funciton is used to
|
tracked by PlaneTracker from plane_tracker.py. solvePnP funciton is used to
|
||||||
estimate the tracked object location in 3d space.
|
estimate the tracked object location in 3d space.
|
||||||
|
|
||||||
video: http://www.youtube.com/watch?v=pzVbhxx6aog
|
video: https://www.youtube.com/watch?v=pzVbhxx6aog
|
||||||
|
|
||||||
Usage
|
Usage
|
||||||
-----
|
-----
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ Example of using features2d framework for interactive video homography matching.
|
|||||||
ORB features and FLANN matcher are used. This sample provides PlaneTracker class
|
ORB features and FLANN matcher are used. This sample provides PlaneTracker class
|
||||||
and an example of its usage.
|
and an example of its usage.
|
||||||
|
|
||||||
video: http://www.youtube.com/watch?v=pzVbhxx6aog
|
video: https://www.youtube.com/watch?v=pzVbhxx6aog
|
||||||
|
|
||||||
Usage
|
Usage
|
||||||
-----
|
-----
|
||||||
|
|||||||
Reference in New Issue
Block a user