Comparar commits
500 Commits
| Autor | SHA1 | Data | |
|---|---|---|---|
| aa7ea9be78 | |||
| 114e04ee12 | |||
| 09e66adadc | |||
| ba26f6d48a | |||
| a0f6e1ba1d | |||
| 2b2e02166e | |||
| 2dedfd9762 | |||
| f77d1f57ee | |||
| b1f04c5388 | |||
| fcb4c0e51c | |||
| 1a2458885b | |||
| 69b308a368 | |||
| f5089100b9 | |||
| c4e59866a2 | |||
| b6b1d5e75d | |||
| 36a4d246f4 | |||
| e905c81ccc | |||
| dbf02c71b6 | |||
| 2b44172026 | |||
| 0732905cff | |||
| ea054e2888 | |||
| 4e939e2fce | |||
| ec1df9f54d | |||
| c2e6668414 | |||
| 83fd385bbd | |||
| 3677a66403 | |||
| a2d576c1bb | |||
| 4d569732b9 | |||
| 97e620b8f3 | |||
| f2333e90f6 | |||
| 8045093cfb | |||
| b524e275c1 | |||
| 91b713b8c9 | |||
| 6bf8f474fa | |||
| c8cd2cf601 | |||
| 087bab6ceb | |||
| 38cf0a692e | |||
| a4c38196bc | |||
| 97b939195f | |||
| eedc032b98 | |||
| 43632bf973 | |||
| d60cb1d00a | |||
| 8b6f1d9bd9 | |||
| 6069967109 | |||
| 67d4d9e9f4 | |||
| 4b51b1e3a8 | |||
| 1707b1769f | |||
| a96466a73a | |||
| 156155addb | |||
| c66e27d49e | |||
| 7b06592dea | |||
| aef347e7b3 | |||
| 0339dd51f1 | |||
| c73a10cb4d | |||
| cbed07bc18 | |||
| f065c46fbe | |||
| a78ebc1175 | |||
| 2cacad9470 | |||
| 2980a88570 | |||
| e447d87496 | |||
| a8db327574 | |||
| 3b78fe2684 | |||
| 6982ea5a66 | |||
| c1a59b8d80 | |||
| f1d9680ba8 | |||
| 587fb4940d | |||
| a5383b8627 | |||
| e858a6c347 | |||
| 14dd345cdf | |||
| d39aeeca0f | |||
| e32700cf8f | |||
| d76468c223 | |||
| 5d7419e658 | |||
| 51008322c5 | |||
| 7c5bd78804 | |||
| 070a77ae0d | |||
| 664b720e4d | |||
| f477696cc5 | |||
| e241c14b94 | |||
| 5de7627806 | |||
| b2da1cdcc2 | |||
| fc64faa22e | |||
| dcc4766129 | |||
| 76efc9853a | |||
| bf6b119a3f | |||
| 1cfe5aa41e | |||
| 347c86d9b5 | |||
| a335fc591f | |||
| 29955620e0 | |||
| 5b2b76763e | |||
| 9270205947 | |||
| 2ec1140b25 | |||
| 132b885b24 | |||
| cc3fb3d182 | |||
| 91c519467d | |||
| b0854c605a | |||
| bf22567c09 | |||
| de9f659f1e | |||
| 9e06287121 | |||
| 4990336760 | |||
| ee591efb9f | |||
| 34c6598752 | |||
| 2bc1d3709c | |||
| 08a0e1c91b | |||
| 43122939cb | |||
| 1227e00f3d | |||
| 381057eaad | |||
| f8e187e1e1 | |||
| e6784ca8a0 | |||
| dbdeff2069 | |||
| 6db776f957 | |||
| c244f000ab | |||
| 961251f0ca | |||
| bb9a0b7253 | |||
| 996f02a531 | |||
| 0c9d776083 | |||
| e94cc0b5ee | |||
| 9fb762ccec | |||
| 22b0cfbaa2 | |||
| ccb8292e8e | |||
| 033e3092a3 | |||
| e3577c2f58 | |||
| 3bab7391d0 | |||
| c16316c4b4 | |||
| 171a56fe82 | |||
| 7cb047e2d9 | |||
| 4ed3d33dd7 | |||
| b0421cafab | |||
| 5fa200763f | |||
| e3ae36dcb3 | |||
| d4a8b87645 | |||
| 0e3a9eaf98 | |||
| 290c8db0a8 | |||
| 6326739b44 | |||
| e129638263 | |||
| 2688e22cb5 | |||
| 57317c3196 | |||
| 3ea4836a0a | |||
| 3e2c456313 | |||
| e600beb484 | |||
| c1f4fe1637 | |||
| 51a672ec40 | |||
| 7a104d2793 | |||
| b581f27249 | |||
| 936236e4b1 | |||
| 37d19b9c46 | |||
| 1d9660c6d2 | |||
| 1ed5fb937d | |||
| d58421c08e | |||
| 1aa7b1596b | |||
| f1c549fabf | |||
| fa158304fe | |||
| dd23a3c227 | |||
| 2c198f6cd6 | |||
| 9ecbce0111 | |||
| 26c246140a | |||
| 68741bf8a0 | |||
| 25613fbfd7 | |||
| 4af7d65224 | |||
| 24d84a45b1 | |||
| 371a9cd833 | |||
| 1492b20472 | |||
| 8f7ba03ed2 | |||
| 748210e11b | |||
| 16c4aad36d | |||
| 5b39c02c39 | |||
| 584f0745d0 | |||
| 0f1156bbb6 | |||
| 4d7b1b5ede | |||
| 6ff207b53a | |||
| f003e29dc0 | |||
| 24fd2cc326 | |||
| 5db08961ce | |||
| fee8121040 | |||
| 843094a07f | |||
| 7308a4a845 | |||
| 918f37542b | |||
| 9cbeea03fa | |||
| c4974a2511 | |||
| fbc6814023 | |||
| 47ea0614dc | |||
| 0124902f42 | |||
| 0cee15eb7f | |||
| 308c7f5f6e | |||
| aea96e98bb | |||
| 93200922fd | |||
| a4750f49c6 | |||
| e6b18fc492 | |||
| 58fa401b4d | |||
| b84296c02e | |||
| fc82150edc | |||
| c90abb6a03 | |||
| 8fa1e756e2 | |||
| 533d4fe051 | |||
| b725cbf73f | |||
| 5bb6d36684 | |||
| 462047d1e4 | |||
| 80f6ede233 | |||
| 0367a7f992 | |||
| 7aac543570 | |||
| 055137582c | |||
| de4c3f0178 | |||
| 83e9b0a87a | |||
| 982ef83f80 | |||
| e433145b7e | |||
| 5fd724b54a | |||
| d9ab22e4ed | |||
| 8eb6decb25 | |||
| 98f6a4a615 | |||
| a4ecd32176 | |||
| 572cfc99a8 | |||
| 3af21cad4c | |||
| c8398c9fdc | |||
| a75fbb0031 | |||
| d583a79869 | |||
| 52e9974431 | |||
| 1b689a7431 | |||
| 55e83b8d18 | |||
| 956d8027ef | |||
| 3016986833 | |||
| 1d8cd3a717 | |||
| 99a5b3417a | |||
| 41482fe56c | |||
| e77abeef16 | |||
| a39a9f677f | |||
| 264d26e671 | |||
| 33d1f67501 | |||
| 4cf7a963a0 | |||
| 51f81eec36 | |||
| 68e4256fd2 | |||
| 9b46c6fb8a | |||
| ab6be9b7b7 | |||
| e53b7d040c | |||
| 7d0f6b4d68 | |||
| 9a1cc06ebe | |||
| 8714cbac91 | |||
| 429f84e59e | |||
| a954d3630f | |||
| 7f9675bcc0 | |||
| 7a80b9adaf | |||
| 985bfea556 | |||
| 087db2949a | |||
| 127a152f76 | |||
| a2adafd508 | |||
| 31a5f7ef3c | |||
| 93a44d4236 | |||
| 27bff3c175 | |||
| 99340b5613 | |||
| 5b5815d8cf | |||
| f527b6a93f | |||
| 89f3c40d79 | |||
| 4a770535c4 | |||
| 516e5b2563 | |||
| 918381875a | |||
| 119b7a298d | |||
| 2d88f20c1e | |||
| 0cb1644825 | |||
| e0c2daadbf | |||
| 267eb99a7d | |||
| 37953b7cf0 | |||
| 3aea7e8f8d | |||
| f049aa7674 | |||
| a7a94de74a | |||
| dc937c10f9 | |||
| 75cf5cc4ee | |||
| 5237647f75 | |||
| bcf8bdb401 | |||
| ff28bf831f | |||
| 58e472754a | |||
| 0521e8908c | |||
| 09a7e86a39 | |||
| 013581f371 | |||
| e9c298b784 | |||
| 34c5f47f60 | |||
| 081c47e3df | |||
| 6f006e50dc | |||
| 8a4090fe3f | |||
| 85360572b0 | |||
| cdb16f1120 | |||
| 97b86aa259 | |||
| f90fd5b0da | |||
| 29b13ec1de | |||
| d85f27b537 | |||
| 15a213d3fc | |||
| abefcc6061 | |||
| b1c248fcc9 | |||
| fdc133d8c9 | |||
| 37091b086c | |||
| 5b598f8a0e | |||
| 6bb9342a5f | |||
| 5a4efe8bcf | |||
| 678371be39 | |||
| c176131a67 | |||
| c3f5e73769 | |||
| 7ed9c0e87a | |||
| fd7ba355ee | |||
| 6b1c28ce6d | |||
| 0ae40507e5 | |||
| fbb25787cd | |||
| b890274738 | |||
| 006e4242b2 | |||
| e28f6fae49 | |||
| a9b7ff41bd | |||
| d015fa76fa | |||
| 2ccdf56119 | |||
| 24ca620c32 | |||
| d3c7ae6adf | |||
| ecb1f3c4d2 | |||
| d81c145fa9 | |||
| 14bd6402be | |||
| 1d0c283508 | |||
| f85cf5bdd9 | |||
| 6fae02c05d | |||
| 7561b1c6e5 | |||
| 20fef00a77 | |||
| 2dd3bf116e | |||
| ca09ba6852 | |||
| 98960bf201 | |||
| fad96b95ad | |||
| c58e0d5d73 | |||
| 036b0579f1 | |||
| 33a3a19207 | |||
| d45f9ef866 | |||
| a223b5624f | |||
| 324cafdda6 | |||
| 46b770f255 | |||
| 519ee72f6f | |||
| b4a4a05bdc | |||
| d4255b7f75 | |||
| 445860d619 | |||
| c8abaea368 | |||
| cbbc82a789 | |||
| b51a1a7d15 | |||
| 389be67605 | |||
| d8b192c84d | |||
| 97e9368e75 | |||
| bc59428b3a | |||
| 6e7b1ef252 | |||
| 44a2b109b7 | |||
| 4af104aaae | |||
| aee6a617a6 | |||
| 04399a27d0 | |||
| 4162ebfad3 | |||
| 03c55db4fb | |||
| 5f20fce6fd | |||
| 528db00095 | |||
| ec52096e30 | |||
| 7d9041460a | |||
| 4d866ea32e | |||
| 66c9029fd5 | |||
| d053f2165d | |||
| 3f93c3cc4e | |||
| 1ecc765903 | |||
| df3997b108 | |||
| 1a34c7fab3 | |||
| 76d1fa0ef6 | |||
| d9c9fb079b | |||
| 23eb41d1be | |||
| d0788be129 | |||
| 86ec9b79fd | |||
| 9247ad634f | |||
| 2a646f7626 | |||
| 25e6902a43 | |||
| bd1d7cd208 | |||
| 87765c0f16 | |||
| 1d1d28baf2 | |||
| ac21cabda2 | |||
| 87fcd2342f | |||
| 35d8fa444b | |||
| d79c05fec9 | |||
| 6eb5a95a59 | |||
| fd83f2f5ca | |||
| c549ec8371 | |||
| d94ecf40e6 | |||
| 0fec2eb6e5 | |||
| e4d4b07f00 | |||
| f856f78ac0 | |||
| 2665c39a0d | |||
| 60059a7aa0 | |||
| e23884a238 | |||
| 9cce8ca4b6 | |||
| 1348e7cd4d | |||
| d5881bc00a | |||
| ada8f92cc7 | |||
| 81779d8287 | |||
| e14acabb3d | |||
| 69e6d0016e | |||
| b6313951dc | |||
| 35c6860f06 | |||
| 1a53e2cfb2 | |||
| 3928c1ee26 | |||
| e4d3378230 | |||
| 2aa5f1bfd1 | |||
| 741fb9b7d1 | |||
| 2faa2adae2 | |||
| 7dda8e2cb8 | |||
| 52dbbae82c | |||
| d34e7eca60 | |||
| dc6a144396 | |||
| ed2199a497 | |||
| 1eca49f40b | |||
| 168c0b0385 | |||
| 355bc691fc | |||
| bef6de9025 | |||
| d13d5c0c12 | |||
| 48a8aefd6b | |||
| f21e99de0f | |||
| 108bb811c5 | |||
| 456c56fe90 | |||
| 5ce4e3c265 | |||
| 6d89e1f412 | |||
| ef5578a7ce | |||
| 2068c4582c | |||
| 4f26f0c2e2 | |||
| 2dc8642508 | |||
| cfaae5917b | |||
| 60bf018781 | |||
| 8606ee4beb | |||
| f788d010f7 | |||
| 9cfa24e515 | |||
| b386ea72aa | |||
| 3282aaa1f5 | |||
| c701d54281 | |||
| 7b08d5ec69 | |||
| a9a269505c | |||
| 28aefc4f5a | |||
| bd6f80faf3 | |||
| f6848b66d6 | |||
| bf551df4cf | |||
| 5eff4f8340 | |||
| 8c40f0ccf2 | |||
| 0f7d7100e5 | |||
| 6f63a5d8d5 | |||
| c02095ae1c | |||
| 96b008cd29 | |||
| ecf28cc21e | |||
| 69a0b5dde5 | |||
| dec6a3b080 | |||
| 2ae3ab11e3 | |||
| 0df6dc16a5 | |||
| 06a4bad809 | |||
| 802d004bbb | |||
| 9deea80b83 | |||
| 6dd6013546 | |||
| f2dc445412 | |||
| 6b6b1c9cbf | |||
| d9de84091c | |||
| 1db20099a9 | |||
| fd1528795e | |||
| 63813e83ae | |||
| 6a40383aee | |||
| abe2ea59ed | |||
| 36028bd8ad | |||
| d2de68c14c | |||
| b696d49d5a | |||
| 03e2a52e2c | |||
| 3d39087a67 | |||
| a770d04e78 | |||
| 719e8674ad | |||
| 2338a895f5 | |||
| 1bea9ee26c | |||
| c9d8eb7a84 | |||
| 6eefd276cf | |||
| 113b7584e0 | |||
| 1e49c00f4b | |||
| 61e041673e | |||
| 36aad46fe1 | |||
| 57d4c86b2b | |||
| 53a06913cb | |||
| e351538697 | |||
| ca56e99a62 | |||
| a1fa63ffc9 | |||
| 4143071e22 | |||
| 62b593ca8b | |||
| 7711fe2f43 | |||
| 18d4f14892 | |||
| 9ba25e9d09 | |||
| 0c64fc61dc | |||
| 484607fb6f | |||
| f64d512774 | |||
| 6e8f5ae574 | |||
| 82c61eba49 | |||
| e8721f1f6f | |||
| ec6f0e1baf | |||
| 71896544ca | |||
| 7bd169caa9 | |||
| aef8e6ba59 | |||
| 6d7313cd3d | |||
| d3083ecf6d | |||
| 5cfb6a848e | |||
| 7726e273a9 | |||
| e2df8c7e62 | |||
| bee970ab94 | |||
| 64b5784c0b | |||
| 8cc5b98051 | |||
| 5022bc8c25 | |||
| d5aaea2749 | |||
| cb63bbf001 | |||
| fd4a6f0af0 | |||
| 8db1a73102 |
+1
-1
@@ -33,7 +33,7 @@
|
||||
CMakeLists.txt text whitespace=tabwidth=2
|
||||
|
||||
*.png binary
|
||||
*.jepg binary
|
||||
*.jpeg binary
|
||||
*.jpg binary
|
||||
*.exr binary
|
||||
*.ico binary
|
||||
|
||||
Arquivo binário não exibido.
Arquivo binário não exibido.
Arquivo binário não exibido.
Arquivo binário não exibido.
Arquivo binário não exibido.
Arquivo binário não exibido.
Arquivo binário não exibido.
BIN
Arquivo binário não exibido.
Arquivo binário não exibido.
Arquivo binário não exibido.
Arquivo binário não exibido.
Arquivo binário não exibido.
Arquivo binário não exibido.
Arquivo binário não exibido.
Arquivo binário não exibido.
BIN
Arquivo binário não exibido.
Arquivo binário não exibido.
Arquivo binário não exibido.
Arquivo binário não exibido.
BIN
Arquivo binário não exibido.
Arquivo binário não exibido.
Arquivo binário não exibido.
Arquivo binário não exibido.
Arquivo binário não exibido.
Arquivo binário não exibido.
BIN
Arquivo binário não exibido.
+2
-1
@@ -23,7 +23,8 @@ if(WIN32 AND NOT MINGW)
|
||||
add_definitions(-DJAS_WIN_MSVC_BUILD)
|
||||
endif(WIN32 AND NOT MINGW)
|
||||
|
||||
ocv_warnings_disable(CMAKE_C_FLAGS -Wno-implicit-function-declaration -Wno-uninitialized -Wmissing-prototypes -Wmissing-declarations -Wunused -Wshadow -Wsign-compare)
|
||||
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)
|
||||
ocv_warnings_disable(CMAKE_C_FLAGS -Wunused-parameter) # clang
|
||||
ocv_warnings_disable(CMAKE_C_FLAGS /wd4013 /wd4018 /wd4101 /wd4244 /wd4267 /wd4715) # vs2005
|
||||
|
||||
|
||||
externo
+66
-13
@@ -1,12 +1,39 @@
|
||||
#Cross compile TBB from source
|
||||
project(tbb)
|
||||
|
||||
if (WIN32 AND NOT ARM)
|
||||
message(FATAL_ERROR "BUILD_TBB option supports Windows on ARM only!\nUse regular official TBB build instead of the BUILD_TBB option!")
|
||||
endif()
|
||||
|
||||
if (WIN32 AND ARM)
|
||||
# 4.1 update 4 - The first release that supports Windows RT. Hangs on some Android devices
|
||||
set(tbb_ver "tbb41_20130613oss")
|
||||
set(tbb_url "http://threadingbuildingblocks.org/sites/default/files/software_releases/source/tbb41_20130613oss_src.tgz")
|
||||
set(tbb_md5 "108c8c1e481b0aaea61878289eb28b6a")
|
||||
set(tbb_version_file "version_string.ver")
|
||||
ocv_warnings_disable(CMAKE_CXX_FLAGS -Wshadow -Wunused-parameter)
|
||||
else()
|
||||
# 4.1 update 2 - works fine
|
||||
set(tbb_ver "tbb41_20130116oss")
|
||||
set(tbb_url "http://threadingbuildingblocks.org/sites/default/files/software_releases/source/tbb41_20130116oss_src.tgz")
|
||||
set(tbb_md5 "3809790e1001a1b32d59c9fee590ee85")
|
||||
set(tbb_version_file "version_string.ver")
|
||||
ocv_warnings_disable(CMAKE_CXX_FLAGS -Wshadow)
|
||||
endif()
|
||||
|
||||
# 4.1 update 3 dev - Hangs on some Android devices
|
||||
#set(tbb_ver "tbb41_20130401oss")
|
||||
#set(tbb_url "http://threadingbuildingblocks.org/sites/default/files/software_releases/source/tbb41_20130401oss_src.tgz")
|
||||
#set(tbb_md5 "f2f591a0d2ca8f801e221ce7d9ea84bb")
|
||||
#set(tbb_version_file "version_string.ver")
|
||||
#ocv_warnings_disable(CMAKE_CXX_FLAGS -Wshadow)
|
||||
|
||||
# 4.1 update 2 - works fine
|
||||
set(tbb_ver "tbb41_20130116oss")
|
||||
set(tbb_url "http://threadingbuildingblocks.org/sites/default/files/software_releases/source/tbb41_20130116oss_src.tgz")
|
||||
set(tbb_md5 "3809790e1001a1b32d59c9fee590ee85")
|
||||
set(tbb_version_file "version_string.ver")
|
||||
ocv_warnings_disable(CMAKE_CXX_FLAGS -Wshadow)
|
||||
#set(tbb_ver "tbb41_20130116oss")
|
||||
#set(tbb_url "http://threadingbuildingblocks.org/sites/default/files/software_releases/source/tbb41_20130116oss_src.tgz")
|
||||
#set(tbb_md5 "3809790e1001a1b32d59c9fee590ee85")
|
||||
#set(tbb_version_file "version_string.ver")
|
||||
#ocv_warnings_disable(CMAKE_CXX_FLAGS -Wshadow)
|
||||
|
||||
# 4.1 update 1 - works fine
|
||||
#set(tbb_ver "tbb41_20121003oss")
|
||||
@@ -107,7 +134,7 @@ if(NOT EXISTS "${tbb_src_dir}")
|
||||
RESULT_VARIABLE tbb_untar_RESULT)
|
||||
|
||||
if(NOT tbb_untar_RESULT EQUAL 0 OR NOT EXISTS "${tbb_src_dir}")
|
||||
message(FATAL_ERROR "Failed to unpack TBB sources")
|
||||
message(FATAL_ERROR "Failed to unpack TBB sources from ${tbb_tarball} to ${tbb_src_dir} with error ${tbb_untar_RESULT}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
@@ -123,13 +150,22 @@ file(GLOB lib_hdrs "${tbb_src_dir}/src/tbb/*.h")
|
||||
list(APPEND lib_srcs "${tbb_src_dir}/src/rml/client/rml_tbb.cpp")
|
||||
|
||||
if (WIN32)
|
||||
add_definitions(-D__TBB_DYNAMIC_LOAD_ENABLED=0
|
||||
-D__TBB_BUILD=1
|
||||
-D_UNICODE
|
||||
-DUNICODE
|
||||
-DWINAPI_FAMILY=WINAPI_FAMILY_APP
|
||||
-DDO_ITT_NOTIFY=0
|
||||
add_definitions(/D__TBB_DYNAMIC_LOAD_ENABLED=0
|
||||
/D__TBB_BUILD=1
|
||||
/DTBB_NO_LEGACY=1
|
||||
/D_UNICODE
|
||||
/DUNICODE
|
||||
/DWINAPI_FAMILY=WINAPI_FAMILY_APP
|
||||
/DDO_ITT_NOTIFY=0
|
||||
/DUSE_WINTHREAD
|
||||
) # defines were copied from windows.cl.inc
|
||||
|
||||
if (ARM)
|
||||
add_definitions(/D_WIN32_WINNT=0x0602
|
||||
/D__TBB_WIN32_USE_CL_BUILTINS
|
||||
)
|
||||
endif()
|
||||
|
||||
set(CMAKE_LINKER_FLAGS "${CMAKE_LINKER_FLAGS} /APPCONTAINER")
|
||||
else()
|
||||
add_definitions(-D__TBB_DYNAMIC_LOAD_ENABLED=0 #required
|
||||
@@ -173,7 +209,23 @@ endif()
|
||||
set(TBB_SOURCE_FILES ${TBB_SOURCE_FILES} "${CMAKE_CURRENT_SOURCE_DIR}/${tbb_version_file}")
|
||||
|
||||
add_library(tbb ${TBB_SOURCE_FILES})
|
||||
target_link_libraries(tbb c m dl)
|
||||
|
||||
if (WIN32)
|
||||
if (ARM)
|
||||
set(platform_macro /D_M_ARM=1)
|
||||
endif()
|
||||
|
||||
add_custom_command(TARGET tbb
|
||||
PRE_BUILD
|
||||
COMMAND ${CMAKE_C_COMPILER} /nologo /TC /EP ${tbb_src_dir}\\src\\tbb\\win32-tbb-export.def /DTBB_NO_LEGACY=1 /D_CRT_SECURE_NO_DEPRECATE /D__TBB_BUILD=1 ${platform_macro} /I${tbb_src_dir}\\src /I${tbb_src_dir}\\include > "${tbb_src_dir}\\src\\tbb\\tbb.def"
|
||||
WORKING_DIRECTORY ${tbb_src_dir}\\src\\tbb
|
||||
COMMENT "Generating tbb.def file" VERBATIM
|
||||
)
|
||||
|
||||
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /DEF:${tbb_src_dir}/src/tbb/tbb.def /DLL /MAP /fixed:no /INCREMENTAL:NO")
|
||||
else()
|
||||
target_link_libraries(tbb c m dl)
|
||||
endif()
|
||||
|
||||
ocv_warnings_disable(CMAKE_CXX_FLAGS -Wundef -Wmissing-declarations)
|
||||
string(REPLACE "-Werror=non-virtual-dtor" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
||||
@@ -182,6 +234,7 @@ set_target_properties(tbb
|
||||
PROPERTIES OUTPUT_NAME tbb
|
||||
DEBUG_POSTFIX "${OPENCV_DEBUG_POSTFIX}"
|
||||
ARCHIVE_OUTPUT_DIRECTORY ${3P_LIBRARY_OUTPUT_PATH}
|
||||
RUNTIME_OUTPUT_DIRECTORY ${EXECUTABLE_OUTPUT_PATH}
|
||||
)
|
||||
|
||||
if(ENABLE_SOLUTION_FOLDERS)
|
||||
|
||||
+28
-8
@@ -103,6 +103,19 @@ if(UNIX AND NOT ANDROID)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Add these standard paths to the search paths for FIND_PATH
|
||||
# to find include files from these locations first
|
||||
if(MINGW)
|
||||
if(EXISTS /mingw)
|
||||
list(APPEND CMAKE_INCLUDE_PATH /mingw)
|
||||
endif()
|
||||
if(EXISTS /mingw32)
|
||||
list(APPEND CMAKE_INCLUDE_PATH /mingw32)
|
||||
endif()
|
||||
if(EXISTS /mingw64)
|
||||
list(APPEND CMAKE_INCLUDE_PATH /mingw64)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
# OpenCV cmake options
|
||||
@@ -110,7 +123,7 @@ endif()
|
||||
|
||||
# Optional 3rd party components
|
||||
# ===================================================
|
||||
OCV_OPTION(WITH_1394 "Include IEEE1394 support" ON IF (UNIX AND NOT ANDROID AND NOT IOS) )
|
||||
OCV_OPTION(WITH_1394 "Include IEEE1394 support" ON IF (NOT ANDROID AND NOT IOS) )
|
||||
OCV_OPTION(WITH_AVFOUNDATION "Use AVFoundation for Video I/O" ON IF IOS)
|
||||
OCV_OPTION(WITH_CARBON "Use Carbon for UI instead of Cocoa" OFF IF APPLE )
|
||||
OCV_OPTION(WITH_CUDA "Include NVidia Cuda Runtime support" ON IF (CMAKE_VERSION VERSION_GREATER "2.8" AND NOT ANDROID AND NOT IOS) )
|
||||
@@ -286,6 +299,10 @@ set(OPENCV_CONFIG_FILE_INCLUDE_DIR "${CMAKE_BINARY_DIR}/" CACHE PATH "Where to c
|
||||
add_definitions(-DHAVE_CVCONFIG_H)
|
||||
ocv_include_directories(${OPENCV_CONFIG_FILE_INCLUDE_DIR})
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
# Path for additional modules
|
||||
# ----------------------------------------------------------------------------
|
||||
set(OPENCV_EXTRA_MODULES_PATH "" CACHE PATH "Where to look for additional OpenCV modules")
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
# Autodetect if we are in a GIT repository
|
||||
@@ -402,7 +419,7 @@ if(ANDROID)
|
||||
if(NOT ANDROID_TOOLS_Pkg_Revision GREATER 13)
|
||||
message(WARNING "OpenCV requires Android SDK tools revision 14 or newer. Otherwise tests and samples will no be compiled.")
|
||||
endif()
|
||||
elseif(ANT_EXECUTABLE)
|
||||
else()
|
||||
find_package(JNI)
|
||||
endif()
|
||||
|
||||
@@ -456,15 +473,15 @@ if(BUILD_EXAMPLES OR BUILD_ANDROID_EXAMPLES OR INSTALL_PYTHON_EXAMPLES)
|
||||
endif()
|
||||
|
||||
if(ANDROID)
|
||||
add_subdirectory(android/service)
|
||||
add_subdirectory(platforms/android/service)
|
||||
endif()
|
||||
|
||||
if(BUILD_ANDROID_PACKAGE)
|
||||
add_subdirectory(android/package)
|
||||
add_subdirectory(platforms/android/package)
|
||||
endif()
|
||||
|
||||
if (ANDROID)
|
||||
add_subdirectory(android/libinfo)
|
||||
add_subdirectory(platforms/android/libinfo)
|
||||
endif()
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
@@ -594,12 +611,15 @@ endif()
|
||||
status("")
|
||||
status(" GUI: ")
|
||||
|
||||
if(HAVE_QT)
|
||||
if(HAVE_QT5)
|
||||
status(" QT 5.x:" HAVE_QT THEN "YES (ver ${Qt5Core_VERSION_STRING})" ELSE NO)
|
||||
status(" QT OpenGL support:" HAVE_QT_OPENGL THEN "YES (${Qt5OpenGL_LIBRARIES} ${Qt5OpenGL_VERSION_STRING})" ELSE NO)
|
||||
elseif(HAVE_QT)
|
||||
status(" QT 4.x:" HAVE_QT THEN "YES (ver ${QT_VERSION_MAJOR}.${QT_VERSION_MINOR}.${QT_VERSION_PATCH} ${QT_EDITION})" ELSE NO)
|
||||
status(" QT OpenGL support:" HAVE_QT_OPENGL THEN "YES (${QT_QTOPENGL_LIBRARY})" ELSE NO)
|
||||
else()
|
||||
if(DEFINED WITH_QT)
|
||||
status(" QT 4.x:" NO)
|
||||
status(" QT:" NO)
|
||||
endif()
|
||||
if(DEFINED WITH_WIN32UI)
|
||||
status(" Win32 UI:" HAVE_WIN32UI THEN YES ELSE NO)
|
||||
@@ -827,7 +847,7 @@ status(" ant:" ANT_EXECUTABLE THEN "${ANT_EXECUTABLE} (ver ${A
|
||||
if(NOT ANDROID)
|
||||
status(" JNI:" JNI_INCLUDE_DIRS THEN "${JNI_INCLUDE_DIRS}" ELSE NO)
|
||||
endif()
|
||||
status(" Java tests:" BUILD_TESTS AND (NOT ANDROID OR CAN_BUILD_ANDROID_PROJECTS) THEN YES ELSE NO)
|
||||
status(" Java tests:" BUILD_TESTS AND (CAN_BUILD_ANDROID_PROJECTS OR HAVE_opencv_java) THEN YES ELSE NO)
|
||||
|
||||
# ========================== documentation ==========================
|
||||
if(BUILD_DOCS)
|
||||
|
||||
+11
@@ -4,3 +4,14 @@ Homepage: http://opencv.org
|
||||
Online docs: http://docs.opencv.org
|
||||
Q&A forum: http://answers.opencv.org
|
||||
Dev zone: http://code.opencv.org
|
||||
|
||||
Please read before starting work on a pull request:
|
||||
http://code.opencv.org/projects/opencv/wiki/How_to_contribute
|
||||
|
||||
Summary of guidelines:
|
||||
|
||||
* One pull request per issue;
|
||||
* Choose the right base branch;
|
||||
* Include tests and documentation;
|
||||
* Clean up "oops" commits before submitting;
|
||||
* Follow the coding style guide.
|
||||
|
||||
@@ -1,90 +0,0 @@
|
||||
@ECHO OFF
|
||||
|
||||
:: enable command extensions
|
||||
VERIFY BADVALUE 2>NUL
|
||||
SETLOCAL ENABLEEXTENSIONS || (ECHO Unable to enable command extensions. & EXIT \B)
|
||||
|
||||
:: build environment
|
||||
SET SOURCE_DIR=%cd%
|
||||
IF EXIST .\android.toolchain.cmake (SET BUILD_OPENCV=1) ELSE (SET BUILD_OPENCV=0)
|
||||
IF EXIST .\jni\nul (SET BUILD_JAVA_PART=1) ELSE (SET BUILD_JAVA_PART=0)
|
||||
|
||||
:: load configuration
|
||||
PUSHD %~dp0
|
||||
SET SCRIPTS_DIR=%cd%
|
||||
IF EXIST .\wincfg.cmd CALL .\wincfg.cmd
|
||||
POPD
|
||||
|
||||
:: inherit old names
|
||||
IF NOT DEFINED CMAKE SET CMAKE=%CMAKE_EXE%
|
||||
IF NOT DEFINED MAKE SET MAKE=%MAKE_EXE%
|
||||
|
||||
:: defaults
|
||||
IF NOT DEFINED BUILD_DIR SET BUILD_DIR=build
|
||||
IF NOT DEFINED ANDROID_ABI SET ANDROID_ABI=armeabi-v7a
|
||||
SET OPENCV_BUILD_DIR=%SCRIPTS_DIR%\..\%BUILD_DIR%
|
||||
|
||||
:: check that all required variables defined
|
||||
PUSHD .
|
||||
IF NOT DEFINED ANDROID_NDK (ECHO. & ECHO You should set an environment variable ANDROID_NDK to the full path to your copy of Android NDK & GOTO end)
|
||||
(CD "%ANDROID_NDK%") || (ECHO. & ECHO Directory "%ANDROID_NDK%" specified by ANDROID_NDK variable does not exist & GOTO end)
|
||||
|
||||
IF NOT EXIST "%CMAKE%" (ECHO. & ECHO You should set an environment variable CMAKE to the full path to cmake executable & GOTO end)
|
||||
IF NOT EXIST "%MAKE%" (ECHO. & ECHO You should set an environment variable MAKE to the full path to native port of make executable & GOTO end)
|
||||
|
||||
IF NOT %BUILD_JAVA_PART%==1 GOTO required_variables_checked
|
||||
|
||||
IF NOT DEFINED ANDROID_SDK (ECHO. & ECHO You should set an environment variable ANDROID_SDK to the full path to your copy of Android SDK & GOTO end)
|
||||
(CD "%ANDROID_SDK%" 2>NUL) || (ECHO. & ECHO Directory "%ANDROID_SDK%" specified by ANDROID_SDK variable does not exist & GOTO end)
|
||||
|
||||
IF NOT DEFINED ANT_DIR (ECHO. & ECHO You should set an environment variable ANT_DIR to the full path to Apache Ant root & GOTO end)
|
||||
(CD "%ANT_DIR%" 2>NUL) || (ECHO. & ECHO Directory "%ANT_DIR%" specified by ANT_DIR variable does not exist & GOTO end)
|
||||
|
||||
IF NOT DEFINED JAVA_HOME (ECHO. & ECHO You should set an environment variable JAVA_HOME to the full path to JDK & GOTO end)
|
||||
(CD "%JAVA_HOME%" 2>NUL) || (ECHO. & ECHO Directory "%JAVA_HOME%" specified by JAVA_HOME variable does not exist & GOTO end)
|
||||
|
||||
:required_variables_checked
|
||||
POPD
|
||||
|
||||
:: check for ninja
|
||||
echo "%MAKE%"|findstr /i ninja >nul:
|
||||
IF %errorlevel%==1 (SET BUILD_WITH_NINJA=0) ELSE (SET BUILD_WITH_NINJA=1)
|
||||
IF %BUILD_WITH_NINJA%==1 (SET CMAKE_GENERATOR=Ninja) ELSE (SET CMAKE_GENERATOR=MinGW Makefiles)
|
||||
|
||||
:: create build dir
|
||||
IF DEFINED REBUILD rmdir /S /Q "%BUILD_DIR%" 2>NUL
|
||||
MKDIR "%BUILD_DIR%" 2>NUL
|
||||
PUSHD "%BUILD_DIR%" || (ECHO. & ECHO Directory "%BUILD_DIR%" is not found & GOTO end)
|
||||
|
||||
:: run cmake
|
||||
ECHO. & ECHO Runnning cmake...
|
||||
ECHO ANDROID_ABI=%ANDROID_ABI%
|
||||
ECHO.
|
||||
IF NOT %BUILD_OPENCV%==1 GOTO other-cmake
|
||||
:opencv-cmake
|
||||
("%CMAKE%" -G"%CMAKE_GENERATOR%" -DANDROID_ABI="%ANDROID_ABI%" -DCMAKE_TOOLCHAIN_FILE="%SOURCE_DIR%"\android.toolchain.cmake -DCMAKE_MAKE_PROGRAM="%MAKE%" %* "%SOURCE_DIR%\..") && GOTO cmakefin
|
||||
ECHO. & ECHO cmake failed & GOTO end
|
||||
:other-cmake
|
||||
("%CMAKE%" -G"%CMAKE_GENERATOR%" -DANDROID_ABI="%ANDROID_ABI%" -DOpenCV_DIR="%OPENCV_BUILD_DIR%" -DCMAKE_TOOLCHAIN_FILE="%OPENCV_BUILD_DIR%\..\android.toolchain.cmake" -DCMAKE_MAKE_PROGRAM="%MAKE%" %* "%SOURCE_DIR%") && GOTO cmakefin
|
||||
ECHO. & ECHO cmake failed & GOTO end
|
||||
:cmakefin
|
||||
|
||||
:: run make
|
||||
ECHO. & ECHO Building native libs...
|
||||
IF %BUILD_WITH_NINJA%==0 ("%MAKE%" -j %NUMBER_OF_PROCESSORS% VERBOSE=%VERBOSE%) || (ECHO. & ECHO make failed & GOTO end)
|
||||
IF %BUILD_WITH_NINJA%==1 ("%MAKE%") || (ECHO. & ECHO ninja failed & GOTO end)
|
||||
|
||||
IF NOT %BUILD_JAVA_PART%==1 GOTO end
|
||||
POPD && PUSHD %SOURCE_DIR%
|
||||
|
||||
:: configure java part
|
||||
ECHO. & ECHO Updating Android project...
|
||||
(CALL "%ANDROID_SDK%\tools\android" update project --name %PROJECT_NAME% --path .) || (ECHO. & ECHO failed to update android project & GOTO end)
|
||||
|
||||
:: compile java part
|
||||
ECHO. & ECHO Compiling Android project...
|
||||
(CALL "%ANT_DIR%\bin\ant" debug) || (ECHO. & ECHO failed to compile android project & GOTO end)
|
||||
|
||||
:end
|
||||
POPD
|
||||
ENDLOCAL
|
||||
@@ -1,5 +0,0 @@
|
||||
@ECHO OFF
|
||||
|
||||
PUSHD %~dp0..
|
||||
CALL .\scripts\build.cmd %* -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON
|
||||
POPD
|
||||
@@ -1,8 +0,0 @@
|
||||
#!/bin/sh
|
||||
cd `dirname $0`/..
|
||||
|
||||
mkdir -p build_armeabi
|
||||
cd build_armeabi
|
||||
|
||||
cmake -DANDROID_ABI=armeabi -DCMAKE_TOOLCHAIN_FILE=../android.toolchain.cmake $@ ../..
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
#!/bin/sh
|
||||
cd `dirname $0`/..
|
||||
|
||||
mkdir -p build_mips
|
||||
cd build_mips
|
||||
|
||||
cmake -DANDROID_ABI=mips -DCMAKE_TOOLCHAIN_FILE=../android.toolchain.cmake $@ ../..
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
#!/bin/sh
|
||||
cd `dirname $0`/..
|
||||
|
||||
mkdir -p build_neon
|
||||
cd build_neon
|
||||
|
||||
cmake -DANDROID_ABI="armeabi-v7a with NEON" -DCMAKE_TOOLCHAIN_FILE=../android.toolchain.cmake $@ ../..
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
#!/bin/sh
|
||||
cd `dirname $0`/..
|
||||
|
||||
mkdir -p build_service
|
||||
cd build_service
|
||||
|
||||
cmake -DCMAKE_TOOLCHAIN_FILE=../android.toolchain.cmake -DANDROID_TOOLCHAIN_NAME="arm-linux-androideabi-4.4.3" -DANDROID_STL=stlport_static -DANDROID_STL_FORCE_FEATURES=OFF -DBUILD_ANDROID_SERVICE=ON -DANDROID_SOURCE_TREE=~/Projects/AndroidSource/ServiceStub/ $@ ../..
|
||||
@@ -1,9 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
cd `dirname $0`/..
|
||||
|
||||
mkdir -p build_x86
|
||||
cd build_x86
|
||||
|
||||
cmake -DANDROID_ABI=x86 -DCMAKE_TOOLCHAIN_FILE=../android.toolchain.cmake $@ ../..
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
:: variables required for OpenCV build ::
|
||||
:: Note: all pathes should be specified without tailing slashes!
|
||||
SET ANDROID_NDK=C:\full\path\to\your\copy\of\android\NDK\android-ndk-r7b
|
||||
SET CMAKE_EXE=C:\full\path\to\cmake\utility\cmake.exe
|
||||
SET MAKE_EXE=%ANDROID_NDK%\prebuilt\windows\bin\make.exe
|
||||
|
||||
:: variables required for android-opencv build ::
|
||||
SET ANDROID_SDK=C:\full\path\to\your\copy\of\android\SDK\android-sdk-windows
|
||||
SET ANT_DIR=C:\full\path\to\ant\directory\apache-ant-1.8.2
|
||||
SET JAVA_HOME=C:\full\path\to\JDK\jdk1.6.0_25
|
||||
|
||||
:: configuration options ::
|
||||
:::: general ARM-V7 settings
|
||||
SET ANDROID_ABI=armeabi-v7a
|
||||
SET BUILD_DIR=build
|
||||
|
||||
:::: uncomment following lines to compile for old emulator or old device
|
||||
::SET ANDROID_ABI=armeabi
|
||||
::SET BUILD_DIR=build_armeabi
|
||||
|
||||
:::: uncomment following lines to compile for ARM-V7 with NEON support
|
||||
::SET ANDROID_ABI=armeabi-v7a with NEON
|
||||
::SET BUILD_DIR=build_neon
|
||||
|
||||
:::: uncomment following lines to compile for x86
|
||||
::SET ANDROID_ABI=x86
|
||||
::SET BUILD_DIR=build_x86
|
||||
|
||||
:::: other options
|
||||
::SET ANDROID_NATIVE_API_LEVEL=8 &:: android-3 is enough for native part of OpenCV but android-8 is required for Java API
|
||||
@@ -1,89 +0,0 @@
|
||||
# Makefile for Sphinx documentation
|
||||
#
|
||||
|
||||
# You can set these variables from the command line.
|
||||
SPHINXOPTS =
|
||||
SPHINXBUILD = sphinx-build
|
||||
PAPER =
|
||||
BUILDDIR = _build
|
||||
|
||||
# Internal variables.
|
||||
PAPEROPT_a4 = -D latex_paper_size=a4
|
||||
PAPEROPT_letter = -D latex_paper_size=letter
|
||||
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
|
||||
|
||||
.PHONY: help clean html dirhtml pickle json htmlhelp qthelp latex changes linkcheck doctest
|
||||
|
||||
help:
|
||||
@echo "Please use \`make <target>' where <target> is one of"
|
||||
@echo " html to make standalone HTML files"
|
||||
@echo " dirhtml to make HTML files named index.html in directories"
|
||||
@echo " pickle to make pickle files"
|
||||
@echo " json to make JSON files"
|
||||
@echo " htmlhelp to make HTML files and a HTML help project"
|
||||
@echo " qthelp to make HTML files and a qthelp project"
|
||||
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
|
||||
@echo " changes to make an overview of all changed/added/deprecated items"
|
||||
@echo " linkcheck to check all external links for integrity"
|
||||
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
|
||||
|
||||
clean:
|
||||
-rm -rf $(BUILDDIR)/*
|
||||
|
||||
html:
|
||||
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
|
||||
@echo
|
||||
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
|
||||
|
||||
dirhtml:
|
||||
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
|
||||
@echo
|
||||
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
|
||||
|
||||
pickle:
|
||||
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
|
||||
@echo
|
||||
@echo "Build finished; now you can process the pickle files."
|
||||
|
||||
json:
|
||||
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
|
||||
@echo
|
||||
@echo "Build finished; now you can process the JSON files."
|
||||
|
||||
htmlhelp:
|
||||
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
|
||||
@echo
|
||||
@echo "Build finished; now you can run HTML Help Workshop with the" \
|
||||
".hhp project file in $(BUILDDIR)/htmlhelp."
|
||||
|
||||
qthelp:
|
||||
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
|
||||
@echo
|
||||
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
|
||||
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
|
||||
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/OpenCVEngine.qhcp"
|
||||
@echo "To view the help file:"
|
||||
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/OpenCVEngine.qhc"
|
||||
|
||||
latex:
|
||||
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||
@echo
|
||||
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
|
||||
@echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \
|
||||
"run these through (pdf)latex."
|
||||
|
||||
changes:
|
||||
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
|
||||
@echo
|
||||
@echo "The overview file is in $(BUILDDIR)/changes."
|
||||
|
||||
linkcheck:
|
||||
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
|
||||
@echo
|
||||
@echo "Link check complete; look for any errors in the above output " \
|
||||
"or in $(BUILDDIR)/linkcheck/output.txt."
|
||||
|
||||
doctest:
|
||||
$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
|
||||
@echo "Testing of doctests in the sources finished, look at the " \
|
||||
"results in $(BUILDDIR)/doctest/output.txt."
|
||||
@@ -1,61 +0,0 @@
|
||||
#include "TegraDetector.h"
|
||||
#include <zlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#define KERNEL_CONFIG "/proc/config.gz"
|
||||
#define KERNEL_CONFIG_MAX_LINE_WIDTH 512
|
||||
#define KERNEL_CONFIG_TEGRA_MAGIC "CONFIG_ARCH_TEGRA=y"
|
||||
#define KERNEL_CONFIG_TEGRA2_MAGIC "CONFIG_ARCH_TEGRA_2x_SOC=y"
|
||||
#define KERNEL_CONFIG_TEGRA3_MAGIC "CONFIG_ARCH_TEGRA_3x_SOC=y"
|
||||
#define KERNEL_CONFIG_TEGRA4_MAGIC "CONFIG_ARCH_TEGRA_11x_SOC=y"
|
||||
#define MAX_DATA_LEN 4096
|
||||
|
||||
int DetectTegra()
|
||||
{
|
||||
int result = TEGRA_NOT_TEGRA;
|
||||
gzFile kernelConfig = gzopen(KERNEL_CONFIG, "r");
|
||||
if (kernelConfig != 0)
|
||||
{
|
||||
char tmpbuf[KERNEL_CONFIG_MAX_LINE_WIDTH];
|
||||
const char *tegra_config = KERNEL_CONFIG_TEGRA_MAGIC;
|
||||
const char *tegra2_config = KERNEL_CONFIG_TEGRA2_MAGIC;
|
||||
const char *tegra3_config = KERNEL_CONFIG_TEGRA3_MAGIC;
|
||||
const char *tegra4_config = KERNEL_CONFIG_TEGRA4_MAGIC;
|
||||
int len = strlen(tegra_config);
|
||||
int len2 = strlen(tegra2_config);
|
||||
int len3 = strlen(tegra3_config);
|
||||
int len4 = strlen(tegra4_config);
|
||||
while (0 != gzgets(kernelConfig, tmpbuf, KERNEL_CONFIG_MAX_LINE_WIDTH))
|
||||
{
|
||||
if (0 == strncmp(tmpbuf, tegra_config, len))
|
||||
{
|
||||
result = 1;
|
||||
}
|
||||
|
||||
if (0 == strncmp(tmpbuf, tegra2_config, len2))
|
||||
{
|
||||
result = 2;
|
||||
break;
|
||||
}
|
||||
|
||||
if (0 == strncmp(tmpbuf, tegra3_config, len3))
|
||||
{
|
||||
result = 3;
|
||||
break;
|
||||
}
|
||||
|
||||
if (0 == strncmp(tmpbuf, tegra4_config, len4))
|
||||
{
|
||||
result = 4;
|
||||
break;
|
||||
}
|
||||
}
|
||||
gzclose(kernelConfig);
|
||||
}
|
||||
else
|
||||
{
|
||||
result = TEGRA_DETECTOR_ERROR;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
#ifndef __TEGRA_DETECTOR_H__
|
||||
#define __TEGRA_DETECTOR_H__
|
||||
|
||||
#define TEGRA_DETECTOR_ERROR -2
|
||||
#define TEGRA_NOT_TEGRA -1
|
||||
|
||||
int DetectTegra();
|
||||
|
||||
#endif
|
||||
@@ -1,26 +0,0 @@
|
||||
package org.opencv.engine;
|
||||
|
||||
import android.os.IBinder;
|
||||
|
||||
public class BinderConnector
|
||||
{
|
||||
public BinderConnector(MarketConnector Market)
|
||||
{
|
||||
Init(Market);
|
||||
}
|
||||
public native IBinder Connect();
|
||||
public boolean Disconnect()
|
||||
{
|
||||
Final();
|
||||
return true;
|
||||
}
|
||||
|
||||
static
|
||||
{
|
||||
System.loadLibrary("OpenCVEngine");
|
||||
System.loadLibrary("OpenCVEngine_jni");
|
||||
}
|
||||
|
||||
private native boolean Init(MarketConnector Market);
|
||||
public native void Final();
|
||||
}
|
||||
@@ -1,42 +0,0 @@
|
||||
package org.opencv.engine;
|
||||
|
||||
import android.app.Service;
|
||||
import android.content.Intent;
|
||||
import android.os.IBinder;
|
||||
import android.util.Log;
|
||||
|
||||
|
||||
public class OpenCVEngineService extends Service
|
||||
{
|
||||
private static final String TAG = "OpenCVEngine/Service";
|
||||
private IBinder mEngineInterface;
|
||||
private MarketConnector mMarket;
|
||||
private BinderConnector mNativeBinder;
|
||||
public void onCreate()
|
||||
{
|
||||
Log.i(TAG, "Service starting");
|
||||
super.onCreate();
|
||||
Log.i(TAG, "Engine binder component creating");
|
||||
mMarket = new MarketConnector(getBaseContext());
|
||||
mNativeBinder = new BinderConnector(mMarket);
|
||||
mEngineInterface = mNativeBinder.Connect();
|
||||
Log.i(TAG, "Service started successfully");
|
||||
}
|
||||
|
||||
public IBinder onBind(Intent intent)
|
||||
{
|
||||
Log.i(TAG, "Service onBind called for intent " + intent.toString());
|
||||
return mEngineInterface;
|
||||
}
|
||||
public boolean onUnbind(Intent intent)
|
||||
{
|
||||
Log.i(TAG, "Service onUnbind called for intent " + intent.toString());
|
||||
return true;
|
||||
}
|
||||
public void OnDestroy()
|
||||
{
|
||||
Log.i(TAG, "OpenCV Engine service destruction");
|
||||
mNativeBinder.Disconnect();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -766,7 +766,7 @@ float CvCascadeBoostTrainData::getVarValue( int vi, int si )
|
||||
}
|
||||
|
||||
|
||||
struct FeatureIdxOnlyPrecalc
|
||||
struct FeatureIdxOnlyPrecalc : ParallelLoopBody
|
||||
{
|
||||
FeatureIdxOnlyPrecalc( const CvFeatureEvaluator* _featureEvaluator, CvMat* _buf, int _sample_count, bool _is_buf_16u )
|
||||
{
|
||||
@@ -776,11 +776,11 @@ struct FeatureIdxOnlyPrecalc
|
||||
idst = _buf->data.i;
|
||||
is_buf_16u = _is_buf_16u;
|
||||
}
|
||||
void operator()( const BlockedRange& range ) const
|
||||
void operator()( const Range& range ) const
|
||||
{
|
||||
cv::AutoBuffer<float> valCache(sample_count);
|
||||
float* valCachePtr = (float*)valCache;
|
||||
for ( int fi = range.begin(); fi < range.end(); fi++)
|
||||
for ( int fi = range.start; fi < range.end; fi++)
|
||||
{
|
||||
for( int si = 0; si < sample_count; si++ )
|
||||
{
|
||||
@@ -803,7 +803,7 @@ struct FeatureIdxOnlyPrecalc
|
||||
bool is_buf_16u;
|
||||
};
|
||||
|
||||
struct FeatureValAndIdxPrecalc
|
||||
struct FeatureValAndIdxPrecalc : ParallelLoopBody
|
||||
{
|
||||
FeatureValAndIdxPrecalc( const CvFeatureEvaluator* _featureEvaluator, CvMat* _buf, Mat* _valCache, int _sample_count, bool _is_buf_16u )
|
||||
{
|
||||
@@ -814,9 +814,9 @@ struct FeatureValAndIdxPrecalc
|
||||
idst = _buf->data.i;
|
||||
is_buf_16u = _is_buf_16u;
|
||||
}
|
||||
void operator()( const BlockedRange& range ) const
|
||||
void operator()( const Range& range ) const
|
||||
{
|
||||
for ( int fi = range.begin(); fi < range.end(); fi++)
|
||||
for ( int fi = range.start; fi < range.end; fi++)
|
||||
{
|
||||
for( int si = 0; si < sample_count; si++ )
|
||||
{
|
||||
@@ -840,7 +840,7 @@ struct FeatureValAndIdxPrecalc
|
||||
bool is_buf_16u;
|
||||
};
|
||||
|
||||
struct FeatureValOnlyPrecalc
|
||||
struct FeatureValOnlyPrecalc : ParallelLoopBody
|
||||
{
|
||||
FeatureValOnlyPrecalc( const CvFeatureEvaluator* _featureEvaluator, Mat* _valCache, int _sample_count )
|
||||
{
|
||||
@@ -848,9 +848,9 @@ struct FeatureValOnlyPrecalc
|
||||
valCache = _valCache;
|
||||
sample_count = _sample_count;
|
||||
}
|
||||
void operator()( const BlockedRange& range ) const
|
||||
void operator()( const Range& range ) const
|
||||
{
|
||||
for ( int fi = range.begin(); fi < range.end(); fi++)
|
||||
for ( int fi = range.start; fi < range.end; fi++)
|
||||
for( int si = 0; si < sample_count; si++ )
|
||||
valCache->at<float>(fi,si) = (*featureEvaluator)( fi, si );
|
||||
}
|
||||
@@ -864,12 +864,12 @@ void CvCascadeBoostTrainData::precalculate()
|
||||
int minNum = MIN( numPrecalcVal, numPrecalcIdx);
|
||||
|
||||
double proctime = -TIME( 0 );
|
||||
parallel_for( BlockedRange(numPrecalcVal, numPrecalcIdx),
|
||||
FeatureIdxOnlyPrecalc(featureEvaluator, buf, sample_count, is_buf_16u!=0) );
|
||||
parallel_for( BlockedRange(0, minNum),
|
||||
FeatureValAndIdxPrecalc(featureEvaluator, buf, &valCache, sample_count, is_buf_16u!=0) );
|
||||
parallel_for( BlockedRange(minNum, numPrecalcVal),
|
||||
FeatureValOnlyPrecalc(featureEvaluator, &valCache, sample_count) );
|
||||
parallel_for_( Range(numPrecalcVal, numPrecalcIdx),
|
||||
FeatureIdxOnlyPrecalc(featureEvaluator, buf, sample_count, is_buf_16u!=0) );
|
||||
parallel_for_( Range(0, minNum),
|
||||
FeatureValAndIdxPrecalc(featureEvaluator, buf, &valCache, sample_count, is_buf_16u!=0) );
|
||||
parallel_for_( Range(minNum, numPrecalcVal),
|
||||
FeatureValOnlyPrecalc(featureEvaluator, &valCache, sample_count) );
|
||||
cout << "Precalculation time: " << (proctime + TIME( 0 )) << endl;
|
||||
}
|
||||
|
||||
|
||||
@@ -47,6 +47,9 @@ macro(add_extra_compiler_option option)
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
# OpenCV fails some tests when 'char' is 'unsigned' by default
|
||||
add_extra_compiler_option(-fsigned-char)
|
||||
|
||||
if(MINGW)
|
||||
# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40838
|
||||
# here we are trying to workaround the problem
|
||||
|
||||
@@ -176,7 +176,8 @@ macro(android_get_compatible_target VAR)
|
||||
endmacro()
|
||||
|
||||
unset(__android_project_chain CACHE)
|
||||
#add_android_project(target_name ${path} NATIVE_DEPS opencv_core LIBRARY_DEPS ${OpenCV_BINARY_DIR} SDK_TARGET 11)
|
||||
|
||||
# add_android_project(target_name ${path} NATIVE_DEPS opencv_core LIBRARY_DEPS ${OpenCV_BINARY_DIR} SDK_TARGET 11)
|
||||
macro(add_android_project target path)
|
||||
# parse arguments
|
||||
set(android_proj_arglist NATIVE_DEPS LIBRARY_DEPS SDK_TARGET IGNORE_JAVA IGNORE_MANIFEST)
|
||||
@@ -212,6 +213,16 @@ macro(add_android_project target path)
|
||||
ocv_check_dependencies(${android_proj_NATIVE_DEPS} opencv_java)
|
||||
endif()
|
||||
|
||||
if(EXISTS "${path}/jni/Android.mk" )
|
||||
# find if native_app_glue is used
|
||||
file(STRINGS "${path}/jni/Android.mk" NATIVE_APP_GLUE REGEX ".*(call import-module,android/native_app_glue)" )
|
||||
if(NATIVE_APP_GLUE)
|
||||
if(ANDROID_NATIVE_API_LEVEL LESS 9 OR NOT EXISTS "${ANDROID_NDK}/sources/android/native_app_glue")
|
||||
set(OCV_DEPENDENCIES_FOUND FALSE)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(OCV_DEPENDENCIES_FOUND AND android_proj_sdk_target AND ANDROID_EXECUTABLE AND ANT_EXECUTABLE AND ANDROID_TOOLS_Pkg_Revision GREATER 13 AND EXISTS "${path}/${ANDROID_MANIFEST_FILE}")
|
||||
|
||||
project(${target})
|
||||
@@ -268,9 +279,6 @@ macro(add_android_project target path)
|
||||
file(STRINGS "${path}/jni/Android.mk" JNI_LIB_NAME REGEX "LOCAL_MODULE[ ]*:=[ ]*.*" )
|
||||
string(REGEX REPLACE "LOCAL_MODULE[ ]*:=[ ]*([a-zA-Z_][a-zA-Z_0-9]*)[ ]*" "\\1" JNI_LIB_NAME "${JNI_LIB_NAME}")
|
||||
|
||||
# find using of native app glue to determine native activity
|
||||
file(STRINGS "${path}/jni/Android.mk" NATIVE_APP_GLUE REGEX ".*(call import-module,android/native_app_glue)" )
|
||||
|
||||
if(JNI_LIB_NAME)
|
||||
ocv_include_modules_recurse(${android_proj_NATIVE_DEPS})
|
||||
ocv_include_directories("${path}/jni")
|
||||
@@ -291,9 +299,9 @@ macro(add_android_project target path)
|
||||
)
|
||||
|
||||
get_target_property(android_proj_jni_location "${JNI_LIB_NAME}" LOCATION)
|
||||
if (NOT (CMAKE_BUILD_TYPE MATCHES "debug"))
|
||||
add_custom_command(TARGET ${JNI_LIB_NAME} POST_BUILD COMMAND ${CMAKE_STRIP} --strip-unneeded "${android_proj_jni_location}")
|
||||
endif()
|
||||
if (NOT (CMAKE_BUILD_TYPE MATCHES "debug"))
|
||||
add_custom_command(TARGET ${JNI_LIB_NAME} POST_BUILD COMMAND ${CMAKE_STRIP} --strip-unneeded "${android_proj_jni_location}")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
||||
@@ -26,6 +26,47 @@ if(CUDA_FOUND)
|
||||
set(HAVE_CUBLAS 1)
|
||||
endif()
|
||||
|
||||
if(${CUDA_VERSION} VERSION_LESS "5.5")
|
||||
find_cuda_helper_libs(npp)
|
||||
else()
|
||||
# hack for CUDA 5.5
|
||||
if(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "arm")
|
||||
unset(CUDA_TOOLKIT_INCLUDE CACHE)
|
||||
unset(CUDA_CUDART_LIBRARY CACHE)
|
||||
unset(CUDA_cublas_LIBRARY CACHE)
|
||||
unset(CUDA_cufft_LIBRARY CACHE)
|
||||
unset(CUDA_npp_LIBRARY CACHE)
|
||||
|
||||
if(SOFTFP)
|
||||
set(cuda_arm_path "${CUDA_TOOLKIT_ROOT_DIR}/targets/armv7-linux-gnueabi")
|
||||
else()
|
||||
set(cuda_arm_path "${CUDA_TOOLKIT_ROOT_DIR}/targets/armv7-linux-gnueabihf")
|
||||
endif()
|
||||
|
||||
set(CUDA_TOOLKIT_INCLUDE "${cuda_arm_path}/include" CACHE PATH "include path")
|
||||
set(CUDA_INCLUDE_DIRS ${CUDA_TOOLKIT_INCLUDE})
|
||||
|
||||
set(cuda_arm_library_path "${cuda_arm_path}/lib")
|
||||
|
||||
set(CUDA_CUDART_LIBRARY "${cuda_arm_library_path}/libcudart.so" CACHE FILEPATH "cudart library")
|
||||
set(CUDA_LIBRARIES ${CUDA_CUDART_LIBRARY})
|
||||
set(CUDA_cublas_LIBRARY "${cuda_arm_library_path}/libcublas.so" CACHE FILEPATH "cublas library")
|
||||
set(CUDA_cufft_LIBRARY "${cuda_arm_library_path}/libcufft.so" CACHE FILEPATH "cufft library")
|
||||
set(CUDA_nppc_LIBRARY "${cuda_arm_library_path}/libnppc.so" CACHE FILEPATH "nppc library")
|
||||
set(CUDA_nppi_LIBRARY "${cuda_arm_library_path}/libnppi.so" CACHE FILEPATH "nppi library")
|
||||
set(CUDA_npps_LIBRARY "${cuda_arm_library_path}/libnpps.so" CACHE FILEPATH "npps library")
|
||||
set(CUDA_npp_LIBRARY "${CUDA_nppc_LIBRARY};${CUDA_nppi_LIBRARY};${CUDA_npps_LIBRARY}" CACHE STRING "npp library")
|
||||
else()
|
||||
unset(CUDA_npp_LIBRARY CACHE)
|
||||
|
||||
find_cuda_helper_libs(nppc)
|
||||
find_cuda_helper_libs(nppi)
|
||||
find_cuda_helper_libs(npps)
|
||||
|
||||
set(CUDA_npp_LIBRARY "${CUDA_nppc_LIBRARY};${CUDA_nppi_LIBRARY};${CUDA_npps_LIBRARY}" CACHE STRING "npp library")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(WITH_NVCUVID)
|
||||
find_cuda_helper_libs(nvcuvid)
|
||||
set(HAVE_NVCUVID 1)
|
||||
@@ -136,8 +177,6 @@ if(CUDA_FOUND)
|
||||
|
||||
mark_as_advanced(CUDA_BUILD_CUBIN CUDA_BUILD_EMULATION CUDA_VERBOSE_BUILD CUDA_SDK_ROOT_DIR)
|
||||
|
||||
find_cuda_helper_libs(npp)
|
||||
|
||||
macro(ocv_cuda_compile VAR)
|
||||
foreach(var CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_DEBUG)
|
||||
set(${var}_backup_in_cuda_compile_ "${${var}}")
|
||||
|
||||
@@ -27,23 +27,23 @@ endif()
|
||||
# the -fPIC flag should be used.
|
||||
# ----------------------------------------------------------------------------
|
||||
if(UNIX)
|
||||
if (__ICL)
|
||||
set(CV_ICC __ICL)
|
||||
elseif(__ICC)
|
||||
set(CV_ICC __ICC)
|
||||
elseif(__ECL)
|
||||
set(CV_ICC __ECL)
|
||||
elseif(__ECC)
|
||||
set(CV_ICC __ECC)
|
||||
elseif(__INTEL_COMPILER)
|
||||
set(CV_ICC __INTEL_COMPILER)
|
||||
elseif(CMAKE_C_COMPILER MATCHES "icc")
|
||||
set(CV_ICC icc_matches_c_compiler)
|
||||
endif()
|
||||
if (__ICL)
|
||||
set(CV_ICC __ICL)
|
||||
elseif(__ICC)
|
||||
set(CV_ICC __ICC)
|
||||
elseif(__ECL)
|
||||
set(CV_ICC __ECL)
|
||||
elseif(__ECC)
|
||||
set(CV_ICC __ECC)
|
||||
elseif(__INTEL_COMPILER)
|
||||
set(CV_ICC __INTEL_COMPILER)
|
||||
elseif(CMAKE_C_COMPILER MATCHES "icc")
|
||||
set(CV_ICC icc_matches_c_compiler)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(MSVC AND CMAKE_C_COMPILER MATCHES "icc")
|
||||
set(CV_ICC __INTEL_COMPILER_FOR_WINDOWS)
|
||||
set(CV_ICC __INTEL_COMPILER_FOR_WINDOWS)
|
||||
endif()
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
@@ -64,45 +64,49 @@ if(CMAKE_COMPILER_IS_CLANGCXX)
|
||||
string(REGEX MATCH "[0-9]+\\.[0-9]+" CMAKE_CLANG_REGEX_VERSION "${CMAKE_OPENCV_CLANG_VERSION_FULL}")
|
||||
|
||||
elseif(CMAKE_COMPILER_IS_GNUCXX)
|
||||
execute_process(COMMAND ${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} -dumpversion
|
||||
OUTPUT_VARIABLE CMAKE_OPENCV_GCC_VERSION_FULL
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
execute_process(COMMAND ${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} -dumpversion
|
||||
OUTPUT_VARIABLE CMAKE_OPENCV_GCC_VERSION_FULL
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
|
||||
execute_process(COMMAND ${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} -v
|
||||
ERROR_VARIABLE CMAKE_OPENCV_GCC_INFO_FULL
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
execute_process(COMMAND ${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} -v
|
||||
ERROR_VARIABLE CMAKE_OPENCV_GCC_INFO_FULL
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
|
||||
# Typical output in CMAKE_OPENCV_GCC_VERSION_FULL: "c+//0 (whatever) 4.2.3 (...)"
|
||||
# Look for the version number
|
||||
string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" CMAKE_GCC_REGEX_VERSION "${CMAKE_OPENCV_GCC_VERSION_FULL}")
|
||||
if(NOT CMAKE_GCC_REGEX_VERSION)
|
||||
string(REGEX MATCH "[0-9]+\\.[0-9]+" CMAKE_GCC_REGEX_VERSION "${CMAKE_OPENCV_GCC_VERSION_FULL}")
|
||||
endif()
|
||||
|
||||
# Split the three parts:
|
||||
string(REGEX MATCHALL "[0-9]+" CMAKE_OPENCV_GCC_VERSIONS "${CMAKE_GCC_REGEX_VERSION}")
|
||||
|
||||
list(GET CMAKE_OPENCV_GCC_VERSIONS 0 CMAKE_OPENCV_GCC_VERSION_MAJOR)
|
||||
list(GET CMAKE_OPENCV_GCC_VERSIONS 1 CMAKE_OPENCV_GCC_VERSION_MINOR)
|
||||
|
||||
set(CMAKE_OPENCV_GCC_VERSION ${CMAKE_OPENCV_GCC_VERSION_MAJOR}${CMAKE_OPENCV_GCC_VERSION_MINOR})
|
||||
math(EXPR CMAKE_OPENCV_GCC_VERSION_NUM "${CMAKE_OPENCV_GCC_VERSION_MAJOR}*100 + ${CMAKE_OPENCV_GCC_VERSION_MINOR}")
|
||||
message(STATUS "Detected version of GNU GCC: ${CMAKE_OPENCV_GCC_VERSION} (${CMAKE_OPENCV_GCC_VERSION_NUM})")
|
||||
|
||||
if(WIN32)
|
||||
execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpmachine
|
||||
OUTPUT_VARIABLE CMAKE_OPENCV_GCC_TARGET_MACHINE
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
if(CMAKE_OPENCV_GCC_TARGET_MACHINE MATCHES "amd64|x86_64|AMD64")
|
||||
set(MINGW64 1)
|
||||
endif()
|
||||
# Typical output in CMAKE_OPENCV_GCC_VERSION_FULL: "c+//0 (whatever) 4.2.3 (...)"
|
||||
# Look for the version number
|
||||
string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" CMAKE_GCC_REGEX_VERSION "${CMAKE_OPENCV_GCC_VERSION_FULL}")
|
||||
if(NOT CMAKE_GCC_REGEX_VERSION)
|
||||
string(REGEX MATCH "[0-9]+\\.[0-9]+" CMAKE_GCC_REGEX_VERSION "${CMAKE_OPENCV_GCC_VERSION_FULL}")
|
||||
endif()
|
||||
|
||||
# Split the three parts:
|
||||
string(REGEX MATCHALL "[0-9]+" CMAKE_OPENCV_GCC_VERSIONS "${CMAKE_GCC_REGEX_VERSION}")
|
||||
|
||||
list(GET CMAKE_OPENCV_GCC_VERSIONS 0 CMAKE_OPENCV_GCC_VERSION_MAJOR)
|
||||
list(GET CMAKE_OPENCV_GCC_VERSIONS 1 CMAKE_OPENCV_GCC_VERSION_MINOR)
|
||||
|
||||
set(CMAKE_OPENCV_GCC_VERSION ${CMAKE_OPENCV_GCC_VERSION_MAJOR}${CMAKE_OPENCV_GCC_VERSION_MINOR})
|
||||
math(EXPR CMAKE_OPENCV_GCC_VERSION_NUM "${CMAKE_OPENCV_GCC_VERSION_MAJOR}*100 + ${CMAKE_OPENCV_GCC_VERSION_MINOR}")
|
||||
message(STATUS "Detected version of GNU GCC: ${CMAKE_OPENCV_GCC_VERSION} (${CMAKE_OPENCV_GCC_VERSION_NUM})")
|
||||
|
||||
if(WIN32)
|
||||
execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpmachine
|
||||
OUTPUT_VARIABLE CMAKE_OPENCV_GCC_TARGET_MACHINE
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
if(CMAKE_OPENCV_GCC_TARGET_MACHINE MATCHES "amd64|x86_64|AMD64")
|
||||
set(MINGW64 1)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(MINGW64 OR CMAKE_SYSTEM_PROCESSOR MATCHES "amd64.*|x86_64.*|AMD64.*" OR CMAKE_GENERATOR MATCHES "Visual Studio.*Win64")
|
||||
set(X86_64 1)
|
||||
if(MSVC64 OR MINGW64)
|
||||
set(X86_64 1)
|
||||
elseif(MINGW OR (MSVC AND NOT CMAKE_CROSSCOMPILING))
|
||||
set(X86 1)
|
||||
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64.*|x86_64.*|AMD64.*")
|
||||
set(X86_64 1)
|
||||
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "i686.*|i386.*|x86.*|amd64.*|AMD64.*")
|
||||
set(X86 1)
|
||||
set(X86 1)
|
||||
elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "arm.*|ARM.*")
|
||||
set(ARM 1)
|
||||
set(ARM 1)
|
||||
endif()
|
||||
|
||||
@@ -4,7 +4,7 @@ if(APPLE)
|
||||
set(OPENCL_INCLUDE_DIR "" CACHE STRING "OpenCL include directory")
|
||||
mark_as_advanced(OPENCL_INCLUDE_DIR OPENCL_LIBRARY)
|
||||
else(APPLE)
|
||||
find_package(OpenCL QUIET)
|
||||
#find_package(OpenCL QUIET)
|
||||
|
||||
if (NOT OPENCL_FOUND)
|
||||
find_path(OPENCL_ROOT_DIR
|
||||
@@ -17,7 +17,8 @@ else(APPLE)
|
||||
NAMES OpenCL/cl.h CL/cl.h
|
||||
HINTS ${OPENCL_ROOT_DIR}
|
||||
PATH_SUFFIXES include include/nvidia-current
|
||||
DOC "OpenCL include directory")
|
||||
DOC "OpenCL include directory"
|
||||
NO_DEFAULT_PATH)
|
||||
|
||||
if (X86_64)
|
||||
set(OPENCL_POSSIBLE_LIB_SUFFIXES lib/Win64 lib/x86_64 lib/x64)
|
||||
@@ -29,7 +30,8 @@ else(APPLE)
|
||||
NAMES OpenCL
|
||||
HINTS ${OPENCL_ROOT_DIR}
|
||||
PATH_SUFFIXES ${OPENCL_POSSIBLE_LIB_SUFFIXES}
|
||||
DOC "OpenCL library")
|
||||
DOC "OpenCL library"
|
||||
NO_DEFAULT_PATH)
|
||||
|
||||
mark_as_advanced(OPENCL_INCLUDE_DIR OPENCL_LIBRARY)
|
||||
include(FindPackageHandleStandardArgs)
|
||||
@@ -42,12 +44,18 @@ if(OPENCL_FOUND)
|
||||
set(OPENCL_INCLUDE_DIRS ${OPENCL_INCLUDE_DIR})
|
||||
set(OPENCL_LIBRARIES ${OPENCL_LIBRARY})
|
||||
|
||||
if (X86_64)
|
||||
if(WIN32 AND X86_64)
|
||||
set(CLAMD_POSSIBLE_LIB_SUFFIXES lib64/import)
|
||||
elseif (X86)
|
||||
elseif(WIN32)
|
||||
set(CLAMD_POSSIBLE_LIB_SUFFIXES lib32/import)
|
||||
endif()
|
||||
|
||||
if(X86_64 AND UNIX)
|
||||
set(CLAMD_POSSIBLE_LIB_SUFFIXES lib64)
|
||||
elseif(X86 AND UNIX)
|
||||
set(CLAMD_POSSIBLE_LIB_SUFFIXES lib32)
|
||||
endif()
|
||||
|
||||
if(WITH_OPENCLAMDFFT)
|
||||
find_path(CLAMDFFT_ROOT_DIR
|
||||
NAMES include/clAmdFft.h
|
||||
@@ -78,7 +86,7 @@ if(OPENCL_FOUND)
|
||||
if(WITH_OPENCLAMDBLAS)
|
||||
find_path(CLAMDBLAS_ROOT_DIR
|
||||
NAMES include/clAmdBlas.h
|
||||
PATHS ENV CLAMDFFT_PATH ENV ProgramFiles
|
||||
PATHS ENV CLAMDBLAS_PATH ENV ProgramFiles
|
||||
PATH_SUFFIXES clAmdBlas AMD/clAmdBlas
|
||||
DOC "AMD FFT root directory"
|
||||
NO_DEFAULT_PATH)
|
||||
|
||||
@@ -104,18 +104,12 @@ if(PYTHON_EXECUTABLE)
|
||||
if(BUILD_DOCS)
|
||||
find_host_program(SPHINX_BUILD sphinx-build)
|
||||
if(SPHINX_BUILD)
|
||||
if(UNIX)
|
||||
execute_process(COMMAND sh -c "${SPHINX_BUILD} -_ 2>&1 | sed -ne 1p"
|
||||
RESULT_VARIABLE SPHINX_PROCESS
|
||||
OUTPUT_VARIABLE SPHINX_VERSION
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
else()
|
||||
execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import sphinx; print sphinx.__version__"
|
||||
RESULT_VARIABLE SPHINX_PROCESS
|
||||
OUTPUT_VARIABLE SPHINX_VERSION
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
endif()
|
||||
if(SPHINX_PROCESS EQUAL 0)
|
||||
execute_process(COMMAND "${SPHINX_BUILD}"
|
||||
OUTPUT_QUIET
|
||||
ERROR_VARIABLE SPHINX_OUTPUT
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
if(SPHINX_OUTPUT MATCHES "^Sphinx v([0-9][^ \n]*)")
|
||||
set(SPHINX_VERSION "${CMAKE_MATCH_1}")
|
||||
set(HAVE_SPHINX 1)
|
||||
message(STATUS "Found Sphinx ${SPHINX_VERSION}: ${SPHINX_BUILD}")
|
||||
endif()
|
||||
|
||||
@@ -13,12 +13,29 @@ if(WITH_WIN32UI)
|
||||
endif(WITH_WIN32UI)
|
||||
|
||||
# --- QT4 ---
|
||||
ocv_clear_vars(HAVE_QT)
|
||||
ocv_clear_vars(HAVE_QT HAVE_QT5)
|
||||
if(WITH_QT)
|
||||
find_package(Qt4)
|
||||
if(QT4_FOUND)
|
||||
set(HAVE_QT TRUE)
|
||||
add_definitions(-DHAVE_QT) # We need to define the macro this way, using cvconfig.h does not work
|
||||
if(NOT CMAKE_VERSION VERSION_LESS 2.8.3 AND NOT WITH_QT EQUAL 4)
|
||||
find_package(Qt5Core)
|
||||
find_package(Qt5Gui)
|
||||
find_package(Qt5Widgets)
|
||||
find_package(Qt5Test)
|
||||
find_package(Qt5Concurrent)
|
||||
if(Qt5Core_FOUND AND Qt5Gui_FOUND AND Qt5Widgets_FOUND AND Qt5Test_FOUND AND Qt5Concurrent_FOUND)
|
||||
set(HAVE_QT5 ON)
|
||||
set(HAVE_QT ON)
|
||||
find_package(Qt5OpenGL)
|
||||
if(Qt5OpenGL_FOUND)
|
||||
set(QT_QTOPENGL_FOUND ON)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(NOT HAVE_QT)
|
||||
find_package(Qt4 REQUIRED QtCore QtGui QtTest)
|
||||
if(QT4_FOUND)
|
||||
set(HAVE_QT TRUE)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
@@ -42,7 +59,6 @@ if(WITH_OPENGL)
|
||||
list(APPEND OPENCV_LINKER_LIBS ${OPENGL_LIBRARIES})
|
||||
if(QT_QTOPENGL_FOUND)
|
||||
set(HAVE_QT_OPENGL TRUE)
|
||||
add_definitions(-DHAVE_QT_OPENGL)
|
||||
else()
|
||||
ocv_include_directories(${OPENGL_INCLUDE_DIR})
|
||||
endif()
|
||||
|
||||
@@ -81,10 +81,33 @@ endif(WITH_GIGEAPI)
|
||||
# --- Dc1394 ---
|
||||
ocv_clear_vars(HAVE_DC1394 HAVE_DC1394_2)
|
||||
if(WITH_1394)
|
||||
CHECK_MODULE(libdc1394-2 HAVE_DC1394_2)
|
||||
if(NOT HAVE_DC1394_2)
|
||||
CHECK_MODULE(libdc1394 HAVE_DC1394)
|
||||
endif()
|
||||
if(WIN32 AND MINGW)
|
||||
find_path(CMU1394_INCLUDE_PATH "/1394common.h"
|
||||
PATH_SUFFIXES include
|
||||
DOC "The path to cmu1394 headers")
|
||||
find_path(DC1394_2_INCLUDE_PATH "/dc1394/dc1394.h"
|
||||
PATH_SUFFIXES include
|
||||
DOC "The path to DC1394 2.x headers")
|
||||
if(CMU1394_INCLUDE_PATH AND DC1394_2_INCLUDE_PATH)
|
||||
set(CMU1394_LIB_DIR "${CMU1394_INCLUDE_PATH}/../lib" CACHE PATH "Full path of CMU1394 library directory")
|
||||
set(DC1394_2_LIB_DIR "${DC1394_2_INCLUDE_PATH}/../lib" CACHE PATH "Full path of DC1394 2.x library directory")
|
||||
if(EXISTS "${CMU1394_LIB_DIR}/lib1394camera.a" AND EXISTS "${DC1394_2_LIB_DIR}/libdc1394.a")
|
||||
set(HAVE_DC1394_2 TRUE)
|
||||
endif()
|
||||
endif()
|
||||
if(HAVE_DC1394_2)
|
||||
ocv_parse_pkg("libdc1394-2" "${DC1394_2_LIB_DIR}/pkgconfig" "")
|
||||
ocv_include_directories(${DC1394_2_INCLUDE_PATH})
|
||||
set(HIGHGUI_LIBRARIES ${HIGHGUI_LIBRARIES}
|
||||
"${DC1394_2_LIB_DIR}/libdc1394.a"
|
||||
"${CMU1394_LIB_DIR}/lib1394camera.a")
|
||||
endif(HAVE_DC1394_2)
|
||||
else(WIN32 AND MINGW)
|
||||
CHECK_MODULE(libdc1394-2 HAVE_DC1394_2)
|
||||
if(NOT HAVE_DC1394_2)
|
||||
CHECK_MODULE(libdc1394 HAVE_DC1394)
|
||||
endif()
|
||||
endif(WIN32 AND MINGW)
|
||||
endif(WITH_1394)
|
||||
|
||||
# --- xine ---
|
||||
@@ -197,7 +220,7 @@ endif(WITH_MSMF)
|
||||
|
||||
# --- Extra HighGUI libs on Windows ---
|
||||
if(WIN32)
|
||||
list(APPEND HIGHGUI_LIBRARIES comctl32 gdi32 ole32 vfw32)
|
||||
list(APPEND HIGHGUI_LIBRARIES comctl32 gdi32 ole32 setupapi ws2_32 vfw32)
|
||||
if(MINGW64)
|
||||
list(APPEND HIGHGUI_LIBRARIES avifil32 avicap32 winmm msvfw32)
|
||||
list(REMOVE_ITEM HIGHGUI_LIBRARIES vfw32)
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
#
|
||||
# Created: 5 Aug 2011 by Marian Zajko (marian.zajko@ximea.com)
|
||||
# Updated: 25 June 2012 by Igor Kuzmin (parafin@ximea.com)
|
||||
# Updated: 22 October 2012 by Marian Zajko (marian.zajko@ximea.com)
|
||||
#
|
||||
|
||||
set(XIMEA_FOUND)
|
||||
@@ -18,11 +19,15 @@ set(XIMEA_LIBRARY_DIR)
|
||||
if(WIN32)
|
||||
# Try to find the XIMEA API path in registry.
|
||||
GET_FILENAME_COMPONENT(XIMEA_PATH "[HKEY_CURRENT_USER\\Software\\XIMEA\\CamSupport\\API;Path]" ABSOLUTE)
|
||||
|
||||
if(EXISTS XIMEA_PATH)
|
||||
|
||||
if(EXISTS ${XIMEA_PATH})
|
||||
set(XIMEA_FOUND 1)
|
||||
# set LIB folders
|
||||
set(XIMEA_LIBRARY_DIR "${XIMEA_PATH}/x86")
|
||||
if(CMAKE_CL_64)
|
||||
set(XIMEA_LIBRARY_DIR "${XIMEA_PATH}/x64")
|
||||
else()
|
||||
set(XIMEA_LIBRARY_DIR "${XIMEA_PATH}/x86")
|
||||
endif()
|
||||
else()
|
||||
set(XIMEA_FOUND 0)
|
||||
endif()
|
||||
@@ -38,5 +43,4 @@ endif()
|
||||
|
||||
mark_as_advanced(FORCE XIMEA_FOUND)
|
||||
mark_as_advanced(FORCE XIMEA_PATH)
|
||||
mark_as_advanced(FORCE XIMEA_LIBRARY_DIR)
|
||||
|
||||
mark_as_advanced(FORCE XIMEA_LIBRARY_DIR)
|
||||
@@ -162,7 +162,7 @@ if(UNIX)
|
||||
endif()
|
||||
|
||||
if(ANDROID)
|
||||
install(FILES "${OpenCV_SOURCE_DIR}/android/android.toolchain.cmake" DESTINATION ${OPENCV_CONFIG_INSTALL_PATH}/)
|
||||
install(FILES "${OpenCV_SOURCE_DIR}/platforms/android/android.toolchain.cmake" DESTINATION ${OPENCV_CONFIG_INSTALL_PATH}/)
|
||||
endif()
|
||||
|
||||
# --------------------------------------------------------------------------------------------
|
||||
|
||||
@@ -303,7 +303,7 @@ macro(ocv_glob_modules)
|
||||
# collect modules
|
||||
set(OPENCV_INITIAL_PASS ON)
|
||||
foreach(__path ${ARGN})
|
||||
ocv_get_real_path(__path "${__path}")
|
||||
get_filename_component(__path "${__path}" ABSOLUTE)
|
||||
|
||||
list(FIND __directories_observed "${__path}" __pathIdx)
|
||||
if(__pathIdx GREATER -1)
|
||||
@@ -315,7 +315,7 @@ macro(ocv_glob_modules)
|
||||
if(__ocvmodules)
|
||||
list(SORT __ocvmodules)
|
||||
foreach(mod ${__ocvmodules})
|
||||
ocv_get_real_path(__modpath "${__path}/${mod}")
|
||||
get_filename_component(__modpath "${__path}/${mod}" ABSOLUTE)
|
||||
if(EXISTS "${__modpath}/CMakeLists.txt")
|
||||
|
||||
list(FIND __directories_observed "${__modpath}" __pathIdx)
|
||||
@@ -432,11 +432,19 @@ macro(ocv_glob_module_sources)
|
||||
file(GLOB lib_hdrs "include/opencv2/${name}/*.hpp" "include/opencv2/${name}/*.h")
|
||||
file(GLOB lib_hdrs_detail "include/opencv2/${name}/detail/*.hpp" "include/opencv2/${name}/detail/*.h")
|
||||
|
||||
file(GLOB cl_kernels "src/opencl/*.cl")
|
||||
file(GLOB lib_cuda_srcs "src/cuda/*.cu")
|
||||
set(cuda_objs "")
|
||||
set(lib_cuda_hdrs "")
|
||||
|
||||
source_group("Src" FILES ${lib_srcs} ${lib_int_hdrs})
|
||||
source_group("Include" FILES ${lib_hdrs})
|
||||
source_group("Include\\detail" FILES ${lib_hdrs_detail})
|
||||
if(HAVE_CUDA AND lib_cuda_srcs)
|
||||
ocv_include_directories(${CUDA_INCLUDE_DIRS})
|
||||
file(GLOB lib_cuda_hdrs "src/cuda/*.hpp")
|
||||
|
||||
ocv_cuda_compile(cuda_objs ${lib_cuda_srcs} ${lib_cuda_hdrs})
|
||||
source_group("Src\\Cuda" FILES ${lib_cuda_srcs} ${lib_cuda_hdrs})
|
||||
endif()
|
||||
|
||||
file(GLOB cl_kernels "src/opencl/*.cl")
|
||||
|
||||
if(HAVE_OPENCL AND cl_kernels)
|
||||
ocv_include_directories(${OPENCL_INCLUDE_DIRS})
|
||||
@@ -448,7 +456,12 @@ macro(ocv_glob_module_sources)
|
||||
list(APPEND lib_srcs ${cl_kernels} "${CMAKE_CURRENT_BINARY_DIR}/kernels.cpp")
|
||||
endif()
|
||||
|
||||
ocv_set_module_sources(${ARGN} HEADERS ${lib_hdrs} ${lib_hdrs_detail} SOURCES ${lib_srcs} ${lib_int_hdrs})
|
||||
source_group("Src" FILES ${lib_srcs} ${lib_int_hdrs})
|
||||
source_group("Include" FILES ${lib_hdrs})
|
||||
source_group("Include\\detail" FILES ${lib_hdrs_detail})
|
||||
|
||||
ocv_set_module_sources(${ARGN} HEADERS ${lib_hdrs} ${lib_hdrs_detail}
|
||||
SOURCES ${lib_srcs} ${lib_int_hdrs} ${cuda_objs} ${lib_cuda_srcs} ${lib_cuda_hdrs})
|
||||
endmacro()
|
||||
|
||||
# creates OpenCV module in current folder
|
||||
@@ -457,10 +470,14 @@ endmacro()
|
||||
# ocv_create_module(<extra link dependencies>)
|
||||
# ocv_create_module(SKIP_LINK)
|
||||
macro(ocv_create_module)
|
||||
add_library(${the_module} ${OPENCV_MODULE_TYPE} ${OPENCV_MODULE_${the_module}_HEADERS} ${OPENCV_MODULE_${the_module}_SOURCES})
|
||||
add_library(${the_module} ${OPENCV_MODULE_TYPE} ${OPENCV_MODULE_${the_module}_HEADERS} ${OPENCV_MODULE_${the_module}_SOURCES}
|
||||
"${OPENCV_CONFIG_FILE_INCLUDE_DIR}/cvconfig.h" "${OPENCV_CONFIG_FILE_INCLUDE_DIR}/opencv2/opencv_modules.hpp")
|
||||
|
||||
if(NOT "${ARGN}" STREQUAL "SKIP_LINK")
|
||||
target_link_libraries(${the_module} ${OPENCV_MODULE_${the_module}_DEPS} ${OPENCV_MODULE_${the_module}_DEPS_EXT} ${OPENCV_LINKER_LIBS} ${IPP_LIBS} ${ARGN})
|
||||
if (HAVE_CUDA)
|
||||
target_link_libraries(${the_module} ${CUDA_LIBRARIES} ${CUDA_npp_LIBRARY})
|
||||
endif()
|
||||
if(HAVE_OPENCL AND OPENCL_LIBRARIES)
|
||||
target_link_libraries(${the_module} ${OPENCL_LIBRARIES})
|
||||
endif()
|
||||
@@ -545,8 +562,8 @@ endmacro()
|
||||
# ocv_define_module(module_name [INTERNAL] [REQUIRED] [<list of dependencies>] [OPTIONAL <list of optional dependencies>])
|
||||
macro(ocv_define_module module_name)
|
||||
ocv_add_module(${module_name} ${ARGN})
|
||||
ocv_glob_module_sources()
|
||||
ocv_module_include_directories()
|
||||
ocv_glob_module_sources()
|
||||
ocv_create_module()
|
||||
ocv_add_precompiled_headers(${the_module})
|
||||
|
||||
|
||||
@@ -411,16 +411,6 @@ macro(ocv_regex_escape var regex)
|
||||
endmacro()
|
||||
|
||||
|
||||
# get absolute path with symlinks resolved
|
||||
macro(ocv_get_real_path VAR PATHSTR)
|
||||
if(CMAKE_VERSION VERSION_LESS 2.8)
|
||||
get_filename_component(${VAR} "${PATHSTR}" ABSOLUTE)
|
||||
else()
|
||||
get_filename_component(${VAR} "${PATHSTR}" REALPATH)
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
|
||||
# convert list of paths to full paths
|
||||
macro(ocv_convert_to_full_paths VAR)
|
||||
if(${VAR})
|
||||
@@ -511,6 +501,13 @@ macro(ocv_parse_header2 LIBNAME HDR_PATH VARNAME)
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
# read single version info from the pkg file
|
||||
macro(ocv_parse_pkg LIBNAME PKG_PATH SCOPE)
|
||||
if(EXISTS "${PKG_PATH}/${LIBNAME}.pc")
|
||||
file(STRINGS "${PKG_PATH}/${LIBNAME}.pc" line_to_parse REGEX "^Version:[ \t]+[0-9.]*.*$" LIMIT_COUNT 1)
|
||||
STRING(REGEX REPLACE ".*Version: ([^ ]+).*" "\\1" ALIASOF_${LIBNAME}_VERSION "${line_to_parse}" )
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
################################################################################################
|
||||
# short command to setup source group
|
||||
|
||||
@@ -228,3 +228,9 @@
|
||||
|
||||
/* Clp support */
|
||||
#cmakedefine HAVE_CLP
|
||||
|
||||
/* Qt support */
|
||||
#cmakedefine HAVE_QT
|
||||
|
||||
/* Qt OpenGL support */
|
||||
#cmakedefine HAVE_QT_OPENGL
|
||||
|
||||
@@ -53,8 +53,8 @@ if(BUILD_DOCS AND HAVE_SPHINX)
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
file(GLOB_RECURSE _OPENCV_FILES_REF "${OpenCV_SOURCE_DIR}/android/service/doc/*.rst")
|
||||
file(GLOB_RECURSE _OPENCV_FILES_REF_PICT "${OpenCV_SOURCE_DIR}/android/service/doc/*.png" "${OpenCV_SOURCE_DIR}/android/service/doc/*.jpg")
|
||||
file(GLOB_RECURSE _OPENCV_FILES_REF "${OpenCV_SOURCE_DIR}/platforms/android/service/doc/*.rst")
|
||||
file(GLOB_RECURSE _OPENCV_FILES_REF_PICT "${OpenCV_SOURCE_DIR}/platforms/android/service/doc/*.png" "${OpenCV_SOURCE_DIR}/platforms/android/service/doc/*.jpg")
|
||||
list(APPEND OPENCV_FILES_REF ${_OPENCV_FILES_REF})
|
||||
list(APPEND OPENCV_FILES_REF_PICT ${_OPENCV_FILES_REF_PICT})
|
||||
|
||||
|
||||
externo
+1
-1
@@ -183,7 +183,7 @@
|
||||
{% if theme_lang == 'c' %}
|
||||
{% endif %}
|
||||
{% if theme_lang == 'cpp' %}
|
||||
<li>Try the <a href="http://docs.opencv.org/trunk/opencv_cheatsheet.pdf">Cheatsheet</a>.</li>
|
||||
<li>Try the <a href="http://docs.opencv.org/opencv_cheatsheet.pdf">Cheatsheet</a>.</li>
|
||||
{% endif %}
|
||||
{% if theme_lang == 'py' %}
|
||||
<li>Try the <a href="cookbook.html">Cookbook</a>.</li>
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
#/usr/bin/env python
|
||||
#!/usr/bin/env python
|
||||
|
||||
import sys, glob
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#/usr/bin/env python
|
||||
#!/usr/bin/env python
|
||||
|
||||
import os, sys, fnmatch, re
|
||||
|
||||
|
||||
+114
-112
@@ -1,4 +1,4 @@
|
||||
#/usr/bin/env python
|
||||
#!/usr/bin/env python
|
||||
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
@@ -239,7 +239,7 @@ latex_documents = [
|
||||
u'', 'manual'),
|
||||
('doc/tutorials/tutorials', 'opencv_tutorials.tex', u'The OpenCV Tutorials',
|
||||
u'', 'manual'),
|
||||
('android/refman', 'opencv2manager.tex', u'The OpenCV Manager Manual',
|
||||
('platforms/android/refman', 'opencv2manager.tex', u'The OpenCV Manager Manual',
|
||||
u'', 'manual'),
|
||||
]
|
||||
|
||||
@@ -284,120 +284,122 @@ latex_domain_indices = True
|
||||
# (source start file, name, description, authors, manual section).
|
||||
man_pages = [
|
||||
('index', 'opencv', u'The OpenCV Reference Manual',
|
||||
[u'opencv-dev@itseez.com'], 1)
|
||||
[u'admin@opencv.org'], 1)
|
||||
]
|
||||
|
||||
# ---- External links for tutorials -----------------
|
||||
extlinks = {
|
||||
'basicstructures' : ('http://opencv.itseez.com/modules/core/doc/basic_structures.html#%s', None),
|
||||
'oldbasicstructures' : ('http://opencv.itseez.com/modules/core/doc/old_basic_structures.html#%s', None),
|
||||
'readwriteimagevideo' : ('http://opencv.itseez.com/modules/highgui/doc/reading_and_writing_images_and_video.html#%s', None),
|
||||
'operationsonarrays' : ('http://opencv.itseez.com/modules/core/doc/operations_on_arrays.html#%s', None),
|
||||
'utilitysystemfunctions':('http://opencv.itseez.com/modules/core/doc/utility_and_system_functions_and_macros.html#%s', None),
|
||||
'imgprocfilter':('http://opencv.itseez.com/modules/imgproc/doc/filtering.html#%s', None),
|
||||
'svms':('http://opencv.itseez.com/modules/ml/doc/support_vector_machines.html#%s', None),
|
||||
'drawingfunc':('http://opencv.itseez.com/modules/core/doc/drawing_functions.html#%s', None),
|
||||
'xmlymlpers':('http://opencv.itseez.com/modules/core/doc/xml_yaml_persistence.html#%s', None),
|
||||
'hgvideo' : ('http://opencv.itseez.com/modules/highgui/doc/reading_and_writing_images_and_video.html#%s', None),
|
||||
'gpuinit' : ('http://opencv.itseez.com/modules/gpu/doc/initalization_and_information.html#%s', None),
|
||||
'gpudatastructure' : ('http://opencv.itseez.com/modules/gpu/doc/data_structures.html#%s', None),
|
||||
'gpuopmatrices' : ('http://opencv.itseez.com/modules/gpu/doc/operations_on_matrices.html#%s', None),
|
||||
'gpuperelement' : ('http://opencv.itseez.com/modules/gpu/doc/per_element_operations.html#%s', None),
|
||||
'gpuimgproc' : ('http://opencv.itseez.com/modules/gpu/doc/image_processing.html#%s', None),
|
||||
'gpumatrixreduct' : ('http://opencv.itseez.com/modules/gpu/doc/matrix_reductions.html#%s', None),
|
||||
'filtering':('http://opencv.itseez.com/modules/imgproc/doc/filtering.html#%s', None),
|
||||
'flann' : ('http://opencv.itseez.com/modules/flann/doc/flann_fast_approximate_nearest_neighbor_search.html#%s', None ),
|
||||
'calib3d' : ('http://opencv.itseez.com/trunk/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html#%s', None ),
|
||||
'feature2d' : ('http://opencv.itseez.com/trunk/modules/imgproc/doc/feature_detection.html#%s', None ),
|
||||
'imgproc_geometric' : ('http://opencv.itseez.com/trunk/modules/imgproc/doc/geometric_transformations.html#%s', None ),
|
||||
'basicstructures' : ('http://docs.opencv.org/modules/core/doc/basic_structures.html#%s', None),
|
||||
'oldbasicstructures' : ('http://docs.opencv.org/modules/core/doc/old_basic_structures.html#%s', None),
|
||||
'readwriteimagevideo' : ('http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html#%s', None),
|
||||
'operationsonarrays' : ('http://docs.opencv.org/modules/core/doc/operations_on_arrays.html#%s', None),
|
||||
'utilitysystemfunctions':('http://docs.opencv.org/modules/core/doc/utility_and_system_functions_and_macros.html#%s', None),
|
||||
'imgprocfilter':('http://docs.opencv.org/modules/imgproc/doc/filtering.html#%s', None),
|
||||
'svms':('http://docs.opencv.org/modules/ml/doc/support_vector_machines.html#%s', None),
|
||||
'drawingfunc':('http://docs.opencv.org/modules/core/doc/drawing_functions.html#%s', None),
|
||||
'xmlymlpers':('http://docs.opencv.org/modules/core/doc/xml_yaml_persistence.html#%s', None),
|
||||
'hgvideo' : ('http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html#%s', None),
|
||||
'gpuinit' : ('http://docs.opencv.org/modules/gpu/doc/initalization_and_information.html#%s', None),
|
||||
'gpudatastructure' : ('http://docs.opencv.org/modules/gpu/doc/data_structures.html#%s', None),
|
||||
'gpuopmatrices' : ('http://docs.opencv.org/modules/gpu/doc/operations_on_matrices.html#%s', None),
|
||||
'gpuperelement' : ('http://docs.opencv.org/modules/gpu/doc/per_element_operations.html#%s', None),
|
||||
'gpuimgproc' : ('http://docs.opencv.org/modules/gpu/doc/image_processing.html#%s', None),
|
||||
'gpumatrixreduct' : ('http://docs.opencv.org/modules/gpu/doc/matrix_reductions.html#%s', None),
|
||||
'filtering':('http://docs.opencv.org/modules/imgproc/doc/filtering.html#%s', None),
|
||||
'flann' : ('http://docs.opencv.org/modules/flann/doc/flann_fast_approximate_nearest_neighbor_search.html#%s', None ),
|
||||
'calib3d' : ('http://docs.opencv.org/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html#%s', None ),
|
||||
'feature2d' : ('http://docs.opencv.org/modules/imgproc/doc/feature_detection.html#%s', None ),
|
||||
'imgproc_geometric' : ('http://docs.opencv.org/modules/imgproc/doc/geometric_transformations.html#%s', None ),
|
||||
|
||||
'opencv_group' : ('http://tech.groups.yahoo.com/group/OpenCV/%s', None),
|
||||
# 'opencv_group' : ('http://answers.opencv.org/%s', None),
|
||||
'opencv_qa' : ('http://answers.opencv.org/%s', None),
|
||||
'how_to_contribute' : ('http://code.opencv.org/projects/opencv/wiki/How_to_contribute/%s', None),
|
||||
|
||||
'cvt_color': ('http://opencv.itseez.com/modules/imgproc/doc/miscellaneous_transformations.html?highlight=cvtcolor#cvtcolor%s', None),
|
||||
'imread': ('http://opencv.itseez.com/modules/highgui/doc/reading_and_writing_images_and_video.html?highlight=imread#imread%s', None),
|
||||
'imwrite': ('http://opencv.itseez.com/modules/highgui/doc/reading_and_writing_images_and_video.html?highlight=imwrite#imwrite%s', None),
|
||||
'imshow': ('http://opencv.itseez.com/modules/highgui/doc/user_interface.html?highlight=imshow#imshow%s', None),
|
||||
'named_window': ('http://opencv.itseez.com/modules/highgui/doc/user_interface.html?highlight=namedwindow#namedwindow%s', None),
|
||||
'wait_key': ('http://opencv.itseez.com/modules/highgui/doc/user_interface.html?highlight=waitkey#waitkey%s', None),
|
||||
'add_weighted': ('http://opencv.itseez.com/modules/core/doc/operations_on_arrays.html?highlight=addweighted#addweighted%s', None),
|
||||
'saturate_cast': ('http://opencv.itseez.com/modules/core/doc/utility_and_system_functions_and_macros.html?highlight=saturate_cast#saturate-cast%s', None),
|
||||
'mat_zeros': ('http://opencv.itseez.com/modules/core/doc/basic_structures.html?highlight=zeros#mat-zeros%s', None),
|
||||
'convert_to': ('http://opencv.itseez.com/modules/core/doc/basic_structures.html#mat-convertto%s', None),
|
||||
'create_trackbar': ('http://opencv.itseez.com/modules/highgui/doc/user_interface.html?highlight=createtrackbar#createtrackbar%s', None),
|
||||
'point': ('http://opencv.itseez.com/modules/core/doc/basic_structures.html#point%s', None),
|
||||
'scalar': ('http://opencv.itseez.com/modules/core/doc/basic_structures.html#scalar%s', None),
|
||||
'line': ('http://opencv.itseez.com/modules/core/doc/drawing_functions.html#line%s', None),
|
||||
'ellipse': ('http://opencv.itseez.com/modules/core/doc/drawing_functions.html#ellipse%s', None),
|
||||
'rectangle': ('http://opencv.itseez.com/modules/core/doc/drawing_functions.html#rectangle%s', None),
|
||||
'circle': ('http://opencv.itseez.com/modules/core/doc/drawing_functions.html#circle%s', None),
|
||||
'fill_poly': ('http://opencv.itseez.com/modules/core/doc/drawing_functions.html#fillpoly%s', None),
|
||||
'rng': ('http://opencv.itseez.com/modules/core/doc/operations_on_arrays.html?highlight=rng#rng%s', None),
|
||||
'put_text': ('http://opencv.itseez.com/modules/core/doc/drawing_functions.html#puttext%s', None),
|
||||
'gaussian_blur': ('http://opencv.itseez.com/modules/imgproc/doc/filtering.html?highlight=gaussianblur#gaussianblur%s', None),
|
||||
'blur': ('http://opencv.itseez.com/modules/imgproc/doc/filtering.html?highlight=blur#blur%s', None),
|
||||
'median_blur': ('http://opencv.itseez.com/modules/imgproc/doc/filtering.html?highlight=medianblur#medianblur%s', None),
|
||||
'bilateral_filter': ('http://opencv.itseez.com/modules/imgproc/doc/filtering.html?highlight=bilateralfilter#bilateralfilter%s', None),
|
||||
'erode': ('http://opencv.itseez.com/modules/imgproc/doc/filtering.html?highlight=erode#erode%s', None),
|
||||
'dilate': ('http://opencv.itseez.com/modules/imgproc/doc/filtering.html?highlight=dilate#dilate%s', None),
|
||||
'get_structuring_element': ('http://opencv.itseez.com/modules/imgproc/doc/filtering.html?highlight=getstructuringelement#getstructuringelement%s', None),
|
||||
'flood_fill': ( 'http://opencv.itseez.com/modules/imgproc/doc/miscellaneous_transformations.html?highlight=floodfill#floodfill%s', None),
|
||||
'morphology_ex': ('http://opencv.itseez.com/modules/imgproc/doc/filtering.html?highlight=morphologyex#morphologyex%s', None),
|
||||
'pyr_down': ('http://opencv.itseez.com/modules/imgproc/doc/filtering.html?highlight=pyrdown#pyrdown%s', None),
|
||||
'pyr_up': ('http://opencv.itseez.com/modules/imgproc/doc/filtering.html?highlight=pyrup#pyrup%s', None),
|
||||
'resize': ('http://opencv.itseez.com/modules/imgproc/doc/geometric_transformations.html?highlight=resize#resize%s', None),
|
||||
'threshold': ('http://opencv.itseez.com/modules/imgproc/doc/miscellaneous_transformations.html?highlight=threshold#threshold%s', None),
|
||||
'filter2d': ('http://opencv.itseez.com/modules/imgproc/doc/filtering.html?highlight=filter2d#filter2d%s', None),
|
||||
'copy_make_border': ('http://opencv.itseez.com/modules/imgproc/doc/filtering.html?highlight=copymakeborder#copymakeborder%s', None),
|
||||
'sobel': ('http://opencv.itseez.com/modules/imgproc/doc/filtering.html?highlight=sobel#sobel%s', None),
|
||||
'scharr': ('http://opencv.itseez.com/modules/imgproc/doc/filtering.html?highlight=scharr#scharr%s', None),
|
||||
'laplacian': ('http://opencv.itseez.com/modules/imgproc/doc/filtering.html?highlight=laplacian#laplacian%s', None),
|
||||
'canny': ('http://opencv.itseez.com/modules/imgproc/doc/feature_detection.html?highlight=canny#canny%s', None),
|
||||
'copy_to': ('http://opencv.itseez.com/modules/core/doc/basic_structures.html?highlight=copyto#mat-copyto%s', None),
|
||||
'hough_lines' : ('http://opencv.itseez.com/modules/imgproc/doc/feature_detection.html?highlight=houghlines#houghlines%s', None),
|
||||
'hough_lines_p' : ('http://opencv.itseez.com/modules/imgproc/doc/feature_detection.html?highlight=houghlinesp#houghlinesp%s', None),
|
||||
'hough_circles' : ('http://opencv.itseez.com/modules/imgproc/doc/feature_detection.html?highlight=houghcircles#houghcircles%s', None),
|
||||
'remap' : ('http://opencv.itseez.com/modules/imgproc/doc/geometric_transformations.html?highlight=remap#remap%s', None),
|
||||
'warp_affine' : ('http://opencv.itseez.com/modules/imgproc/doc/geometric_transformations.html?highlight=warpaffine#warpaffine%s' , None),
|
||||
'get_rotation_matrix_2d' : ('http://opencv.itseez.com/modules/imgproc/doc/geometric_transformations.html?highlight=getrotationmatrix2d#getrotationmatrix2d%s', None),
|
||||
'get_affine_transform' : ('http://opencv.itseez.com/modules/imgproc/doc/geometric_transformations.html?highlight=getaffinetransform#getaffinetransform%s', None),
|
||||
'equalize_hist' : ('http://opencv.itseez.com/modules/imgproc/doc/histograms.html?highlight=equalizehist#equalizehist%s', None),
|
||||
'split' : ('http://opencv.itseez.com/modules/core/doc/operations_on_arrays.html?highlight=split#split%s', None),
|
||||
'calc_hist' : ('http://opencv.itseez.com/modules/imgproc/doc/histograms.html?highlight=calchist#calchist%s', None),
|
||||
'normalize' : ('http://opencv.itseez.com/modules/core/doc/operations_on_arrays.html?highlight=normalize#normalize%s', None),
|
||||
'match_template' : ('http://opencv.itseez.com/modules/imgproc/doc/object_detection.html?highlight=matchtemplate#matchtemplate%s', None),
|
||||
'min_max_loc' : ('http://opencv.itseez.com/modules/core/doc/operations_on_arrays.html?highlight=minmaxloc#minmaxloc%s', None),
|
||||
'mix_channels' : ( 'http://opencv.itseez.com/modules/core/doc/operations_on_arrays.html?highlight=mixchannels#mixchannels%s', None),
|
||||
'calc_back_project' : ('http://opencv.itseez.com/modules/imgproc/doc/histograms.html?highlight=calcbackproject#calcbackproject%s', None),
|
||||
'compare_hist' : ('http://opencv.itseez.com/modules/imgproc/doc/histograms.html?highlight=comparehist#comparehist%s', None),
|
||||
'corner_harris' : ('http://opencv.itseez.com/modules/imgproc/doc/feature_detection.html?highlight=cornerharris#cornerharris%s', None),
|
||||
'good_features_to_track' : ('http://opencv.itseez.com/modules/imgproc/doc/feature_detection.html?highlight=goodfeaturestotrack#goodfeaturestotrack%s', None),
|
||||
'corner_min_eigenval' : ('http://opencv.itseez.com/modules/imgproc/doc/feature_detection.html?highlight=cornermineigenval#cornermineigenval%s', None),
|
||||
'corner_eigenvals_and_vecs' : ('http://opencv.itseez.com/modules/imgproc/doc/feature_detection.html?highlight=cornereigenvalsandvecs#cornereigenvalsandvecs%s', None),
|
||||
'corner_sub_pix' : ('http://opencv.itseez.com/modules/imgproc/doc/feature_detection.html?highlight=cornersubpix#cornersubpix%s', None),
|
||||
'find_contours' : ('http://opencv.itseez.com/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html?highlight=findcontours#findcontours%s', None),
|
||||
'convex_hull' : ('http://opencv.itseez.com/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html?highlight=convexhull#convexhull%s', None),
|
||||
'draw_contours' : ('http://opencv.itseez.com/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html?highlight=drawcontours#drawcontours%s', None),
|
||||
'bounding_rect' : ('http://opencv.itseez.com/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html?highlight=boundingrect#boundingrect%s', None),
|
||||
'min_enclosing_circle' : ('http://opencv.itseez.com/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html?highlight=minenclosingcircle#minenclosingcircle%s', None),
|
||||
'min_area_rect' : ('http://opencv.itseez.com/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html?highlight=minarearect#minarearect%s', None),
|
||||
'fit_ellipse' : ('http://opencv.itseez.com/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html?highlight=fitellipse#fitellipse%s', None),
|
||||
'moments' : ('http://opencv.itseez.com/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html?highlight=moments#moments%s', None),
|
||||
'contour_area' : ('http://opencv.itseez.com/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html?highlight=contourarea#contourarea%s', None),
|
||||
'arc_length' : ('http://opencv.itseez.com/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html?highlight=arclength#arclength%s', None),
|
||||
'point_polygon_test' : ('http://opencv.itseez.com/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html?highlight=pointpolygontest#pointpolygontest%s', None),
|
||||
'feature_detector' : ( 'http://opencv.itseez.com/modules/features2d/doc/common_interfaces_of_feature_detectors.html?highlight=featuredetector#FeatureDetector%s', None),
|
||||
'feature_detector_detect' : ('http://opencv.itseez.com/modules/features2d/doc/common_interfaces_of_feature_detectors.html?highlight=detect#featuredetector-detect%s', None ),
|
||||
'surf_feature_detector' : ('http://opencv.itseez.com/modules/features2d/doc/common_interfaces_of_feature_detectors.html?highlight=surffeaturedetector#surffeaturedetector%s', None ),
|
||||
'draw_keypoints' : ('http://opencv.itseez.com/modules/features2d/doc/drawing_function_of_keypoints_and_matches.html?highlight=drawkeypoints#drawkeypoints%s', None ),
|
||||
'descriptor_extractor': ( 'http://opencv.itseez.com/modules/features2d/doc/common_interfaces_of_descriptor_extractors.html?highlight=descriptorextractor#descriptorextractor%s', None ),
|
||||
'descriptor_extractor_compute' : ( 'http://opencv.itseez.com/modules/features2d/doc/common_interfaces_of_descriptor_extractors.html?highlight=compute#descriptorextractor-compute%s', None ),
|
||||
'surf_descriptor_extractor' : ( 'http://opencv.itseez.com/modules/features2d/doc/common_interfaces_of_descriptor_extractors.html?highlight=surfdescriptorextractor#surfdescriptorextractor%s', None ),
|
||||
'draw_matches' : ( 'http://opencv.itseez.com/modules/features2d/doc/drawing_function_of_keypoints_and_matches.html?highlight=drawmatches#drawmatches%s', None ),
|
||||
'find_homography' : ('http://opencv.itseez.com/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html?highlight=findhomography#findhomography%s', None),
|
||||
'perspective_transform' : ('http://opencv.itseez.com/modules/core/doc/operations_on_arrays.html?highlight=perspectivetransform#perspectivetransform%s', None ),
|
||||
'flann_based_matcher' : ('http://opencv.itseez.com/modules/features2d/doc/common_interfaces_of_descriptor_matchers.html?highlight=flannbasedmatcher#flannbasedmatcher%s', None),
|
||||
'brute_force_matcher' : ('http://opencv.itseez.com/modules/features2d/doc/common_interfaces_of_descriptor_matchers.html?highlight=bruteforcematcher#bruteforcematcher%s', None ),
|
||||
'cascade_classifier' : ('http://opencv.itseez.com/modules/objdetect/doc/cascade_classification.html?highlight=cascadeclassifier#cascadeclassifier%s', None ),
|
||||
'cascade_classifier_load' : ('http://opencv.itseez.com/modules/objdetect/doc/cascade_classification.html?highlight=load#cascadeclassifier-load%s', None ),
|
||||
'cascade_classifier_detect_multiscale' : ('http://opencv.itseez.com/modules/objdetect/doc/cascade_classification.html?highlight=detectmultiscale#cascadeclassifier-detectmultiscale%s', None )
|
||||
'cvt_color': ('http://docs.opencv.org/modules/imgproc/doc/miscellaneous_transformations.html?highlight=cvtcolor#cvtcolor%s', None),
|
||||
'imread': ('http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html?highlight=imread#imread%s', None),
|
||||
'imwrite': ('http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html?highlight=imwrite#imwrite%s', None),
|
||||
'imshow': ('http://docs.opencv.org/modules/highgui/doc/user_interface.html?highlight=imshow#imshow%s', None),
|
||||
'named_window': ('http://docs.opencv.org/modules/highgui/doc/user_interface.html?highlight=namedwindow#namedwindow%s', None),
|
||||
'wait_key': ('http://docs.opencv.org/modules/highgui/doc/user_interface.html?highlight=waitkey#waitkey%s', None),
|
||||
'add_weighted': ('http://docs.opencv.org/modules/core/doc/operations_on_arrays.html?highlight=addweighted#addweighted%s', None),
|
||||
'saturate_cast': ('http://docs.opencv.org/modules/core/doc/utility_and_system_functions_and_macros.html?highlight=saturate_cast#saturate-cast%s', None),
|
||||
'mat_zeros': ('http://docs.opencv.org/modules/core/doc/basic_structures.html?highlight=zeros#mat-zeros%s', None),
|
||||
'convert_to': ('http://docs.opencv.org/modules/core/doc/basic_structures.html#mat-convertto%s', None),
|
||||
'create_trackbar': ('http://docs.opencv.org/modules/highgui/doc/user_interface.html?highlight=createtrackbar#createtrackbar%s', None),
|
||||
'point': ('http://docs.opencv.org/modules/core/doc/basic_structures.html#point%s', None),
|
||||
'scalar': ('http://docs.opencv.org/modules/core/doc/basic_structures.html#scalar%s', None),
|
||||
'line': ('http://docs.opencv.org/modules/core/doc/drawing_functions.html#line%s', None),
|
||||
'ellipse': ('http://docs.opencv.org/modules/core/doc/drawing_functions.html#ellipse%s', None),
|
||||
'rectangle': ('http://docs.opencv.org/modules/core/doc/drawing_functions.html#rectangle%s', None),
|
||||
'circle': ('http://docs.opencv.org/modules/core/doc/drawing_functions.html#circle%s', None),
|
||||
'fill_poly': ('http://docs.opencv.org/modules/core/doc/drawing_functions.html#fillpoly%s', None),
|
||||
'rng': ('http://docs.opencv.org/modules/core/doc/operations_on_arrays.html?highlight=rng#rng%s', None),
|
||||
'put_text': ('http://docs.opencv.org/modules/core/doc/drawing_functions.html#puttext%s', None),
|
||||
'gaussian_blur': ('http://docs.opencv.org/modules/imgproc/doc/filtering.html?highlight=gaussianblur#gaussianblur%s', None),
|
||||
'blur': ('http://docs.opencv.org/modules/imgproc/doc/filtering.html?highlight=blur#blur%s', None),
|
||||
'median_blur': ('http://docs.opencv.org/modules/imgproc/doc/filtering.html?highlight=medianblur#medianblur%s', None),
|
||||
'bilateral_filter': ('http://docs.opencv.org/modules/imgproc/doc/filtering.html?highlight=bilateralfilter#bilateralfilter%s', None),
|
||||
'erode': ('http://docs.opencv.org/modules/imgproc/doc/filtering.html?highlight=erode#erode%s', None),
|
||||
'dilate': ('http://docs.opencv.org/modules/imgproc/doc/filtering.html?highlight=dilate#dilate%s', None),
|
||||
'get_structuring_element': ('http://docs.opencv.org/modules/imgproc/doc/filtering.html?highlight=getstructuringelement#getstructuringelement%s', None),
|
||||
'flood_fill': ( 'http://docs.opencv.org/modules/imgproc/doc/miscellaneous_transformations.html?highlight=floodfill#floodfill%s', None),
|
||||
'morphology_ex': ('http://docs.opencv.org/modules/imgproc/doc/filtering.html?highlight=morphologyex#morphologyex%s', None),
|
||||
'pyr_down': ('http://docs.opencv.org/modules/imgproc/doc/filtering.html?highlight=pyrdown#pyrdown%s', None),
|
||||
'pyr_up': ('http://docs.opencv.org/modules/imgproc/doc/filtering.html?highlight=pyrup#pyrup%s', None),
|
||||
'resize': ('http://docs.opencv.org/modules/imgproc/doc/geometric_transformations.html?highlight=resize#resize%s', None),
|
||||
'threshold': ('http://docs.opencv.org/modules/imgproc/doc/miscellaneous_transformations.html?highlight=threshold#threshold%s', None),
|
||||
'filter2d': ('http://docs.opencv.org/modules/imgproc/doc/filtering.html?highlight=filter2d#filter2d%s', None),
|
||||
'copy_make_border': ('http://docs.opencv.org/modules/imgproc/doc/filtering.html?highlight=copymakeborder#copymakeborder%s', None),
|
||||
'sobel': ('http://docs.opencv.org/modules/imgproc/doc/filtering.html?highlight=sobel#sobel%s', None),
|
||||
'scharr': ('http://docs.opencv.org/modules/imgproc/doc/filtering.html?highlight=scharr#scharr%s', None),
|
||||
'laplacian': ('http://docs.opencv.org/modules/imgproc/doc/filtering.html?highlight=laplacian#laplacian%s', None),
|
||||
'canny': ('http://docs.opencv.org/modules/imgproc/doc/feature_detection.html?highlight=canny#canny%s', None),
|
||||
'copy_to': ('http://docs.opencv.org/modules/core/doc/basic_structures.html?highlight=copyto#mat-copyto%s', None),
|
||||
'hough_lines' : ('http://docs.opencv.org/modules/imgproc/doc/feature_detection.html?highlight=houghlines#houghlines%s', None),
|
||||
'hough_lines_p' : ('http://docs.opencv.org/modules/imgproc/doc/feature_detection.html?highlight=houghlinesp#houghlinesp%s', None),
|
||||
'hough_circles' : ('http://docs.opencv.org/modules/imgproc/doc/feature_detection.html?highlight=houghcircles#houghcircles%s', None),
|
||||
'remap' : ('http://docs.opencv.org/modules/imgproc/doc/geometric_transformations.html?highlight=remap#remap%s', None),
|
||||
'warp_affine' : ('http://docs.opencv.org/modules/imgproc/doc/geometric_transformations.html?highlight=warpaffine#warpaffine%s' , None),
|
||||
'get_rotation_matrix_2d' : ('http://docs.opencv.org/modules/imgproc/doc/geometric_transformations.html?highlight=getrotationmatrix2d#getrotationmatrix2d%s', None),
|
||||
'get_affine_transform' : ('http://docs.opencv.org/modules/imgproc/doc/geometric_transformations.html?highlight=getaffinetransform#getaffinetransform%s', None),
|
||||
'equalize_hist' : ('http://docs.opencv.org/modules/imgproc/doc/histograms.html?highlight=equalizehist#equalizehist%s', None),
|
||||
'split' : ('http://docs.opencv.org/modules/core/doc/operations_on_arrays.html?highlight=split#split%s', None),
|
||||
'calc_hist' : ('http://docs.opencv.org/modules/imgproc/doc/histograms.html?highlight=calchist#calchist%s', None),
|
||||
'normalize' : ('http://docs.opencv.org/modules/core/doc/operations_on_arrays.html?highlight=normalize#normalize%s', None),
|
||||
'match_template' : ('http://docs.opencv.org/modules/imgproc/doc/object_detection.html?highlight=matchtemplate#matchtemplate%s', None),
|
||||
'min_max_loc' : ('http://docs.opencv.org/modules/core/doc/operations_on_arrays.html?highlight=minmaxloc#minmaxloc%s', None),
|
||||
'mix_channels' : ( 'http://docs.opencv.org/modules/core/doc/operations_on_arrays.html?highlight=mixchannels#mixchannels%s', None),
|
||||
'calc_back_project' : ('http://docs.opencv.org/modules/imgproc/doc/histograms.html?highlight=calcbackproject#calcbackproject%s', None),
|
||||
'compare_hist' : ('http://docs.opencv.org/modules/imgproc/doc/histograms.html?highlight=comparehist#comparehist%s', None),
|
||||
'corner_harris' : ('http://docs.opencv.org/modules/imgproc/doc/feature_detection.html?highlight=cornerharris#cornerharris%s', None),
|
||||
'good_features_to_track' : ('http://docs.opencv.org/modules/imgproc/doc/feature_detection.html?highlight=goodfeaturestotrack#goodfeaturestotrack%s', None),
|
||||
'corner_min_eigenval' : ('http://docs.opencv.org/modules/imgproc/doc/feature_detection.html?highlight=cornermineigenval#cornermineigenval%s', None),
|
||||
'corner_eigenvals_and_vecs' : ('http://docs.opencv.org/modules/imgproc/doc/feature_detection.html?highlight=cornereigenvalsandvecs#cornereigenvalsandvecs%s', None),
|
||||
'corner_sub_pix' : ('http://docs.opencv.org/modules/imgproc/doc/feature_detection.html?highlight=cornersubpix#cornersubpix%s', None),
|
||||
'find_contours' : ('http://docs.opencv.org/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html?highlight=findcontours#findcontours%s', None),
|
||||
'convex_hull' : ('http://docs.opencv.org/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html?highlight=convexhull#convexhull%s', None),
|
||||
'draw_contours' : ('http://docs.opencv.org/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html?highlight=drawcontours#drawcontours%s', None),
|
||||
'bounding_rect' : ('http://docs.opencv.org/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html?highlight=boundingrect#boundingrect%s', None),
|
||||
'min_enclosing_circle' : ('http://docs.opencv.org/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html?highlight=minenclosingcircle#minenclosingcircle%s', None),
|
||||
'min_area_rect' : ('http://docs.opencv.org/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html?highlight=minarearect#minarearect%s', None),
|
||||
'fit_ellipse' : ('http://docs.opencv.org/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html?highlight=fitellipse#fitellipse%s', None),
|
||||
'moments' : ('http://docs.opencv.org/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html?highlight=moments#moments%s', None),
|
||||
'contour_area' : ('http://docs.opencv.org/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html?highlight=contourarea#contourarea%s', None),
|
||||
'arc_length' : ('http://docs.opencv.org/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html?highlight=arclength#arclength%s', None),
|
||||
'point_polygon_test' : ('http://docs.opencv.org/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html?highlight=pointpolygontest#pointpolygontest%s', None),
|
||||
'feature_detector' : ( 'http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_feature_detectors.html?highlight=featuredetector#FeatureDetector%s', None),
|
||||
'feature_detector_detect' : ('http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_feature_detectors.html?highlight=detect#featuredetector-detect%s', None ),
|
||||
'surf_feature_detector' : ('http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_feature_detectors.html?highlight=surffeaturedetector#surffeaturedetector%s', None ),
|
||||
'draw_keypoints' : ('http://docs.opencv.org/modules/features2d/doc/drawing_function_of_keypoints_and_matches.html?highlight=drawkeypoints#drawkeypoints%s', None ),
|
||||
'descriptor_extractor': ( 'http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_descriptor_extractors.html?highlight=descriptorextractor#descriptorextractor%s', None ),
|
||||
'descriptor_extractor_compute' : ( 'http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_descriptor_extractors.html?highlight=compute#descriptorextractor-compute%s', None ),
|
||||
'surf_descriptor_extractor' : ( 'http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_descriptor_extractors.html?highlight=surfdescriptorextractor#surfdescriptorextractor%s', None ),
|
||||
'draw_matches' : ( 'http://docs.opencv.org/modules/features2d/doc/drawing_function_of_keypoints_and_matches.html?highlight=drawmatches#drawmatches%s', None ),
|
||||
'find_homography' : ('http://docs.opencv.org/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html?highlight=findhomography#findhomography%s', None),
|
||||
'perspective_transform' : ('http://docs.opencv.org/modules/core/doc/operations_on_arrays.html?highlight=perspectivetransform#perspectivetransform%s', None ),
|
||||
'flann_based_matcher' : ('http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_descriptor_matchers.html?highlight=flannbasedmatcher#flannbasedmatcher%s', None),
|
||||
'brute_force_matcher' : ('http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_descriptor_matchers.html?highlight=bruteforcematcher#bruteforcematcher%s', None ),
|
||||
'cascade_classifier' : ('http://docs.opencv.org/modules/objdetect/doc/cascade_classification.html?highlight=cascadeclassifier#cascadeclassifier%s', None ),
|
||||
'cascade_classifier_load' : ('http://docs.opencv.org/modules/objdetect/doc/cascade_classification.html?highlight=load#cascadeclassifier-load%s', None ),
|
||||
'cascade_classifier_detect_multiscale' : ('http://docs.opencv.org/modules/objdetect/doc/cascade_classification.html?highlight=detectmultiscale#cascadeclassifier-detectmultiscale%s', None )
|
||||
}
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
#/usr/bin/env python
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
ocv domain, a modified copy of sphinx.domains.cpp + shpinx.domains.python.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#/usr/bin/env python
|
||||
#!/usr/bin/env python
|
||||
|
||||
import sys
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#/usr/bin/env python
|
||||
#!/usr/bin/env python
|
||||
|
||||
"""gen_pattern.py
|
||||
To run:
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#/usr/bin/env python
|
||||
#!/usr/bin/env python
|
||||
|
||||
# svgfig.py copyright (C) 2008 Jim Pivarski <jpivarski@gmail.com>
|
||||
#
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
#/usr/bin/env python
|
||||
#!/usr/bin/env python
|
||||
|
||||
import os, sys, re
|
||||
|
||||
|
||||
@@ -12,8 +12,8 @@ For the distortion OpenCV takes into account the radial and tangential factors.
|
||||
|
||||
.. math::
|
||||
|
||||
x_{corrected} = x( 1 + k_1 r^2 + k_2 r^4 + k^3 r^6) \\
|
||||
y_{corrected} = y( 1 + k_1 r^2 + k_2 r^4 + k^3 r^6)
|
||||
x_{corrected} = x( 1 + k_1 r^2 + k_2 r^4 + k_3 r^6) \\
|
||||
y_{corrected} = y( 1 + k_1 r^2 + k_2 r^4 + k_3 r^6)
|
||||
|
||||
So for an old pixel point at :math:`(x,y)` coordinate in the input image, for a corrected output image its position will be :math:`(x_{corrected} y_{corrected})` . The presence of the radial distortion manifests in form of the "barrel" or "fish-eye" effect.
|
||||
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
|
||||
.. note::
|
||||
Unfortunetly we have no tutorials into this section. Nevertheless, our tutorial writting team is working on it. If you have a tutorial suggestion or you have writen yourself a tutorial (or coded a sample code) that you would like to see here please contact us via our :opencv_group:`user group <>`.
|
||||
Unfortunetly we have no tutorials into this section. And you can help us with that, since OpenCV is a community effort. If you have a tutorial suggestion or you have written a tutorial yourself (or coded a sample code) that you would like to see here, please contact follow these instructions: :ref:`howToWriteTutorial` and :how_to_contribute:`How to contribute <>`.
|
||||
@@ -85,7 +85,7 @@ This tutorial code's is shown lines below. You can also download it from `here <
|
||||
std::vector< DMatch > good_matches;
|
||||
|
||||
for( int i = 0; i < descriptors_1.rows; i++ )
|
||||
{ if( matches[i].distance < 2*min_dist )
|
||||
{ if( matches[i].distance <= 2*min_dist )
|
||||
{ good_matches.push_back( matches[i]); }
|
||||
}
|
||||
|
||||
@@ -127,6 +127,3 @@ Result
|
||||
.. image:: images/Feature_FlannMatcher_Keypoints_Result.jpg
|
||||
:align: center
|
||||
:height: 250pt
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -62,7 +62,7 @@ The GPU has its own memory. When you read data from the hard drive with OpenCV i
|
||||
|
||||
I1 = gI1; // Download, gI1.download(I1) will work too
|
||||
|
||||
Once you have your data up in the GPU memory you may call GPU enabled functions of OpenCV. Most of the functions keep the same name just as on the CPU, with the difference that they only accept *GpuMat* inputs. A full list of these you will find in the documentation: `online here <http://opencv.itseez.com/modules/gpu/doc/gpu.html>`_ or the OpenCV reference manual that comes with the source code.
|
||||
Once you have your data up in the GPU memory you may call GPU enabled functions of OpenCV. Most of the functions keep the same name just as on the CPU, with the difference that they only accept *GpuMat* inputs. A full list of these you will find in the documentation: `online here <http://docs.opencv.org/modules/gpu/doc/gpu.html>`_ or the OpenCV reference manual that comes with the source code.
|
||||
|
||||
Another thing to keep in mind is that not for all channel numbers you can make efficient algorithms on the GPU. Generally, I found that the input images for the GPU images need to be either one or four channel ones and one of the char or float type for the item sizes. No double support on the GPU, sorry. Passing other types of objects for some functions will result in an exception thrown, and an error message on the error output. The documentation details in most of the places the types accepted for the inputs. If you have three channel images as an input you can do two things: either adds a new channel (and use char elements) or split up the image and call the function for each image. The first one isn't really recommended as you waste memory.
|
||||
|
||||
|
||||
@@ -48,10 +48,10 @@ The structure of package contents looks as follows:
|
||||
|
||||
::
|
||||
|
||||
OpenCV-2.4.5-android-sdk
|
||||
OpenCV-2.4.6-android-sdk
|
||||
|_ apk
|
||||
| |_ OpenCV_2.4.5_binary_pack_armv7a.apk
|
||||
| |_ OpenCV_2.4.5_Manager_2.7_XXX.apk
|
||||
| |_ OpenCV_2.4.6_binary_pack_armv7a.apk
|
||||
| |_ OpenCV_2.4.6_Manager_2.9_XXX.apk
|
||||
|
|
||||
|_ doc
|
||||
|_ samples
|
||||
@@ -98,7 +98,7 @@ The structure of package contents looks as follows:
|
||||
* :file:`doc` folder contains various OpenCV documentation in PDF format.
|
||||
It's also available online at http://docs.opencv.org.
|
||||
|
||||
.. note:: The most recent docs (nightly build) are at http://docs.opencv.org/trunk/.
|
||||
.. note:: The most recent docs (nightly build) are at http://docs.opencv.org/2.4.
|
||||
Generally, it's more up-to-date, but can refer to not-yet-released functionality.
|
||||
|
||||
.. TODO: I'm not sure that this is the best place to talk about OpenCV Manager
|
||||
@@ -157,10 +157,10 @@ Get the OpenCV4Android SDK
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
unzip ~/Downloads/OpenCV-2.4.5-android-sdk.zip
|
||||
unzip ~/Downloads/OpenCV-2.4.6-android-sdk.zip
|
||||
|
||||
.. |opencv_android_bin_pack| replace:: :file:`OpenCV-2.4.5-android-sdk.zip`
|
||||
.. _opencv_android_bin_pack_url: http://sourceforge.net/projects/opencvlibrary/files/opencv-android/2.4.5/OpenCV-2.4.5-android-sdk.zip/download
|
||||
.. |opencv_android_bin_pack| replace:: :file:`OpenCV-2.4.6-android-sdk.zip`
|
||||
.. _opencv_android_bin_pack_url: http://sourceforge.net/projects/opencvlibrary/files/opencv-android/2.4.6/OpenCV-2.4.6-android-sdk.zip/download
|
||||
.. |opencv_android_bin_pack_url| replace:: |opencv_android_bin_pack|
|
||||
.. |seven_zip| replace:: 7-Zip
|
||||
.. _seven_zip: http://www.7-zip.org/
|
||||
@@ -295,7 +295,7 @@ Well, running samples from Eclipse is very simple:
|
||||
.. code-block:: sh
|
||||
:linenos:
|
||||
|
||||
<Android SDK path>/platform-tools/adb install <OpenCV4Android SDK path>/apk/OpenCV_2.4.5_Manager_2.7_armv7a-neon.apk
|
||||
<Android SDK path>/platform-tools/adb install <OpenCV4Android SDK path>/apk/OpenCV_2.4.6_Manager_2.9_armv7a-neon.apk
|
||||
|
||||
.. note:: ``armeabi``, ``armv7a-neon``, ``arm7a-neon-android8``, ``mips`` and ``x86`` stand for
|
||||
platform targets:
|
||||
|
||||
@@ -55,14 +55,14 @@ Manager to access OpenCV libraries externally installed in the target system.
|
||||
:guilabel:`File -> Import -> Existing project in your workspace`.
|
||||
|
||||
Press :guilabel:`Browse` button and locate OpenCV4Android SDK
|
||||
(:file:`OpenCV-2.4.5-android-sdk/sdk`).
|
||||
(:file:`OpenCV-2.4.6-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.5``.
|
||||
:guilabel:`Project -> Properties -> Android -> Library -> Add` select ``OpenCV Library - 2.4.6``.
|
||||
|
||||
.. image:: images/eclipse_opencv_dependency1.png
|
||||
:alt: Add dependency from OpenCV library
|
||||
@@ -101,7 +101,7 @@ See the "15-puzzle" OpenCV sample for details.
|
||||
public void onResume()
|
||||
{
|
||||
super.onResume();
|
||||
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_5, this, mLoaderCallback);
|
||||
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_6, this, mLoaderCallback);
|
||||
}
|
||||
|
||||
...
|
||||
@@ -128,27 +128,27 @@ 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`,
|
||||
press :guilabel:`Browse` button and select OpenCV SDK path
|
||||
(:file:`OpenCV-2.4.5-android-sdk/sdk`).
|
||||
(:file:`OpenCV-2.4.6-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.5``;
|
||||
:guilabel:`Project -> Properties -> Android -> Library -> Add` select ``OpenCV Library - 2.4.6``;
|
||||
|
||||
.. 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:`<OpenCV-2.4.5-android-sdk>/sdk/native/libs/<target_arch>` to your
|
||||
native libs from :file:`<OpenCV-2.4.6-android-sdk>/sdk/native/libs/<target_arch>` to your
|
||||
project directory to folder :file:`libs/<target_arch>`.
|
||||
|
||||
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.5-android-sdk/sdk/native/jni/OpenCV.mk"``
|
||||
``"include path_to_OpenCV-2.4.6-android-sdk/sdk/native/jni/OpenCV.mk"``
|
||||
|
||||
.. code-block:: make
|
||||
:linenos:
|
||||
@@ -221,7 +221,7 @@ taken:
|
||||
|
||||
.. code-block:: make
|
||||
|
||||
include C:\Work\OpenCV4Android\OpenCV-2.4.5-android-sdk\sdk\native\jni\OpenCV.mk
|
||||
include C:\Work\OpenCV4Android\OpenCV-2.4.6-android-sdk\sdk\native\jni\OpenCV.mk
|
||||
|
||||
Should be inserted into the :file:`jni/Android.mk` file **after** this line:
|
||||
|
||||
@@ -379,7 +379,7 @@ result.
|
||||
public void onResume()
|
||||
{
|
||||
super.onResume();
|
||||
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3, this, mLoaderCallback);
|
||||
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_6, this, mLoaderCallback);
|
||||
}
|
||||
|
||||
#. Defines that your activity implements ``CvViewFrameListener2`` interface and fix activity related
|
||||
|
||||
@@ -1,9 +1,22 @@
|
||||
.. _howToWriteTutorial:
|
||||
|
||||
How to write a tutorial for OpenCV?
|
||||
***********************************
|
||||
How to write a tutorial for OpenCV
|
||||
**********************************
|
||||
|
||||
Okay, so assume you have just finished a project of yours implementing something based on OpenCV and you want to present/share it with the community. Luckily, OpenCV is an *open source project*. This means that in theory anyone has access to the full source code and may extend it. While making a robust and practical library (like OpenCV) is great, the success of a library also depends on how user friendly it is. To improve on this aspect, the OpenCV team has already been listening to user feedback from its :opencv_group:`Yahoo user group <>` and by making samples you can find in the source directories sample folder. The addition of the tutorials (in both online and PDF format) is an extension of these efforts.
|
||||
Okay, so assume you have just finished a project of yours implementing something
|
||||
based on OpenCV and you want to present/share it with the community. Luckily, OpenCV
|
||||
is an *open source project*. This means that anyone has access to the full source
|
||||
code and may propose extensions. And a good tutorial is a valuable addition to the
|
||||
library! Please read instructions on contribution process here:
|
||||
http://opencv.org/contribute.html. You may also find this page helpful:
|
||||
:how_to_contribute:`How to contribute <>`.
|
||||
|
||||
While making a robust and practical library (like OpenCV) is great, the success of a
|
||||
library also depends on how user friendly it is. To improve on this aspect, the
|
||||
OpenCV team has already been listening to user feedback at :opencv_qa:`OpenCV Q&A
|
||||
forum <>` and by making samples you can find in the source directories
|
||||
:file:`samples` folder. The addition of the tutorials (in both online and PDF format)
|
||||
is an extension of these efforts.
|
||||
|
||||
Goal
|
||||
====
|
||||
@@ -15,7 +28,17 @@ Goal
|
||||
|
||||
.. _Sphinx: http://sphinx.pocoo.org/
|
||||
|
||||
The tutorials are just as an important part of the library as the implementation of those crafty data structures and algorithms you can find in OpenCV. Therefore, the source codes for the tutorials are part of the library. And yes, I meant source codes. The reason for this formulation is that the tutorials are written by using the |Sphinx|_ documentation generation system. This is based on the popular python documentation system called |reST|_ (reST). ReStructuredText is a really neat language that by using a few simple conventions (indentation, directives) and emulating old school e-mail writing techniques (text only) tries to offer a simple way to create and edit documents. Sphinx extends this with some new features and creates the resulting document in both HTML (for web) and PDF (for offline usage) format.
|
||||
The tutorials are just as an important part of the library as the implementation of
|
||||
those crafty data structures and algorithms you can find in OpenCV. Therefore, the
|
||||
source codes for the tutorials are part of the library. And yes, I meant source
|
||||
codes. The reason for this formulation is that the tutorials are written by using the
|
||||
|Sphinx|_ documentation generation system. This is based on the popular Python
|
||||
documentation system called |reST|_ (reST). ReStructuredText is a really neat
|
||||
language that by using a few simple conventions (indentation, directives) and
|
||||
emulating old school email writing techniques (text only) tries to offer a simple
|
||||
way to create and edit documents. Sphinx extends this with some new features and
|
||||
creates the resulting document in both HTML (for web) and PDF (for offline usage)
|
||||
format.
|
||||
|
||||
Usually, an OpenCV tutorial has the following parts:
|
||||
|
||||
@@ -36,14 +59,17 @@ Usually, an OpenCV tutorial has the following parts:
|
||||
#. For more complex demonstrations you may create a video.
|
||||
|
||||
As you can see you will need at least some basic knowledge of the *reST* system in order to complete the task at hand with success. However, don't worry *reST* (and *Sphinx*) was made with simplicity in mind. It is easy to grasp its basics. I found that the `OpenAlea documentations introduction on this subject <http://openalea.gforge.inria.fr/doc/openalea/doc/_build/html/source/tutorial/rest_syntax.html>`_ (or the `Thomas Cokelaer one <http://thomas-cokelaer.info/tutorials/sphinx/rest_syntax.html>`_ ) should enough for this. If for some directive or feature you need a more in-depth description look it up in the official |reST|_ help files or at the |Sphinx|_ documentation.
|
||||
|
||||
In our world achieving some tasks is possible in multiple ways. However, some of the roads to take may have obvious or hidden advantages over others. Then again, in some other cases it may come down to just simple user preference. Here, I'll present how I decided to write the tutorials, based on my personal experience. If for some of them you know a better solution and you can back it up feel free to use that. I've nothing against it, as long as it gets the job done in an elegant fashion.
|
||||
|
||||
Now the best would be if you could make the integration yourself. For this you need first to have the source code. I recommend following the guides for your operating system on acquiring OpenCV sources. For Linux users look :ref:`here <Linux-Installation>` and for :ref:`Windows here <Windows_Installation>`. You must also install python and sphinx with its dependencies in order to be able to build the documentation.
|
||||
Once you have downloaded the repository to your hard drive you can take a look in the OpenCV directory to make sure you have both the samples and doc folder present. Anyone may download the trunk source files from :file:`git://code.opencv.org/opencv.git` . Nevertheless, not everyone has upload (commit/submit) rights. This is to protect the integrity of the library. If you plan doing more than one tutorial, and would like to have an account with commit user rights you should first register an account at http://code.opencv.org/ and then contact dr. Gary Bradski at -delete-bradski@-delete-willowgarage.com. Otherwise, you can just send the resulting files to us via the :opencv_group:`Yahoo user group <>` or to me at -delete-bernat@-delete-primeranks.net and I'll add it. If you have questions, suggestions or constructive critics I will gladly listen to them. If you send it to the OpenCV group please tag its subject with a **[Tutorial]** entry.
|
||||
|
||||
Once you have downloaded the repository to your hard drive you can take a look in the OpenCV directory to make sure you have both the samples and doc folder present. Anyone may download the latest source files from :file:`git://github.com/Itseez/opencv.git` . Nevertheless, not everyone has upload (commit/submit) rights. This is to protect the integrity of the library. If you plan doing more than one tutorial, and would like to have an account with commit user rights you should first register an account at http://code.opencv.org/ and then contact OpenCV administrator -delete-admin@-delete-opencv.org. Otherwise, you can just send the resulting files to us at -delete-admin@-delete-opencv.org and we'll add it.
|
||||
|
||||
Format the Source Code
|
||||
======================
|
||||
|
||||
Before I start this let it be clear: the main goal is to have a working sample code. However, for your tutorial to be of a top notch quality you should follow a few guide lines I am going to present here. In case you have an application by using the older interface (with *IplImage*, *CVMat*, *cvLoadImage* and such) consider migrating it to the new C++ interface. The tutorials are intended to be an up to date help for our users. And as of OpenCV 2 the OpenCV emphasis on using the less error prone and clearer C++ interface. Therefore, if possible please convert your code to the C++ interface. For this it may help to read the :ref:`InteroperabilityWithOpenCV1` tutorial. However, once you have an OpenCV 2 working code, then you should make your source code snippet as easy to read as possible. Here're a couple of advices for this:
|
||||
Before I start this let it be clear: the main goal is to have a working sample code. However, for your tutorial to be of a top notch quality you should follow a few guide lines I am going to present here. In case you have an application by using the older interface (with *IplImage*, *cvMat*, *cvLoadImage* and such) consider migrating it to the new C++ interface. The tutorials are intended to be an up to date help for our users. And as of OpenCV 2 the OpenCV emphasis on using the less error prone and clearer C++ interface. Therefore, if possible please convert your code to the C++ interface. For this it may help to read the :ref:`InteroperabilityWithOpenCV1` tutorial. However, once you have an OpenCV 2 working code, then you should make your source code snippet as easy to read as possible. Here're a couple of advices for this:
|
||||
|
||||
.. container:: enumeratevisibleitemswithsquare
|
||||
|
||||
@@ -102,6 +128,7 @@ Navigate to the :file:`opencv/doc/tutorials/section/table_of_content_section` fo
|
||||
\pagebreak
|
||||
|
||||
The first line is a reference to the section title in the reST system. The section title will be a link and you may refer to it via the ``:ref:`` directive. The *include* directive imports the template text from the definitions directories *noContent.rst* file. *Sphinx* does not creates the PDF from scratch. It does this by first creating a latex file. Then creates the PDF from the latex file. With the *raw* directive you can directly add to this output commands. Its unique argument is for what kind of output to add the content of the directive. For the PDFs it may happen that multiple sections will overlap on a single page. To avoid this at the end of the TOC we add a *pagebreak* latex command, that hints to the LATEX system that the next line should be on a new page.
|
||||
|
||||
If you have one of this, try to transform it to the following form:
|
||||
|
||||
.. include:: ../../definitions/tocDefinitions.rst
|
||||
@@ -157,6 +184,7 @@ Until the *raw* directive what you can see is a TOC tree entry. Here's how a TOC
|
||||
:width: 90pt
|
||||
|
||||
As you can see we have an image to the left and a description box to the right. To create two boxes we use a table with two columns and a single row. In the left column is the image and in the right one the description. However, the image directive is way too long to fit in a column. Therefore, we need to use the substitution definition system. We add this definition after the TOC tree. All images for the TOC tree are to be put in the images folder near its |reST|_ file. We use the point measurement system because we are also creating PDFs. PDFs are printable documents, where there is no such thing that pixels (px), just points (pt). And while generally space is no problem for web pages (we have monitors with **huge** resolutions) the size of the paper (A4 or letter) is constant and will be for a long time in the future. Therefore, size constrains come in play more like for the PDF, than the generated HTML code.
|
||||
|
||||
Now your images should be as small as possible, while still offering the intended information for the user. Remember that the tutorial will become part of the OpenCV source code. If you add large images (that manifest in form of large image size) it will just increase the size of the repository pointlessly. If someone wants to download it later, its download time will be that much longer. Not to mention the larger PDF size for the tutorials and the longer load time for the web pages. In terms of pixels a TOC image should not be larger than 120 X 120 pixels. Resize your images if they are larger!
|
||||
|
||||
.. note:: If you add a larger image and specify a smaller image size, *Sphinx* will not resize that. At build time will add the full size image and the resize will be done by your browser after the image is loaded. A 120 X 120 image is somewhere below 10KB. If you add a 110KB image, you have just pointlessly added a 100KB extra data to transfer over the internet for every user!
|
||||
@@ -189,7 +217,9 @@ Now before each TOC entry you need to add the three lines of:
|
||||
.. cssclass:: toctableopencv
|
||||
|
||||
The plus sign (+) is to enumerate tutorials by using bullet points. So for every TOC entry we have a corresponding bullet point represented by the +. Sphinx is highly indenting sensitive. Indentation is used to express from which point until to which point does a construction last. Un-indentation means end of that construction. So to keep all the bullet points to the same group the following TOC entries (until the next +) should be indented by two spaces.
|
||||
|
||||
Here, I should also mention that **always** prefer using spaces instead of tabs. Working with only spaces makes possible that if we both use monotype fonts we will see the same thing. Tab size is text editor dependent and as should be avoided. *Sphinx* translates all tabs into 8 spaces before interpreting it.
|
||||
|
||||
It turns out that the automatic formatting of both the HTML and PDF(LATEX) system messes up our tables. Therefore, we need to help them out a little. For the PDF generation we add the ``.. tabularcolumns:: m{100pt} m{300pt}`` directive. This means that the first column should be 100 points wide and middle aligned. For the HTML look we simply name the following table of a *toctableopencv* class type. Then, we can modify the look of the table by modifying the CSS of our web page. The CSS definitions go into the :file:`opencv/doc/_themes/blue/static/default.css_t` file.
|
||||
|
||||
.. code-block:: css
|
||||
@@ -221,12 +251,14 @@ However, you should not need to modify this. Just add these three lines (plus ke
|
||||
../mat - the basic image container/mat - the basic image container
|
||||
|
||||
The page break entry comes for separating sections and should be only one in a TOC tree |reST|_ file. Finally, at the end of the TOC tree we need to add our tutorial to the *Sphinx* TOC tree system. *Sphinx* will generate from this the previous-next-up information for the HTML file and add items to the PDF according to the order here. By default this TOC tree directive generates a simple table of contents. However, we already created a fancy looking one so we no longer need this basic one. Therefore, we add the *hidden* option to do not show it.
|
||||
|
||||
The path is of a relative type. We step back in the file system and then go into the :file:`mat - the basic image container` directory for the :file:`mat - the basic image container.rst` file. Putting out the *rst* extension for the file is optional.
|
||||
|
||||
Write the tutorial
|
||||
==================
|
||||
|
||||
Create a folder with the name of your tutorial. Preferably, use small letters only. Then create a text file in this folder with *rst* extension and the same name. If you have images for the tutorial create an :file:`images` folder and add your images there. When creating your images follow the guidelines described in the previous part!
|
||||
|
||||
Now here's our recommendation for the structure of the tutorial (although, remember that this is not carved in the stone; if you have a better idea, use it!):
|
||||
|
||||
.. container:: enumeratevisibleitemswithsquare
|
||||
@@ -278,13 +310,13 @@ Now here's our recommendation for the structure of the tutorial (although, remem
|
||||
|
||||
After the directive you specify a relative path to the file from what to import. It has four options: the language to use, if you add the ``:linenos:`` the line numbers will be shown, you can specify the tab size with the ``:tab-width:`` and you do not need to load the whole file, you can show just the important lines. Use the *lines* option to do not show redundant information (such as the *help* function). Here basically you specify ranges, if the second range line number is missing than that means that until the end of the file. The ranges specified here do no need to be in an ascending order, you may even reorganize the structure of how you want to show your sample inside the tutorial.
|
||||
+ The tutorial. Well here goes the explanation for why and what have you used. Try to be short, clear, concise and yet a thorough one. There's no magic formula. Look into a few already made tutorials and start out from there. Try to mix sample OpenCV code with your explanations. If with words is hard to describe something do not hesitate to add in a reasonable size image, to overcome this issue.
|
||||
When you present OpenCV functionality it's a good idea to give a link to the used OpenCV data structure or function. Because the OpenCV tutorials and reference manual are in separate PDF files it is not possible to make this link work for the PDF format. Therefore, we use here only web page links to the **opencv.itseez.com** website. The OpenCV functions and data structures may be used for multiple tasks. Nevertheless, we want to avoid that every users creates its own reference to a commonly used function. So for this we use the global link collection of *Sphinx*. This is defined in the file:`opencv/doc/conf.py` configuration file. Open it and go all the way down to the last entry:
|
||||
When you present OpenCV functionality it's a good idea to give a link to the used OpenCV data structure or function. Because the OpenCV tutorials and reference manual are in separate PDF files it is not possible to make this link work for the PDF format. Therefore, we use here only web page links to the http://docs.opencv.org website. The OpenCV functions and data structures may be used for multiple tasks. Nevertheless, we want to avoid that every users creates its own reference to a commonly used function. So for this we use the global link collection of *Sphinx*. This is defined in the file:`opencv/doc/conf.py` configuration file. Open it and go all the way down to the last entry:
|
||||
|
||||
.. code-block:: py
|
||||
|
||||
# ---- External links for tutorials -----------------
|
||||
extlinks = {
|
||||
'hgvideo' : ('http://opencv.itseez.com/modules/highgui/doc/reading_and_writing_images_and_video.html#%s', None)
|
||||
'hgvideo' : ('http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html#%s', None)
|
||||
}
|
||||
|
||||
In short here we defined a new **hgvideo** directive that refers to an external webpage link. Its usage is:
|
||||
@@ -293,7 +325,7 @@ Now here's our recommendation for the structure of the tutorial (although, remem
|
||||
|
||||
A sample function of the highgui modules image write and read page is the :hgvideo:`imread() function <imread>`.
|
||||
|
||||
Which turns to: A sample function of the highgui modules image write and read page is the :hgvideo:`imread() function <imread>`. The argument you give between the <> will be put in place of the ``%s`` in the upper definition, and as the link will anchor to the correct function. To find out the anchor of a given function just open up a web page, search for the function and click on it. In the address bar it should appear like: ``http://opencv.itseez.com/modules/highgui/doc/reading_and_writing_images_and_video.html#imread`` . Look here for the name of the directives for each page of the OpenCV reference manual. If none present for one of them feel free to add one for it.
|
||||
Which turns to: A sample function of the highgui modules image write and read page is the :hgvideo:`imread() function <imread>`. The argument you give between the <> will be put in place of the ``%s`` in the upper definition, and as the link will anchor to the correct function. To find out the anchor of a given function just open up a web page, search for the function and click on it. In the address bar it should appear like: ``http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html#imread`` . Look here for the name of the directives for each page of the OpenCV reference manual. If none present for one of them feel free to add one for it.
|
||||
For formulas you can add LATEX code that will translate in the web pages into images. You do this by using the *math* directive. A usage tip:
|
||||
|
||||
.. code-block:: latex
|
||||
@@ -339,6 +371,17 @@ Now here's our recommendation for the structure of the tutorial (although, remem
|
||||
Take home the pride and joy of a job well done!
|
||||
===============================================
|
||||
|
||||
Once you are done contact me or dr. Gary Bradski with the tutorial. We may submit the tutorial ourselves to the trunk branch of our repository or ask you to do so.
|
||||
Now, to see your work **live** you may need to wait some time. The PDFs are updated usually at the launch of a new OpenCV version. The web pages are a little more diverse. They are automatically rebuilt in each evening. However, the **opencv.itseez.com** website contains only the most recent **stable branch** of OpenCV. Currently this is 2.3. When we add something new (like a tutorial) that first goes to the **trunk branch** of our repository. A build of this you may find on the **opencv.itseez.com/trunk** website. Although, we try to make a build every night occasionally we might freeze any of the branches to fix upcoming issues. During this it may take a little longer to see your work *live*, however if you submited it, be sure that eventually it will show up.
|
||||
If you have any questions or advices relating to this tutorial you can contact me at -delete-bernat@-delete-primeranks.net. Of course, delete the -delete- parts of that e-mail address.
|
||||
Once you are done please make a GitHub pull request with the tutorial. Now, to see
|
||||
your work **live** you may need to wait some time. The PDFs are updated usually at
|
||||
the launch of a new OpenCV version. The web pages are a little more diverse. They are
|
||||
automatically rebuilt nightly. Currently we use ``2.4`` and ``master`` branches for
|
||||
daily builds. So, if your pull request was merged to any of these branches, your
|
||||
material will be published at `docs.opencv.org/2.4 <http:/docs.opencv.org/2.4>`_ or
|
||||
`docs.opencv.org/master <http:/docs.opencv.org/master>`_ correspondingly. Everything
|
||||
that was added to ``2.4`` is merged to ``master`` branch every week. Although, we try
|
||||
to make a build every night, occasionally we might freeze any of the branches to fix
|
||||
upcoming issues. During this it may take a little longer to see your work online,
|
||||
however if you submitted it, be sure that eventually it will show up.
|
||||
|
||||
If you have any questions or advices relating to this tutorial you can contact us at
|
||||
-delete-admin@-delete-opencv.org (delete the -delete- parts of that email address).
|
||||
@@ -37,7 +37,7 @@ Building OpenCV from Source, using CMake and Command Line
|
||||
.. code-block:: bash
|
||||
|
||||
cd ~/<my_working_directory>
|
||||
python opencv/ios/build_framework.py ios
|
||||
python opencv/platforms/ios/build_framework.py ios
|
||||
|
||||
If everything's fine, a few minutes later you will get ~/<my_working_directory>/ios/opencv2.framework. You can add this framework to your Xcode projects.
|
||||
|
||||
|
||||
@@ -292,7 +292,7 @@ Building the library
|
||||
|
||||
This will create an *Install* directory inside the *Build* one collecting all the built binaries into a single place. Use this only after you built both the *Release* and *Debug* versions.
|
||||
|
||||
To test your build just go into the :file:`Build/bin/Debug` or :file:`Build/bin/Release` directory and start a couple of applications like the *contours.exe*. If they run, you are done. Otherwise, something definitely went awfully wrong. In this case you should contact us via our :opencv_group:`user group <>`.
|
||||
To test your build just go into the :file:`Build/bin/Debug` or :file:`Build/bin/Release` directory and start a couple of applications like the *contours.exe*. If they run, you are done. Otherwise, something definitely went awfully wrong. In this case you should contact us at our :opencv_qa:`Q&A forum <>`.
|
||||
If everything is okay the *contours.exe* output should resemble the following image (if built with Qt support):
|
||||
|
||||
.. image:: images/WindowsQtContoursOutput.png
|
||||
|
||||
+1
-1
@@ -86,7 +86,7 @@ The names of the libraries are as follow:
|
||||
|
||||
opencv_(The Name of the module)(The version Number of the library you use)d.lib
|
||||
|
||||
A full list, for the currently latest trunk version would contain:
|
||||
A full list, for the latest version would contain:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
|
||||
@@ -129,7 +129,7 @@ Explanation
|
||||
|
||||
3. **Train the SVM**
|
||||
|
||||
We call the method `CvSVM::train <http://opencv.itseez.com/modules/ml/doc/support_vector_machines.html#cvsvm-train>`_ to build the SVM model.
|
||||
We call the method `CvSVM::train <http://docs.opencv.org/modules/ml/doc/support_vector_machines.html#cvsvm-train>`_ to build the SVM model.
|
||||
|
||||
.. code-block:: cpp
|
||||
|
||||
|
||||
+1
-1
@@ -10,7 +10,7 @@ Welcome to opencv documentation!
|
||||
:maxdepth: 2
|
||||
|
||||
modules/refman.rst
|
||||
android/refman.rst
|
||||
platforms/android/refman.rst
|
||||
doc/user_guide/user_guide.rst
|
||||
doc/tutorials/tutorials.rst
|
||||
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
cmake -GXcode -DCMAKE_TOOLCHAIN_FILE=../opencv/ios/cmake/Toolchains/Toolchain-iPhoneOS_Xcode.cmake -DCMAKE_INSTALL_PREFIX=../OpenCV_iPhoneOS ../opencv
|
||||
@@ -1 +0,0 @@
|
||||
cmake -GXcode -DCMAKE_TOOLCHAIN_FILE=../opencv/ios/cmake/Toolchains/Toolchain-iPhoneSimulator_Xcode.cmake -DCMAKE_INSTALL_PREFIX=../OpenCV_iPhoneSimulator ../opencv
|
||||
@@ -1,15 +0,0 @@
|
||||
Assuming that your build directory is on the same level that opencv source,
|
||||
From the build directory run
|
||||
../opencv/ios/configure-device_xcode.sh
|
||||
or
|
||||
../opencv/ios/configure-simulator_xcode.sh
|
||||
|
||||
Then from the same folder invoke
|
||||
|
||||
xcodebuild -sdk iphoneos -configuration Release -target ALL_BUILD
|
||||
xcodebuild -sdk iphoneos -configuration Release -target install install
|
||||
|
||||
or
|
||||
|
||||
xcodebuild -sdk iphonesimulator -configuration Release -target ALL_BUILD
|
||||
xcodebuild -sdk iphonesimulator -configuration Release -target install install
|
||||
@@ -2,4 +2,4 @@ if(NOT OPENCV_MODULES_PATH)
|
||||
set(OPENCV_MODULES_PATH "${CMAKE_CURRENT_SOURCE_DIR}")
|
||||
endif()
|
||||
|
||||
ocv_glob_modules(${OPENCV_MODULES_PATH})
|
||||
ocv_glob_modules(${OPENCV_MODULES_PATH} ${OPENCV_EXTRA_MODULES_PATH})
|
||||
|
||||
@@ -6,7 +6,7 @@ set(the_description "Auxiliary module for Android native camera support")
|
||||
set(OPENCV_MODULE_TYPE STATIC)
|
||||
|
||||
ocv_define_module(androidcamera INTERNAL opencv_core log dl)
|
||||
ocv_include_directories("${CMAKE_CURRENT_SOURCE_DIR}/camera_wrapper" "${OpenCV_SOURCE_DIR}/android/service/engine/jni/include")
|
||||
ocv_include_directories("${CMAKE_CURRENT_SOURCE_DIR}/camera_wrapper" "${OpenCV_SOURCE_DIR}/platforms/android/service/engine/jni/include")
|
||||
|
||||
# Android source tree for native camera
|
||||
SET (ANDROID_SOURCE_TREE "ANDROID_SOURCE_TREE-NOTFOUND" CACHE PATH
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
#if !defined(ANDROID_r2_2_0) && !defined(ANDROID_r2_3_3) && !defined(ANDROID_r3_0_1) && !defined(ANDROID_r4_0_0) && !defined(ANDROID_r4_0_3) && !defined(ANDROID_r4_1_1) && !defined(ANDROID_r4_2_0)
|
||||
# error Building camera wrapper for your version of Android is not supported by OpenCV. You need to modify OpenCV sources in order to compile camera wrapper for your version of Android.
|
||||
#if !defined(ANDROID_r2_2_0) && !defined(ANDROID_r2_3_3) && !defined(ANDROID_r3_0_1) && \
|
||||
!defined(ANDROID_r4_0_0) && !defined(ANDROID_r4_0_3) && !defined(ANDROID_r4_1_1) && \
|
||||
!defined(ANDROID_r4_2_0) && !defined(ANDROID_r4_3_0)
|
||||
# error Building camera wrapper for your version of Android is not supported by OpenCV.\
|
||||
You need to modify OpenCV sources in order to compile camera wrapper for your version of Android.
|
||||
#endif
|
||||
|
||||
#include <camera/Camera.h>
|
||||
@@ -16,17 +19,18 @@
|
||||
//Include SurfaceTexture.h file with the SurfaceTexture class
|
||||
# include <gui/SurfaceTexture.h>
|
||||
# define MAGIC_OPENCV_TEXTURE_ID (0x10)
|
||||
#else // defined(ANDROID_r3_0_1) || defined(ANDROID_r4_0_0) || defined(ANDROID_r4_0_3)
|
||||
//TODO: This is either 2.2 or 2.3. Include the headers for ISurface.h access
|
||||
#if defined(ANDROID_r4_1_1) || defined(ANDROID_r4_2_0)
|
||||
#include <gui/ISurface.h>
|
||||
#include <gui/BufferQueue.h>
|
||||
#elif defined(ANDROID_r4_1_1) || defined(ANDROID_r4_2_0)
|
||||
# include <gui/ISurface.h>
|
||||
# include <gui/BufferQueue.h>
|
||||
#elif defined(ANDROID_r4_3_0)
|
||||
# include <gui/IGraphicBufferProducer.h>
|
||||
# include <gui/BufferQueue.h>
|
||||
#else
|
||||
# include <surfaceflinger/ISurface.h>
|
||||
#endif // defined(ANDROID_r4_1_1)
|
||||
#endif // defined(ANDROID_r3_0_1) || defined(ANDROID_r4_0_0) || defined(ANDROID_r4_0_3)
|
||||
#endif
|
||||
|
||||
#include <string>
|
||||
#include <fstream>
|
||||
|
||||
//undef logging macro from /system/core/libcutils/loghack.h
|
||||
#ifdef LOGD
|
||||
@@ -45,7 +49,6 @@
|
||||
# undef LOGE
|
||||
#endif
|
||||
|
||||
|
||||
// LOGGING
|
||||
#include <android/log.h>
|
||||
#define CAMERA_LOG_TAG "OpenCV_NativeCamera"
|
||||
@@ -60,7 +63,7 @@ using namespace android;
|
||||
|
||||
void debugShowFPS();
|
||||
|
||||
#if defined(ANDROID_r4_1_1) || defined(ANDROID_r4_2_0)
|
||||
#if defined(ANDROID_r4_1_1) || defined(ANDROID_r4_2_0) || defined(ANDROID_r4_3_0)
|
||||
class ConsumerListenerStub: public BufferQueue::ConsumerListener
|
||||
{
|
||||
public:
|
||||
@@ -73,6 +76,29 @@ public:
|
||||
};
|
||||
#endif
|
||||
|
||||
std::string getProcessName()
|
||||
{
|
||||
std::string result;
|
||||
std::ifstream f;
|
||||
|
||||
f.open("/proc/self/cmdline");
|
||||
if (f.is_open())
|
||||
{
|
||||
std::string fullPath;
|
||||
std::getline(f, fullPath, '\0');
|
||||
if (!fullPath.empty())
|
||||
{
|
||||
int i = fullPath.size()-1;
|
||||
while ((i >= 0) && (fullPath[i] != '/')) i--;
|
||||
result = fullPath.substr(i+1, std::string::npos);
|
||||
}
|
||||
}
|
||||
|
||||
f.close();
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
void debugShowFPS()
|
||||
{
|
||||
static int mFrameCount = 0;
|
||||
@@ -280,7 +306,7 @@ public:
|
||||
}
|
||||
|
||||
virtual void postData(int32_t msgType, const sp<IMemory>& dataPtr
|
||||
#if defined(ANDROID_r4_0_0) || defined(ANDROID_r4_0_3) || defined(ANDROID_r4_1_1) || defined(ANDROID_r4_2_0)
|
||||
#if defined(ANDROID_r4_0_0) || defined(ANDROID_r4_0_3) || defined(ANDROID_r4_1_1) || defined(ANDROID_r4_2_0) || defined(ANDROID_r4_3_0)
|
||||
,camera_frame_metadata_t*
|
||||
#endif
|
||||
)
|
||||
@@ -361,6 +387,11 @@ CameraHandler* CameraHandler::initCameraConnect(const CameraCallback& callback,
|
||||
typedef sp<Camera> (*Android22ConnectFuncType)();
|
||||
typedef sp<Camera> (*Android23ConnectFuncType)(int);
|
||||
typedef sp<Camera> (*Android3DConnectFuncType)(int, int);
|
||||
typedef sp<Camera> (*Android43ConnectFuncType)(int, const String16&, int);
|
||||
|
||||
const int ANY_CAMERA_INDEX = -1;
|
||||
const int BACK_CAMERA_INDEX = 99;
|
||||
const int FRONT_CAMERA_INDEX = 98;
|
||||
|
||||
enum {
|
||||
CAMERA_SUPPORT_MODE_2D = 0x01, /* Camera Sensor supports 2D mode. */
|
||||
@@ -369,11 +400,65 @@ CameraHandler* CameraHandler::initCameraConnect(const CameraCallback& callback,
|
||||
CAMERA_SUPPORT_MODE_ZSL = 0x08 /* Camera Sensor supports ZSL mode. */
|
||||
};
|
||||
|
||||
// used for Android 4.3
|
||||
enum {
|
||||
USE_CALLING_UID = -1
|
||||
};
|
||||
|
||||
const char Android22ConnectName[] = "_ZN7android6Camera7connectEv";
|
||||
const char Android23ConnectName[] = "_ZN7android6Camera7connectEi";
|
||||
const char Android3DConnectName[] = "_ZN7android6Camera7connectEii";
|
||||
const char Android43ConnectName[] = "_ZN7android6Camera7connectEiRKNS_8String16Ei";
|
||||
|
||||
LOGD("CameraHandler::initCameraConnect(%p, %d, %p, %p)", callback, cameraId, userData, prevCameraParameters);
|
||||
int localCameraIndex = cameraId;
|
||||
|
||||
if (cameraId == ANY_CAMERA_INDEX)
|
||||
{
|
||||
localCameraIndex = 0;
|
||||
}
|
||||
#if !defined(ANDROID_r2_2_0)
|
||||
else if (cameraId == BACK_CAMERA_INDEX)
|
||||
{
|
||||
LOGD("Back camera selected");
|
||||
for (int i = 0; i < Camera::getNumberOfCameras(); i++)
|
||||
{
|
||||
CameraInfo info;
|
||||
Camera::getCameraInfo(i, &info);
|
||||
if (info.facing == CAMERA_FACING_BACK)
|
||||
{
|
||||
localCameraIndex = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (cameraId == FRONT_CAMERA_INDEX)
|
||||
{
|
||||
LOGD("Front camera selected");
|
||||
for (int i = 0; i < Camera::getNumberOfCameras(); i++)
|
||||
{
|
||||
CameraInfo info;
|
||||
Camera::getCameraInfo(i, &info);
|
||||
if (info.facing == CAMERA_FACING_FRONT)
|
||||
{
|
||||
localCameraIndex = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (localCameraIndex == BACK_CAMERA_INDEX)
|
||||
{
|
||||
LOGE("Back camera not found!");
|
||||
return NULL;
|
||||
}
|
||||
else if (localCameraIndex == FRONT_CAMERA_INDEX)
|
||||
{
|
||||
LOGE("Front camera not found!");
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
LOGD("CameraHandler::initCameraConnect(%p, %d, %p, %p)", callback, localCameraIndex, userData, prevCameraParameters);
|
||||
|
||||
sp<Camera> camera = 0;
|
||||
|
||||
@@ -381,8 +466,8 @@ CameraHandler* CameraHandler::initCameraConnect(const CameraCallback& callback,
|
||||
|
||||
if (!CameraHALHandle)
|
||||
{
|
||||
LOGE("Cannot link to \"libcamera_client.so\"");
|
||||
return NULL;
|
||||
LOGE("Cannot link to \"libcamera_client.so\"");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// reset errors
|
||||
@@ -390,24 +475,30 @@ CameraHandler* CameraHandler::initCameraConnect(const CameraCallback& callback,
|
||||
|
||||
if (Android22ConnectFuncType Android22Connect = (Android22ConnectFuncType)dlsym(CameraHALHandle, Android22ConnectName))
|
||||
{
|
||||
LOGD("Connecting to CameraService v 2.2");
|
||||
camera = Android22Connect();
|
||||
LOGD("Connecting to CameraService v 2.2");
|
||||
camera = Android22Connect();
|
||||
}
|
||||
else if (Android23ConnectFuncType Android23Connect = (Android23ConnectFuncType)dlsym(CameraHALHandle, Android23ConnectName))
|
||||
{
|
||||
LOGD("Connecting to CameraService v 2.3");
|
||||
camera = Android23Connect(cameraId);
|
||||
LOGD("Connecting to CameraService v 2.3");
|
||||
camera = Android23Connect(localCameraIndex);
|
||||
}
|
||||
else if (Android3DConnectFuncType Android3DConnect = (Android3DConnectFuncType)dlsym(CameraHALHandle, Android3DConnectName))
|
||||
{
|
||||
LOGD("Connecting to CameraService v 3D");
|
||||
camera = Android3DConnect(cameraId, CAMERA_SUPPORT_MODE_2D);
|
||||
LOGD("Connecting to CameraService v 3D");
|
||||
camera = Android3DConnect(localCameraIndex, CAMERA_SUPPORT_MODE_2D);
|
||||
}
|
||||
else if (Android43ConnectFuncType Android43Connect = (Android43ConnectFuncType)dlsym(CameraHALHandle, Android43ConnectName))
|
||||
{
|
||||
std::string currentProcName = getProcessName();
|
||||
LOGD("Current process name for camera init: %s", currentProcName.c_str());
|
||||
camera = Android43Connect(localCameraIndex, String16(currentProcName.c_str()), USE_CALLING_UID);
|
||||
}
|
||||
else
|
||||
{
|
||||
dlclose(CameraHALHandle);
|
||||
LOGE("Cannot connect to CameraService. Connect method was not found!");
|
||||
return NULL;
|
||||
dlclose(CameraHALHandle);
|
||||
LOGE("Cannot connect to CameraService. Connect method was not found!");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
dlclose(CameraHALHandle);
|
||||
@@ -422,9 +513,9 @@ CameraHandler* CameraHandler::initCameraConnect(const CameraCallback& callback,
|
||||
camera->setListener(handler);
|
||||
|
||||
handler->camera = camera;
|
||||
handler->cameraId = cameraId;
|
||||
handler->cameraId = localCameraIndex;
|
||||
|
||||
if (prevCameraParameters != 0)
|
||||
if (prevCameraParameters != NULL)
|
||||
{
|
||||
LOGI("initCameraConnect: Setting paramers from previous camera handler");
|
||||
camera->setParameters(prevCameraParameters->flatten());
|
||||
@@ -456,11 +547,11 @@ CameraHandler* CameraHandler::initCameraConnect(const CameraCallback& callback,
|
||||
const char* available_focus_modes = handler->params.get(CameraParameters::KEY_SUPPORTED_FOCUS_MODES);
|
||||
if (available_focus_modes != 0)
|
||||
{
|
||||
if (strstr(available_focus_modes, "continuous-video") != NULL)
|
||||
{
|
||||
handler->params.set(CameraParameters::KEY_FOCUS_MODE, CameraParameters::FOCUS_MODE_CONTINUOUS_VIDEO);
|
||||
if (strstr(available_focus_modes, "continuous-video") != NULL)
|
||||
{
|
||||
handler->params.set(CameraParameters::KEY_FOCUS_MODE, CameraParameters::FOCUS_MODE_CONTINUOUS_VIDEO);
|
||||
|
||||
status_t resParams = handler->camera->setParameters(handler->params.flatten());
|
||||
status_t resParams = handler->camera->setParameters(handler->params.flatten());
|
||||
|
||||
if (resParams != 0)
|
||||
{
|
||||
@@ -470,8 +561,8 @@ CameraHandler* CameraHandler::initCameraConnect(const CameraCallback& callback,
|
||||
{
|
||||
LOGD("initCameraConnect: autofocus is set to mode \"continuous-video\"");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
//check if yuv420sp format available. Set this format as preview format.
|
||||
@@ -513,26 +604,25 @@ CameraHandler* CameraHandler::initCameraConnect(const CameraCallback& callback,
|
||||
}
|
||||
}
|
||||
|
||||
status_t pdstatus;
|
||||
status_t bufferStatus;
|
||||
#if defined(ANDROID_r2_2_0)
|
||||
pdstatus = camera->setPreviewDisplay(sp<ISurface>(0 /*new DummySurface*/));
|
||||
if (pdstatus != 0)
|
||||
LOGE("initCameraConnect: failed setPreviewDisplay(0) call; camera migth not work correctly on some devices");
|
||||
bufferStatus = camera->setPreviewDisplay(sp<ISurface>(0 /*new DummySurface*/));
|
||||
if (bufferStatus != 0)
|
||||
LOGE("initCameraConnect: failed setPreviewDisplay(0) call (status %d); camera might not work correctly on some devices", bufferStatus);
|
||||
#elif defined(ANDROID_r2_3_3)
|
||||
/* Do nothing in case of 2.3 for now */
|
||||
|
||||
#elif defined(ANDROID_r3_0_1) || defined(ANDROID_r4_0_0) || defined(ANDROID_r4_0_3)
|
||||
sp<SurfaceTexture> surfaceTexture = new SurfaceTexture(MAGIC_OPENCV_TEXTURE_ID);
|
||||
pdstatus = camera->setPreviewTexture(surfaceTexture);
|
||||
if (pdstatus != 0)
|
||||
LOGE("initCameraConnect: failed setPreviewTexture call; camera migth not work correctly");
|
||||
#elif defined(ANDROID_r4_1_1) || defined(ANDROID_r4_2_0)
|
||||
bufferStatus = camera->setPreviewTexture(surfaceTexture);
|
||||
if (bufferStatus != 0)
|
||||
LOGE("initCameraConnect: failed setPreviewTexture call (status %d); camera might not work correctly", bufferStatus);
|
||||
#elif defined(ANDROID_r4_1_1) || defined(ANDROID_r4_2_0) || defined(ANDROID_r4_3_0)
|
||||
sp<BufferQueue> bufferQueue = new BufferQueue();
|
||||
sp<BufferQueue::ConsumerListener> queueListener = new ConsumerListenerStub();
|
||||
bufferQueue->consumerConnect(queueListener);
|
||||
pdstatus = camera->setPreviewTexture(bufferQueue);
|
||||
if (pdstatus != 0)
|
||||
LOGE("initCameraConnect: failed setPreviewTexture call; camera migth not work correctly");
|
||||
bufferStatus = camera->setPreviewTexture(bufferQueue);
|
||||
if (bufferStatus != 0)
|
||||
LOGE("initCameraConnect: failed setPreviewTexture call; camera might not work correctly");
|
||||
#endif
|
||||
|
||||
#if (defined(ANDROID_r2_2_0) || defined(ANDROID_r2_3_3) || defined(ANDROID_r3_0_1))
|
||||
@@ -548,9 +638,9 @@ CameraHandler* CameraHandler::initCameraConnect(const CameraCallback& callback,
|
||||
#endif //!(defined(ANDROID_r4_0_0) || defined(ANDROID_r4_0_3))
|
||||
|
||||
LOGD("Starting preview");
|
||||
status_t resStart = camera->startPreview();
|
||||
status_t previewStatus = camera->startPreview();
|
||||
|
||||
if (resStart != 0)
|
||||
if (previewStatus != 0)
|
||||
{
|
||||
LOGE("initCameraConnect: startPreview() fails. Closing camera connection...");
|
||||
handler->closeCameraConnect();
|
||||
@@ -558,7 +648,7 @@ CameraHandler* CameraHandler::initCameraConnect(const CameraCallback& callback,
|
||||
}
|
||||
else
|
||||
{
|
||||
LOGD("Preview started successfully");
|
||||
LOGD("Preview started successfully");
|
||||
}
|
||||
|
||||
return handler;
|
||||
@@ -573,9 +663,11 @@ void CameraHandler::closeCameraConnect()
|
||||
}
|
||||
|
||||
camera->stopPreview();
|
||||
#if defined(ANDROID_r4_0_0) || defined(ANDROID_r4_0_3) || defined(ANDROID_r4_1_1) || defined(ANDROID_r4_2_0) || defined(ANDROID_r4_3_0)
|
||||
camera->setPreviewCallbackFlags(CAMERA_FRAME_CALLBACK_FLAG_NOOP);
|
||||
#endif
|
||||
camera->disconnect();
|
||||
camera.clear();
|
||||
|
||||
camera=NULL;
|
||||
// ATTENTION!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
// When we set
|
||||
@@ -816,14 +908,60 @@ void CameraHandler::applyProperties(CameraHandler** ppcameraHandler)
|
||||
|
||||
if (*ppcameraHandler == 0)
|
||||
{
|
||||
LOGE("applyProperties: Passed null *ppcameraHandler");
|
||||
LOGE("applyProperties: Passed NULL *ppcameraHandler");
|
||||
return;
|
||||
}
|
||||
|
||||
LOGD("CameraHandler::applyProperties()");
|
||||
CameraHandler* previousCameraHandler=*ppcameraHandler;
|
||||
CameraParameters curCameraParameters(previousCameraHandler->params.flatten());
|
||||
CameraParameters curCameraParameters((*ppcameraHandler)->params.flatten());
|
||||
|
||||
#if defined(ANDROID_r4_0_0) || defined(ANDROID_r4_0_3) || defined(ANDROID_r4_1_1) || defined(ANDROID_r4_2_0) || defined(ANDROID_r4_3_0)
|
||||
CameraHandler* handler=*ppcameraHandler;
|
||||
|
||||
handler->camera->stopPreview();
|
||||
handler->camera->setPreviewCallbackFlags(CAMERA_FRAME_CALLBACK_FLAG_NOOP);
|
||||
|
||||
status_t reconnectStatus = handler->camera->reconnect();
|
||||
if (reconnectStatus != 0)
|
||||
{
|
||||
LOGE("applyProperties: failed to reconnect camera (status %d)", reconnectStatus);
|
||||
return;
|
||||
}
|
||||
|
||||
handler->camera->setParameters(curCameraParameters.flatten());
|
||||
handler->params.unflatten(curCameraParameters.flatten());
|
||||
|
||||
status_t bufferStatus;
|
||||
# if defined(ANDROID_r4_0_0) || defined(ANDROID_r4_0_3)
|
||||
sp<SurfaceTexture> surfaceTexture = new SurfaceTexture(MAGIC_OPENCV_TEXTURE_ID);
|
||||
bufferStatus = handler->camera->setPreviewTexture(surfaceTexture);
|
||||
if (bufferStatus != 0)
|
||||
LOGE("applyProperties: failed setPreviewTexture call (status %d); camera might not work correctly", bufferStatus);
|
||||
# elif defined(ANDROID_r4_1_1) || defined(ANDROID_r4_2_0) || defined(ANDROID_r4_3_0)
|
||||
sp<BufferQueue> bufferQueue = new BufferQueue();
|
||||
sp<BufferQueue::ConsumerListener> queueListener = new ConsumerListenerStub();
|
||||
bufferQueue->consumerConnect(queueListener);
|
||||
bufferStatus = handler->camera->setPreviewTexture(bufferQueue);
|
||||
if (bufferStatus != 0)
|
||||
LOGE("applyProperties: failed setPreviewTexture call; camera might not work correctly");
|
||||
# endif
|
||||
|
||||
handler->camera->setPreviewCallbackFlags( CAMERA_FRAME_CALLBACK_FLAG_ENABLE_MASK | CAMERA_FRAME_CALLBACK_FLAG_COPY_OUT_MASK);//with copy
|
||||
|
||||
LOGD("Starting preview");
|
||||
status_t previewStatus = handler->camera->startPreview();
|
||||
|
||||
if (previewStatus != 0)
|
||||
{
|
||||
LOGE("initCameraConnect: startPreview() fails. Closing camera connection...");
|
||||
handler->closeCameraConnect();
|
||||
handler = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
LOGD("Preview started successfully");
|
||||
}
|
||||
#else
|
||||
CameraHandler* previousCameraHandler=*ppcameraHandler;
|
||||
CameraCallback cameraCallback=previousCameraHandler->cameraCallback;
|
||||
void* userData=previousCameraHandler->userData;
|
||||
int cameraId=previousCameraHandler->cameraId;
|
||||
@@ -832,7 +970,6 @@ void CameraHandler::applyProperties(CameraHandler** ppcameraHandler)
|
||||
previousCameraHandler->closeCameraConnect();
|
||||
LOGD("CameraHandler::applyProperties(): after previousCameraHandler->closeCameraConnect");
|
||||
|
||||
|
||||
LOGD("CameraHandler::applyProperties(): before initCameraConnect");
|
||||
CameraHandler* handler=initCameraConnect(cameraCallback, cameraId, userData, &curCameraParameters);
|
||||
LOGD("CameraHandler::applyProperties(): after initCameraConnect, handler=0x%x", (int)handler);
|
||||
@@ -845,6 +982,7 @@ void CameraHandler::applyProperties(CameraHandler** ppcameraHandler)
|
||||
}
|
||||
}
|
||||
(*ppcameraHandler)=handler;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -431,14 +431,14 @@ void CameraActivity::applyProperties()
|
||||
int CameraActivity::getFrameWidth()
|
||||
{
|
||||
if (frameWidth <= 0)
|
||||
frameWidth = getProperty(ANDROID_CAMERA_PROPERTY_FRAMEWIDTH);
|
||||
frameWidth = getProperty(ANDROID_CAMERA_PROPERTY_FRAMEWIDTH);
|
||||
return frameWidth;
|
||||
}
|
||||
|
||||
int CameraActivity::getFrameHeight()
|
||||
{
|
||||
if (frameHeight <= 0)
|
||||
frameHeight = getProperty(ANDROID_CAMERA_PROPERTY_FRAMEHEIGHT);
|
||||
frameHeight = getProperty(ANDROID_CAMERA_PROPERTY_FRAMEHEIGHT);
|
||||
return frameHeight;
|
||||
}
|
||||
|
||||
|
||||
@@ -1477,6 +1477,6 @@ The function reconstructs 3-dimensional points (in homogeneous coordinates) by u
|
||||
|
||||
.. [HH08] Hirschmuller, H. Stereo Processing by Semiglobal Matching and Mutual Information, PAMI(30), No. 2, February 2008, pp. 328-341.
|
||||
|
||||
.. [Slabaugh] Slabaugh, G.G. Computing Euler angles from a rotation matrix. http://gregslabaugh.name/publications/euler.pdf
|
||||
.. [Slabaugh] Slabaugh, G.G. Computing Euler angles from a rotation matrix. http://www.soi.city.ac.uk/~sbbh653/publications/euler.pdf (verified: 2013-04-15)
|
||||
|
||||
.. [Zhang2000] Z. Zhang. A Flexible New Technique for Camera Calibration. IEEE Transactions on Pattern Analysis and Machine Intelligence, 22(11):1330-1334, 2000.
|
||||
|
||||
@@ -639,9 +639,9 @@ CV_EXPORTS Mat findFundamentalMat( InputArray points1, InputArray points2,
|
||||
double param1=3., double param2=0.99);
|
||||
|
||||
//! finds coordinates of epipolar lines corresponding the specified points
|
||||
CV_EXPORTS void computeCorrespondEpilines( InputArray points,
|
||||
int whichImage, InputArray F,
|
||||
OutputArray lines );
|
||||
CV_EXPORTS_W void computeCorrespondEpilines( InputArray points,
|
||||
int whichImage, InputArray F,
|
||||
OutputArray lines );
|
||||
|
||||
CV_EXPORTS_W void triangulatePoints( InputArray projMatr1, InputArray projMatr2,
|
||||
InputArray projPoints1, InputArray projPoints2,
|
||||
|
||||
@@ -115,31 +115,6 @@ namespace cv
|
||||
transform(points, modif_points, transformation);
|
||||
}
|
||||
|
||||
class Mutex
|
||||
{
|
||||
public:
|
||||
Mutex() {
|
||||
}
|
||||
void lock()
|
||||
{
|
||||
#ifdef HAVE_TBB
|
||||
resultsMutex.lock();
|
||||
#endif
|
||||
}
|
||||
|
||||
void unlock()
|
||||
{
|
||||
#ifdef HAVE_TBB
|
||||
resultsMutex.unlock();
|
||||
#endif
|
||||
}
|
||||
|
||||
private:
|
||||
#ifdef HAVE_TBB
|
||||
tbb::mutex resultsMutex;
|
||||
#endif
|
||||
};
|
||||
|
||||
struct CameraParameters
|
||||
{
|
||||
void init(Mat _intrinsics, Mat _distCoeffs)
|
||||
|
||||
@@ -699,7 +699,7 @@ struct PrefilterInvoker
|
||||
};
|
||||
|
||||
|
||||
struct FindStereoCorrespInvoker
|
||||
struct FindStereoCorrespInvoker : ParallelLoopBody
|
||||
{
|
||||
FindStereoCorrespInvoker( const Mat& _left, const Mat& _right,
|
||||
Mat& _disp, CvStereoBMState* _state,
|
||||
@@ -713,12 +713,12 @@ struct FindStereoCorrespInvoker
|
||||
validDisparityRect = _validDisparityRect;
|
||||
}
|
||||
|
||||
void operator()( const BlockedRange& range ) const
|
||||
void operator()( const Range& range ) const
|
||||
{
|
||||
int cols = left->cols, rows = left->rows;
|
||||
int _row0 = min(cvRound(range.begin() * rows / nstripes), rows);
|
||||
int _row1 = min(cvRound(range.end() * rows / nstripes), rows);
|
||||
uchar *ptr = state->slidingSumBuf->data.ptr + range.begin() * stripeBufSize;
|
||||
int _row0 = min(cvRound(range.start * rows / nstripes), rows);
|
||||
int _row1 = min(cvRound(range.end * rows / nstripes), rows);
|
||||
uchar *ptr = state->slidingSumBuf->data.ptr + range.start * stripeBufSize;
|
||||
int FILTERED = (state->minDisparity - 1)*16;
|
||||
|
||||
Rect roi = validDisparityRect & Rect(0, _row0, cols, _row1 - _row0);
|
||||
@@ -871,14 +871,10 @@ static void findStereoCorrespondenceBM( const Mat& left0, const Mat& right0, Mat
|
||||
const bool useShorts = false;
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_TBB
|
||||
const double SAD_overhead_coeff = 10.0;
|
||||
double N0 = 8000000 / (useShorts ? 1 : 4); // approx tbb's min number instructions reasonable for one thread
|
||||
double maxStripeSize = min(max(N0 / (width * ndisp), (wsz-1) * SAD_overhead_coeff), (double)height);
|
||||
int nstripes = cvCeil(height / maxStripeSize);
|
||||
#else
|
||||
const int nstripes = 1;
|
||||
#endif
|
||||
|
||||
int bufSize = max(bufSize0 * nstripes, max(bufSize1 * 2, bufSize2));
|
||||
|
||||
@@ -898,9 +894,9 @@ static void findStereoCorrespondenceBM( const Mat& left0, const Mat& right0, Mat
|
||||
state->minDisparity, state->numberOfDisparities,
|
||||
state->SADWindowSize);
|
||||
|
||||
parallel_for(BlockedRange(0, nstripes),
|
||||
FindStereoCorrespInvoker(left, right, disp, state, nstripes,
|
||||
bufSize0, useShorts, validDisparityRect));
|
||||
parallel_for_(Range(0, nstripes),
|
||||
FindStereoCorrespInvoker(left, right, disp, state, nstripes,
|
||||
bufSize0, useShorts, validDisparityRect));
|
||||
|
||||
if( state->speckleRange >= 0 && state->speckleWindowSize > 0 )
|
||||
{
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#/usr/bin/env python
|
||||
#!/usr/bin/env python
|
||||
|
||||
import sys
|
||||
import os.path
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
|
||||
#include "opencv2/contrib/contrib.hpp"
|
||||
|
||||
#ifdef WIN32
|
||||
#if defined(WIN32) || defined(_WIN32)
|
||||
#include <windows.h>
|
||||
#include <tchar.h>
|
||||
#else
|
||||
|
||||
@@ -3,25 +3,21 @@ ocv_add_module(core ${ZLIB_LIBRARIES})
|
||||
ocv_module_include_directories(${ZLIB_INCLUDE_DIR})
|
||||
|
||||
if(HAVE_CUDA)
|
||||
ocv_source_group("Src\\Cuda" GLOB "src/cuda/*.cu")
|
||||
ocv_include_directories("${OpenCV_SOURCE_DIR}/modules/gpu/include" ${CUDA_INCLUDE_DIRS})
|
||||
ocv_include_directories("${OpenCV_SOURCE_DIR}/modules/gpu/include")
|
||||
ocv_warnings_disable(CMAKE_CXX_FLAGS -Wundef)
|
||||
|
||||
file(GLOB lib_cuda "src/cuda/*.cu")
|
||||
ocv_cuda_compile(cuda_objs ${lib_cuda})
|
||||
|
||||
set(cuda_link_libs ${CUDA_LIBRARIES} ${CUDA_npp_LIBRARY})
|
||||
else()
|
||||
set(lib_cuda "")
|
||||
set(cuda_objs "")
|
||||
set(cuda_link_libs "")
|
||||
endif()
|
||||
|
||||
ocv_glob_module_sources(SOURCES ${lib_cuda} ${cuda_objs} "${opencv_core_BINARY_DIR}/version_string.inc")
|
||||
file(GLOB lib_cuda_hdrs "include/opencv2/${name}/cuda/*.hpp" "include/opencv2/${name}/cuda/*.h")
|
||||
file(GLOB lib_cuda_hdrs_detail "include/opencv2/${name}/cuda/detail/*.hpp" "include/opencv2/${name}/cuda/detail/*.h")
|
||||
|
||||
ocv_create_module(${cuda_link_libs})
|
||||
source_group("Cuda Headers" FILES ${lib_cuda_hdrs})
|
||||
source_group("Cuda Headers\\Detail" FILES ${lib_cuda_hdrs_detail})
|
||||
|
||||
ocv_glob_module_sources(SOURCES "${opencv_core_BINARY_DIR}/version_string.inc"
|
||||
HEADERS ${lib_cuda_hdrs} ${lib_cuda_hdrs_detail})
|
||||
|
||||
ocv_create_module()
|
||||
ocv_add_precompiled_headers(${the_module})
|
||||
|
||||
ocv_add_accuracy_tests()
|
||||
ocv_add_perf_tests()
|
||||
|
||||
|
||||
@@ -489,6 +489,9 @@ Various Ptr constructors.
|
||||
.. ocv:function:: Ptr::Ptr(_Tp* _obj)
|
||||
.. ocv:function:: Ptr::Ptr(const Ptr& ptr)
|
||||
|
||||
:param _obj: Object for copy.
|
||||
:param ptr: Object for copy.
|
||||
|
||||
Ptr::~Ptr
|
||||
---------
|
||||
The Ptr destructor.
|
||||
@@ -501,6 +504,8 @@ Assignment operator.
|
||||
|
||||
.. ocv:function:: Ptr& Ptr::operator = (const Ptr& ptr)
|
||||
|
||||
:param ptr: Object for assignment.
|
||||
|
||||
Decrements own reference counter (with ``release()``) and increments ptr's reference counter.
|
||||
|
||||
Ptr::addref
|
||||
@@ -1465,6 +1470,7 @@ Adds elements to the bottom of the matrix.
|
||||
.. ocv:function:: void Mat::push_back( const Mat& m )
|
||||
|
||||
:param elem: Added element(s).
|
||||
:param m: Added line(s).
|
||||
|
||||
The methods add one or more elements to the bottom of the matrix. They emulate the corresponding method of the STL vector class. When ``elem`` is ``Mat`` , its type and the number of columns must be the same as in the container matrix.
|
||||
|
||||
@@ -1691,7 +1697,7 @@ Returns the depth of a matrix element.
|
||||
|
||||
.. ocv:function:: int Mat::depth() const
|
||||
|
||||
The method returns the identifier of the matrix element depth (the type of each individual channel). For example, for a 16-bit signed 3-channel array, the method returns ``CV_16S`` . A complete list of matrix types contains the following values:
|
||||
The method returns the identifier of the matrix element depth (the type of each individual channel). For example, for a 16-bit signed element array, the method returns ``CV_16S`` . A complete list of matrix types contains the following values:
|
||||
|
||||
* ``CV_8U`` - 8-bit unsigned integers ( ``0..255`` )
|
||||
|
||||
@@ -2160,7 +2166,6 @@ Various SparseMat constructors.
|
||||
:param dims: Array dimensionality.
|
||||
:param _sizes: Sparce matrix size on all dementions.
|
||||
:param _type: Sparse matrix data type.
|
||||
:param try1d: if try1d is true and matrix is a single-column matrix (Nx1), then the sparse matrix will be 1-dimensional.
|
||||
|
||||
SparseMat::~SparseMat
|
||||
---------------------
|
||||
@@ -2175,6 +2180,8 @@ Provides sparse matrix assignment operators.
|
||||
.. ocv:function:: SparseMat& SparseMat::operator = (const SparseMat& m)
|
||||
.. ocv:function:: SparseMat& SparseMat::operator = (const Mat& m)
|
||||
|
||||
:param m: Matrix for assignment.
|
||||
|
||||
The last variant is equivalent to the corresponding constructor with try1d=false.
|
||||
|
||||
|
||||
@@ -2202,6 +2209,10 @@ Convert sparse matrix with possible type change and scaling.
|
||||
.. ocv:function:: void SparseMat::convertTo( SparseMat& m, int rtype, double alpha=1 ) const
|
||||
.. ocv:function:: void SparseMat::convertTo( Mat& m, int rtype, double alpha=1, double beta=0 ) const
|
||||
|
||||
:param m: Destination matrix.
|
||||
:param rtype: Destination matrix type.
|
||||
:param alpha: Conversion multiplier.
|
||||
|
||||
The first version converts arbitrary sparse matrix to dense matrix and multiplies all the matrix elements by the specified scalar.
|
||||
The second versiob converts sparse matrix to dense matrix with optional type conversion and scaling.
|
||||
When rtype=-1, the destination element type will be the same as the sparse matrix element type.
|
||||
@@ -2294,7 +2305,7 @@ The method returns the number of matrix channels.
|
||||
|
||||
SparseMat::size
|
||||
---------------
|
||||
Returns the array of sizes or matrix size by i dimention and 0 if the matrix is not allocated.
|
||||
Returns the array of sizes or matrix size by i dimension and 0 if the matrix is not allocated.
|
||||
|
||||
.. ocv:function:: const int* SparseMat::size() const
|
||||
.. ocv:function:: int SparseMat::size(int i) const
|
||||
@@ -2322,6 +2333,11 @@ Compute element hash value from the element indices.
|
||||
.. ocv:function:: size_t SparseMat::hash(int i0, int i1, int i2) const
|
||||
.. ocv:function:: size_t SparseMat::hash(const int* idx) const
|
||||
|
||||
:param i0: The first dimension index.
|
||||
:param i1: The second dimension index.
|
||||
:param i2: The third dimension index.
|
||||
:param idx: Array of element indices for multidimensional matices.
|
||||
|
||||
SparseMat::ptr
|
||||
--------------
|
||||
Low-level element-access functions, special variants for 1D, 2D, 3D cases, and the generic one for n-D case.
|
||||
@@ -2331,6 +2347,12 @@ Low-level element-access functions, special variants for 1D, 2D, 3D cases, and t
|
||||
.. ocv:function:: uchar* SparseMat::ptr(int i0, int i1, int i2, bool createMissing, size_t* hashval=0)
|
||||
.. ocv:function:: uchar* SparseMat::ptr(const int* idx, bool createMissing, size_t* hashval=0)
|
||||
|
||||
:param i0: The first dimension index.
|
||||
:param i1: The second dimension index.
|
||||
:param i2: The third dimension index.
|
||||
:param idx: Array of element indices for multidimensional matices.
|
||||
:param createMissing: Create new element with 0 value if it does not exist in SparseMat.
|
||||
|
||||
Return pointer to the matrix element. If the element is there (it is non-zero), the pointer to it is returned.
|
||||
If it is not there and ``createMissing=false``, NULL pointer is returned. If it is not there and ``createMissing=true``,
|
||||
the new elementis created and initialized with 0. Pointer to it is returned. If the optional hashval pointer is not ``NULL``,
|
||||
@@ -2344,6 +2366,11 @@ Erase the specified matrix element. When there is no such an element, the method
|
||||
.. ocv:function:: void SparseMat::erase(int i0, int i1, int i2, size_t* hashval=0)
|
||||
.. ocv:function:: void SparseMat::erase(const int* idx, size_t* hashval=0)
|
||||
|
||||
:param i0: The first dimension index.
|
||||
:param i1: The second dimension index.
|
||||
:param i2: The third dimension index.
|
||||
:param idx: Array of element indices for multidimensional matices.
|
||||
|
||||
SparseMat\_
|
||||
-----------
|
||||
.. ocv:class:: SparseMat_
|
||||
|
||||
@@ -17,12 +17,18 @@ Finds centers of clusters and groups input samples around the clusters.
|
||||
|
||||
:param samples: Floating-point matrix of input samples, one row per sample.
|
||||
|
||||
:param data: Data for clustering.
|
||||
|
||||
:param cluster_count: Number of clusters to split the set by.
|
||||
|
||||
:param K: Number of clusters to split the set by.
|
||||
|
||||
:param labels: Input/output integer array that stores the cluster indices for every sample.
|
||||
|
||||
:param criteria: The algorithm termination criteria, that is, the maximum number of iterations and/or the desired accuracy. The accuracy is specified as ``criteria.epsilon``. As soon as each of the cluster centers moves by less than ``criteria.epsilon`` on some iteration, the algorithm stops.
|
||||
|
||||
:param termcrit: The algorithm termination criteria, that is, the maximum number of iterations and/or the desired accuracy.
|
||||
|
||||
:param attempts: Flag to specify the number of times the algorithm is executed using different initial labellings. The algorithm returns the labels that yield the best compactness (see the last function parameter).
|
||||
|
||||
:param rng: CvRNG state initialized by RNG().
|
||||
@@ -37,6 +43,8 @@ Finds centers of clusters and groups input samples around the clusters.
|
||||
|
||||
:param centers: Output matrix of the cluster centers, one row per each cluster center.
|
||||
|
||||
:param _centers: Output matrix of the cluster centers, one row per each cluster center.
|
||||
|
||||
:param compactness: The returned value that is described below.
|
||||
|
||||
The function ``kmeans`` implements a k-means algorithm that finds the
|
||||
|
||||
@@ -234,6 +234,8 @@ Calculates the width and height of a text string.
|
||||
|
||||
:param text: Input text string.
|
||||
|
||||
:param text_string: Input text string in C format.
|
||||
|
||||
:param fontFace: Font to use. See the :ocv:func:`putText` for details.
|
||||
|
||||
:param fontScale: Font scale. See the :ocv:func:`putText` for details.
|
||||
@@ -242,6 +244,12 @@ Calculates the width and height of a text string.
|
||||
|
||||
:param baseLine: Output parameter - y-coordinate of the baseline relative to the bottom-most text point.
|
||||
|
||||
:param baseline: Output parameter - y-coordinate of the baseline relative to the bottom-most text point.
|
||||
|
||||
:param font: Font description in terms of old C API.
|
||||
|
||||
:param text_size: Output parameter - The size of a box that contains the specified text.
|
||||
|
||||
The function ``getTextSize`` calculates and returns the size of a box that contains the specified text.
|
||||
That is, the following code renders some text, the tight box surrounding it, and the baseline: ::
|
||||
|
||||
|
||||
@@ -1062,6 +1062,8 @@ Returns the determinant of a square floating-point matrix.
|
||||
|
||||
:param mtx: input matrix that must have ``CV_32FC1`` or ``CV_64FC1`` type and square size.
|
||||
|
||||
:param mat: input matrix that must have ``CV_32FC1`` or ``CV_64FC1`` type and square size.
|
||||
|
||||
The function ``determinant`` calculates and returns the determinant of the specified matrix. For small matrices ( ``mtx.cols=mtx.rows<=3`` ),
|
||||
the direct method is used. For larger matrices, the function uses LU factorization with partial pivoting.
|
||||
|
||||
|
||||
@@ -173,6 +173,8 @@ Checks a condition at runtime and throws exception if it fails
|
||||
|
||||
.. ocv:function:: CV_Assert(expr)
|
||||
|
||||
:param expr: Expression for check.
|
||||
|
||||
The macros ``CV_Assert`` (and ``CV_DbgAssert``) evaluate the specified expression. If it is 0, the macros raise an error (see :ocv:func:`error` ). The macro ``CV_Assert`` checks the condition in both Debug and Release configurations while ``CV_DbgAssert`` is only retained in the Debug configuration.
|
||||
|
||||
|
||||
@@ -188,8 +190,14 @@ Signals an error and raises an exception.
|
||||
|
||||
:param status: Error code. Normally, it is a negative value. The list of pre-defined error codes can be found in ``cxerror.h`` .
|
||||
|
||||
:param func_name: The function name where error occurs.
|
||||
|
||||
:param err_msg: Text of the error message.
|
||||
|
||||
:param file_name: The file name where error occurs.
|
||||
|
||||
:param line: The line number where error occurs.
|
||||
|
||||
:param args: ``printf`` -like formatted error message in parentheses.
|
||||
|
||||
The function and the helper macros ``CV_Error`` and ``CV_Error_``: ::
|
||||
@@ -249,6 +257,7 @@ Allocates an aligned memory buffer.
|
||||
.. ocv:cfunction:: void* cvAlloc( size_t size )
|
||||
|
||||
:param size: Allocated buffer size.
|
||||
:param bufSize: Allocated buffer size.
|
||||
|
||||
The function allocates the buffer of the specified size and returns it. When the buffer size is 16 bytes or more, the returned buffer is aligned to 16 bytes.
|
||||
|
||||
|
||||
@@ -181,6 +181,17 @@ Opens a file.
|
||||
|
||||
.. ocv:function:: bool FileStorage::open(const string& filename, int flags, const string& encoding=string())
|
||||
|
||||
:param filename: Name of the file to open or the text string to read the data from.
|
||||
Extension of the file (``.xml`` or ``.yml``/``.yaml``) determines its format (XML or YAML respectively).
|
||||
Also you can append ``.gz`` to work with compressed files, for example ``myHugeMatrix.xml.gz``.
|
||||
If both ``FileStorage::WRITE`` and ``FileStorage::MEMORY`` flags are specified, ``source``
|
||||
is used just to specify the output file format (e.g. ``mydata.xml``, ``.yml`` etc.).
|
||||
|
||||
:param flags: Mode of operation. See FileStorage constructor for more details.
|
||||
|
||||
:param encoding: Encoding of the file. Note that UTF-16 XML encoding is not supported currently and you should use 8-bit encoding instead of it.
|
||||
|
||||
|
||||
See description of parameters in :ocv:func:`FileStorage::FileStorage`. The method calls :ocv:func:`FileStorage::release` before opening the file.
|
||||
|
||||
|
||||
|
||||
Alguns arquivos não foram exibidos porque demasiados arquivos foram alterados neste diff Mostrar Mais
Referência em uma Nova Issue
Bloquear um usuário