diff --git a/CMakeLists.txt b/CMakeLists.txt index bc63f35578..0c9518bbfd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -50,6 +50,7 @@ else() cmake_minimum_required(VERSION 2.6.3) endif() +# must go before the project command set(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "Configs" FORCE) if(DEFINED CMAKE_BUILD_TYPE AND CMAKE_VERSION VERSION_GREATER "2.8") set_property( CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS ${CMAKE_CONFIGURATION_TYPES} ) @@ -164,12 +165,10 @@ OCV_OPTION(INSTALL_ANDROID_EXAMPLES "Install Android examples" OFF IF ANDROID OCV_OPTION(INSTALL_TO_MANGLED_PATHS "Enables mangled install paths, that help with side by side installs." OFF IF (UNIX AND NOT ANDROID AND NOT IOS AND BUILD_SHARED_LIBS) ) -if(CMAKE_GENERATOR MATCHES Xcode) - set(ENABLE_SOLUTION_FOLDERS0 ON) -elseif(MSVC_IDE) - set(ENABLE_SOLUTION_FOLDERS0 ON) +if(MSVC_IDE OR CMAKE_GENERATOR MATCHES Xcode) + set(ENABLE_SOLUTION_FOLDERS0 ON) else() - set(ENABLE_SOLUTION_FOLDERS0 OFF) + set(ENABLE_SOLUTION_FOLDERS0 OFF) endif() # OpenCV build options @@ -333,270 +332,18 @@ include(cmake/OpenCVPCHSupport.cmake REQUIRED) include(cmake/OpenCVModule.cmake REQUIRED) # ---------------------------------------------------------------------------- -# Detect 3rd-party image IO libraries -# ---------------------------------------------------------------------------- -include(cmake/OpenCVIOLibs.cmake REQUIRED) - -# ---------------------------------------------------------------------------- -# Detect 3rd-party GUI libraries +# Detect 3rd-party libraries # ---------------------------------------------------------------------------- -# --- QT4 --- -ocv_clear_vars(HAVE_QT) -if(WITH_QT) - find_package(Qt4) - if(QT4_FOUND) - set(HAVE_QT TRUE) - add_definitions(-DHAVE_QT) #We need to define te macro this way, using cvconfig.h.cmake does not work - endif() -endif() -# --- GTK --- -ocv_clear_vars(HAVE_GTK HAVE_GTHREAD HAVE_GTKGLEXT) -if(WITH_GTK AND NOT HAVE_QT) - CHECK_MODULE(gtk+-2.0 HAVE_GTK) - CHECK_MODULE(gthread-2.0 HAVE_GTHREAD) - if(WITH_OPENGL) - CHECK_MODULE(gtkglext-1.0 HAVE_GTKGLEXT) - endif() -endif() - -# --- OpenGl --- -ocv_clear_vars(HAVE_OPENGL HAVE_QT_OPENGL) -if(WITH_OPENGL) - if(WIN32 OR QT_QTOPENGL_FOUND OR HAVE_GTKGLEXT) - find_package (OpenGL QUIET) - if(OPENGL_FOUND) - set(HAVE_OPENGL TRUE) - set(OPENCV_LINKER_LIBS ${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() - endif() - endif() -endif(WITH_OPENGL) - -# ---------------------------------------------------------------------------- -# Detect 3rd-party video IO libraries -# ---------------------------------------------------------------------------- -# --- GStreamer --- -ocv_clear_vars(HAVE_GSTREAMER) -if(WITH_GSTREAMER) - CHECK_MODULE(gstreamer-base-0.10 HAVE_GSTREAMER) - if(HAVE_GSTREAMER) - CHECK_MODULE(gstreamer-app-0.10 HAVE_GSTREAMER) - endif() - if(HAVE_GSTREAMER) - CHECK_MODULE(gstreamer-video-0.10 HAVE_GSTREAMER) - endif() -endif(WITH_GSTREAMER) - -# --- unicap --- -ocv_clear_vars(HAVE_UNICAP) -if(WITH_UNICAP) - CHECK_MODULE(libunicap HAVE_UNICAP_) - CHECK_MODULE(libucil HAVE_UNICAP_UCIL) - if(HAVE_UNICAP_ AND HAVE_UNICAP_UCIL) - set(HAVE_UNICAP TRUE) - endif() -endif(WITH_UNICAP) - -# --- PvApi --- -ocv_clear_vars(HAVE_PVAPI) -if(WITH_PVAPI) - find_path(PVAPI_INCLUDE_PATH "PvApi.h" - PATHS /usr/local /opt /usr ENV ProgramFiles ENV ProgramW6432 - PATH_SUFFIXES include "Allied Vision Technologies/GigESDK/inc-pc" "AVT GigE SDK/inc-pc" "GigESDK/inc-pc" - DOC "The path to PvAPI header") - - if(PVAPI_INCLUDE_PATH) - if(X86 AND NOT WIN32) - set(PVAPI_SDK_SUBDIR x86) - elseif(X86_64) - set(PVAPI_SDK_SUBDIR x64) - elseif(CMAKE_SYSTEM_PROCESSOR MATCHES arm) - set(PVAPI_SDK_SUBDIR arm) - endif() - - get_filename_component(_PVAPI_LIBRARY "${PVAPI_INCLUDE_PATH}/../lib-pc" ABSOLUTE) - if(PVAPI_SDK_SUBDIR) - set(_PVAPI_LIBRARY "${_PVAPI_LIBRARY}/${PVAPI_SDK_SUBDIR}") - endif() - if(NOT WIN32 AND CMAKE_COMPILER_IS_GNUCXX) - set(_PVAPI_LIBRARY "${_PVAPI_LIBRARY}/${CMAKE_OPENCV_GCC_VERSION_MAJOR}.${CMAKE_OPENCV_GCC_VERSION_MINOR}") - endif() - - set(PVAPI_LIBRARY "${_PVAPI_LIBRARY}/${CMAKE_STATIC_LIBRARY_PREFIX}PvAPI${CMAKE_STATIC_LIBRARY_SUFFIX}" CACHE PATH "The PvAPI library") - if(EXISTS "${PVAPI_LIBRARY}") - set(HAVE_PVAPI TRUE) - endif() - endif(PVAPI_INCLUDE_PATH) -endif(WITH_PVAPI) - -# --- 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() -endif(WITH_1394) - -# --- xine --- -ocv_clear_vars(HAVE_XINE) -if(WITH_XINE) - CHECK_MODULE(libxine HAVE_XINE) -endif(WITH_XINE) - -# --- V4L --- -ocv_clear_vars(HAVE_LIBV4L HAVE_CAMV4L HAVE_CAMV4L2) -if(WITH_V4L) - CHECK_MODULE(libv4l1 HAVE_LIBV4L) - CHECK_INCLUDE_FILE(linux/videodev.h HAVE_CAMV4L) - CHECK_INCLUDE_FILE(linux/videodev2.h HAVE_CAMV4L2) -endif(WITH_V4L) - -# --- OpenNI --- -ocv_clear_vars(HAVE_OPENNI HAVE_OPENNI_PRIME_SENSOR_MODULE) -if(WITH_OPENNI) - include(cmake/OpenCVFindOpenNI.cmake) -endif(WITH_OPENNI) - -# --- XIMEA --- -ocv_clear_vars(HAVE_XIMEA) -if(WITH_XIMEA) - include(cmake/OpenCVFindXimea.cmake) - if(XIMEA_FOUND) - set(HAVE_XIMEA TRUE) - endif() -endif(WITH_XIMEA) - -# --- FFMPEG --- -ocv_clear_vars(HAVE_FFMPEG HAVE_FFMPEG_CODEC HAVE_FFMPEG_FORMAT HAVE_FFMPEG_UTIL HAVE_FFMPEG_SWSCALE HAVE_GENTOO_FFMPEG HAVE_FFMPEG_FFMPEG) -if(WITH_FFMPEG) - if(WIN32) - include(3rdparty/ffmpeg/ffmpeg_version.cmake REQUIRED) - elseif(UNIX) - CHECK_MODULE(libavcodec HAVE_FFMPEG_CODEC) - CHECK_MODULE(libavformat HAVE_FFMPEG_FORMAT) - CHECK_MODULE(libavutil HAVE_FFMPEG_UTIL) - CHECK_MODULE(libswscale HAVE_FFMPEG_SWSCALE) - - CHECK_INCLUDE_FILE(libavformat/avformat.h HAVE_GENTOO_FFMPEG) - CHECK_INCLUDE_FILE(ffmpeg/avformat.h HAVE_FFMPEG_FFMPEG) - if(NOT HAVE_GENTOO_FFMPEG AND NOT HAVE_FFMPEG_FFMPEG) - if(EXISTS /usr/include/ffmpeg/libavformat/avformat.h OR HAVE_FFMPEG_SWSCALE) - set(HAVE_GENTOO_FFMPEG TRUE) - endif() - endif() - if(HAVE_FFMPEG_CODEC AND HAVE_FFMPEG_FORMAT AND HAVE_FFMPEG_UTIL AND HAVE_FFMPEG_SWSCALE) - set(HAVE_FFMPEG TRUE) - endif() - - if(HAVE_FFMPEG) - # Find the bzip2 library because it is required on some systems - FIND_LIBRARY(BZIP2_LIBRARIES NAMES bz2 bzip2) - if(NOT BZIP2_LIBRARIES) - # Do an other trial - FIND_FILE(BZIP2_LIBRARIES NAMES libbz2.so.1 PATHS /lib) - endif() - endif(HAVE_FFMPEG) - endif() - - if(APPLE) - find_path(FFMPEG_INCLUDE_DIR "libavformat/avformat.h" - PATHS /usr/local /usr /opt - PATH_SUFFIXES include - DOC "The path to FFMPEG headers") - if(FFMPEG_INCLUDE_DIR) - set(HAVE_GENTOO_FFMPEG TRUE) - set(FFMPEG_LIB_DIR "${FFMPEG_INCLUDE_DIR}/../lib" CACHE PATH "Full path of FFMPEG library directory") - if(EXISTS "${FFMPEG_LIB_DIR}/libavcodec.a") - set(HAVE_FFMPEG_CODEC 1) - set(ALIASOF_libavcodec_VERSION "Unknown") - if(EXISTS "${FFMPEG_LIB_DIR}/libavformat.a") - set(HAVE_FFMPEG_FORMAT 1) - set(ALIASOF_libavformat_VERSION "Unknown") - if(EXISTS "${FFMPEG_LIB_DIR}/libavutil.a") - set(HAVE_FFMPEG_UTIL 1) - set(ALIASOF_libavutil_VERSION "Unknown") - if(EXISTS "${FFMPEG_LIB_DIR}/libswscale.a") - set(HAVE_FFMPEG_SWSCALE 1) - set(ALIASOF_libswscale_VERSION "Unknown") - set(HAVE_FFMPEG 1) - endif() - endif() - endif() - endif() - endif(FFMPEG_INCLUDE_DIR) - if(HAVE_FFMPEG) - set(HIGHGUI_LIBRARIES ${HIGHGUI_LIBRARIES} "${FFMPEG_LIB_DIR}/libavcodec.a" - "${FFMPEG_LIB_DIR}/libavformat.a" "${FFMPEG_LIB_DIR}/libavutil.a" - "${FFMPEG_LIB_DIR}/libswscale.a") - ocv_include_directories(${FFMPEG_INCLUDE_DIR}) - endif() - endif(APPLE) -endif(WITH_FFMPEG) - -# --- VideoInput --- -if(WITH_VIDEOINPUT) - # always have VideoInput on Windows - set(HAVE_VIDEOINPUT 1) -endif(WITH_VIDEOINPUT) - -# --- Extra HighGUI libs on Windows --- -if(WIN32) - list(APPEND HIGHGUI_LIBRARIES comctl32 gdi32 ole32) - if(MSVC) - list(APPEND HIGHGUI_LIBRARIES vfw32) - elseif(MINGW64) - list(APPEND HIGHGUI_LIBRARIES msvfw32 avifil32 avicap32 winmm) - elseif(MINGW) - list(APPEND HIGHGUI_LIBRARIES vfw32 winmm) - endif() -endif(WIN32) +include(cmake/OpenCVFindLibsGrfmt.cmake REQUIRED) +include(cmake/OpenCVFindLibsGUI.cmake REQUIRED) +include(cmake/OpenCVFindLibsVideo.cmake REQUIRED) +include(cmake/OpenCVFindLibsPerf.cmake REQUIRED) # ---------------------------------------------------------------------------- # Detect other 3rd-party libraries/tools # ---------------------------------------------------------------------------- -# --- TBB --- -if(WITH_TBB) - include(cmake/OpenCVDetectTBB.cmake REQUIRED) -endif(WITH_TBB) - -# --- IPP --- -ocv_clear_vars(IPP_FOUND) -if(WITH_IPP) - include(cmake/OpenCVFindIPP.cmake) - if(IPP_FOUND) - add_definitions(-DHAVE_IPP) - ocv_include_directories(${IPP_INCLUDE_DIRS}) - link_directories(${IPP_LIBRARY_DIRS}) - set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${IPP_LIBRARIES}) - endif() -endif(WITH_IPP) - -# --- CUDA --- -if(WITH_CUDA) - include(cmake/OpenCVDetectCUDA.cmake REQUIRED) -endif(WITH_CUDA) - -# --- Eigen --- -if(WITH_EIGEN) - find_path(EIGEN_INCLUDE_PATH "Eigen/Core" - PATHS /usr/local /opt /usr ENV ProgramFiles ENV ProgramW6432 - PATH_SUFFIXES include/eigen3 include/eigen2 Eigen/include/eigen3 Eigen/include/eigen2 - DOC "The path to Eigen3/Eigen2 headers") - - if(EIGEN_INCLUDE_PATH) - ocv_include_directories(${EIGEN_INCLUDE_PATH}) - ocv_parse_header("${EIGEN_INCLUDE_PATH}/Eigen/src/Core/util/Macros.h" EIGEN_VERSION_LINES EIGEN_WORLD_VERSION EIGEN_MAJOR_VERSION EIGEN_MINOR_VERSION) - set(HAVE_EIGEN 1) - endif() -endif(WITH_EIGEN) # --- LATEX for pdf documentation --- if(BUILD_DOCS) diff --git a/cmake/OpenCVFindLibsGUI.cmake b/cmake/OpenCVFindLibsGUI.cmake new file mode 100644 index 0000000000..c883a80ced --- /dev/null +++ b/cmake/OpenCVFindLibsGUI.cmake @@ -0,0 +1,41 @@ +# ---------------------------------------------------------------------------- +# Detect 3rd-party GUI libraries +# ---------------------------------------------------------------------------- + +# --- QT4 --- +ocv_clear_vars(HAVE_QT) +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 + endif() +endif() + +# --- GTK --- +ocv_clear_vars(HAVE_GTK HAVE_GTHREAD HAVE_GTKGLEXT) +if(WITH_GTK AND NOT HAVE_QT) + CHECK_MODULE(gtk+-2.0 HAVE_GTK) + CHECK_MODULE(gthread-2.0 HAVE_GTHREAD) + if(WITH_OPENGL) + CHECK_MODULE(gtkglext-1.0 HAVE_GTKGLEXT) + endif() +endif() + +# --- OpenGl --- +ocv_clear_vars(HAVE_OPENGL HAVE_QT_OPENGL) +if(WITH_OPENGL) + if(WIN32 OR QT_QTOPENGL_FOUND OR HAVE_GTKGLEXT) + find_package (OpenGL QUIET) + if(OPENGL_FOUND) + set(HAVE_OPENGL TRUE) + 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() + endif() + endif() +endif(WITH_OPENGL) diff --git a/cmake/OpenCVIOLibs.cmake b/cmake/OpenCVFindLibsGrfmt.cmake similarity index 78% rename from cmake/OpenCVIOLibs.cmake rename to cmake/OpenCVFindLibsGrfmt.cmake index 8b0dd082ec..47632cd895 100644 --- a/cmake/OpenCVIOLibs.cmake +++ b/cmake/OpenCVFindLibsGrfmt.cmake @@ -1,12 +1,10 @@ -macro(unset_all) - foreach(var ${ARGN}) - unset(${var} CACHE) - endforeach() -endmacro() +# ---------------------------------------------------------------------------- +# Detect 3rd-party image IO libraries +# ---------------------------------------------------------------------------- -################### zlib - required +# --- zlib (required) --- if(BUILD_ZLIB) - unset_all(ZLIB_FOUND) + ocv_clear_vars(ZLIB_FOUND) else() include(FindZLIB) if(ZLIB_FOUND) @@ -25,7 +23,7 @@ else() endif() if(NOT ZLIB_FOUND) - unset_all(ZLIB_LIBRARY ZLIB_LIBRARIES ZLIB_INCLUDE_DIR) + ocv_clear_vars(ZLIB_LIBRARY ZLIB_LIBRARIES ZLIB_INCLUDE_DIR) set(ZLIB_LIBRARY zlib) set(ZLIB_LIBRARIES ${ZLIB_LIBRARY}) @@ -33,10 +31,10 @@ if(NOT ZLIB_FOUND) set(ZLIB_INCLUDE_DIR "${${ZLIB_LIBRARY}_SOURCE_DIR}" "${${ZLIB_LIBRARY}_BINARY_DIR}") endif() -################### libtiff - optional (should be searched after zlib) +# --- libtiff (optional, should be searched after zlib) --- if(WITH_TIFF) if(BUILD_TIFF) - unset_all(TIFF_FOUND) + ocv_clear_vars(TIFF_FOUND) else() include(FindTIFF) if(TIFF_FOUND) @@ -46,7 +44,7 @@ if(WITH_TIFF) endif() if(WITH_TIFF AND NOT TIFF_FOUND) - unset_all(TIFF_LIBRARY TIFF_LIBRARIES TIFF_INCLUDE_DIR) + ocv_clear_vars(TIFF_LIBRARY TIFF_LIBRARIES TIFF_INCLUDE_DIR) set(TIFF_LIBRARY libtiff) set(TIFF_LIBRARIES ${TIFF_LIBRARY}) @@ -63,17 +61,17 @@ if(TIFF_BIGTIFF_VERSION AND NOT TIFF_VERSION_BIG) set(TIFF_VERSION_BIG ${TIFF_BIGTIFF_VERSION}) endif() -################### libjpeg - optional +# --- libjpeg (optional) --- if(WITH_JPEG) if(BUILD_JPEG) - unset_all(JPEG_FOUND) + ocv_clear_vars(JPEG_FOUND) else() include(FindJPEG) endif() endif() if(WITH_JPEG AND NOT JPEG_FOUND) - unset_all(JPEG_LIBRARY JPEG_LIBRARIES JPEG_INCLUDE_DIR) + ocv_clear_vars(JPEG_LIBRARY JPEG_LIBRARIES JPEG_INCLUDE_DIR) set(JPEG_LIBRARY libjpeg) set(JPEG_LIBRARIES ${JPEG_LIBRARY}) @@ -84,17 +82,17 @@ endif() ocv_parse_header("${JPEG_INCLUDE_DIR}/jpeglib.h" JPEG_VERSION_LINES JPEG_LIB_VERSION) -################### libjasper - optional (should be searched after libjpeg) +# --- libjasper (optional, should be searched after libjpeg) --- if(WITH_JASPER) if(BUILD_JASPER) - unset_all(JASPER_FOUND) + ocv_clear_vars(JASPER_FOUND) else() include(FindJasper) endif() endif() if(WITH_JASPER AND NOT JASPER_FOUND) - unset_all(JASPER_LIBRARY JASPER_LIBRARIES JASPER_INCLUDE_DIR) + ocv_clear_vars(JASPER_LIBRARY JASPER_LIBRARIES JASPER_INCLUDE_DIR) set(JASPER_LIBRARY libjasper) set(JASPER_LIBRARIES ${JASPER_LIBRARY}) @@ -106,10 +104,10 @@ if(NOT JASPER_VERSION_STRING) ocv_parse_header2(JASPER "${JASPER_INCLUDE_DIR}/jasper/jas_config.h" JAS_VERSION "") endif() -################### libpng - optional (should be searched after zlib) +# --- libpng (optional, should be searched after zlib) --- if(WITH_PNG) if(BUILD_PNG) - unset_all(PNG_FOUND) + ocv_clear_vars(PNG_FOUND) else() include(FindPNG) if(PNG_FOUND) @@ -125,7 +123,7 @@ if(WITH_PNG) endif() if(WITH_PNG AND NOT PNG_FOUND) - unset_all(PNG_LIBRARY PNG_LIBRARIES PNG_INCLUDE_DIR PNG_PNG_INCLUDE_DIR HAVE_PNG_H HAVE_LIBPNG_PNG_H PNG_DEFINITIONS) + ocv_clear_vars(PNG_LIBRARY PNG_LIBRARIES PNG_INCLUDE_DIR PNG_PNG_INCLUDE_DIR HAVE_PNG_H HAVE_LIBPNG_PNG_H PNG_DEFINITIONS) set(PNG_LIBRARY libpng) set(PNG_LIBRARIES ${PNG_LIBRARY}) @@ -137,7 +135,7 @@ endif() set(PNG_VERSION "${PNG_LIBPNG_VER_MAJOR}.${PNG_LIBPNG_VER_MINOR}.${PNG_LIBPNG_VER_RELEASE}") -################### OpenEXR - optional +# --- OpenEXR (optional) --- if(WITH_OPENEXR) include("${OpenCV_SOURCE_DIR}/cmake/OpenCVFindOpenEXR.cmake") endif() diff --git a/cmake/OpenCVFindLibsPerf.cmake b/cmake/OpenCVFindLibsPerf.cmake new file mode 100644 index 0000000000..5cc42375fe --- /dev/null +++ b/cmake/OpenCVFindLibsPerf.cmake @@ -0,0 +1,39 @@ +# ---------------------------------------------------------------------------- +# Detect other 3rd-party performance and math libraries +# ---------------------------------------------------------------------------- + +# --- TBB --- +if(WITH_TBB) + include("${OpenCV_SOURCE_DIR}/cmake/OpenCVDetectTBB.cmake" REQUIRED) +endif(WITH_TBB) + +# --- IPP --- +ocv_clear_vars(IPP_FOUND) +if(WITH_IPP) + include("${OpenCV_SOURCE_DIR}/cmake/OpenCVFindIPP.cmake") + if(IPP_FOUND) + add_definitions(-DHAVE_IPP) + ocv_include_directories(${IPP_INCLUDE_DIRS}) + link_directories(${IPP_LIBRARY_DIRS}) + set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${IPP_LIBRARIES}) + endif() +endif(WITH_IPP) + +# --- CUDA --- +if(WITH_CUDA) + include("${OpenCV_SOURCE_DIR}/cmake/OpenCVDetectCUDA.cmake" REQUIRED) +endif(WITH_CUDA) + +# --- Eigen --- +if(WITH_EIGEN) + find_path(EIGEN_INCLUDE_PATH "Eigen/Core" + PATHS /usr/local /opt /usr ENV ProgramFiles ENV ProgramW6432 + PATH_SUFFIXES include/eigen3 include/eigen2 Eigen/include/eigen3 Eigen/include/eigen2 + DOC "The path to Eigen3/Eigen2 headers") + + if(EIGEN_INCLUDE_PATH) + ocv_include_directories(${EIGEN_INCLUDE_PATH}) + ocv_parse_header("${EIGEN_INCLUDE_PATH}/Eigen/src/Core/util/Macros.h" EIGEN_VERSION_LINES EIGEN_WORLD_VERSION EIGEN_MAJOR_VERSION EIGEN_MINOR_VERSION) + set(HAVE_EIGEN 1) + endif() +endif(WITH_EIGEN) diff --git a/cmake/OpenCVFindLibsVideo.cmake b/cmake/OpenCVFindLibsVideo.cmake new file mode 100644 index 0000000000..41bfc65538 --- /dev/null +++ b/cmake/OpenCVFindLibsVideo.cmake @@ -0,0 +1,180 @@ +# ---------------------------------------------------------------------------- +# Detect 3rd-party video IO libraries +# ---------------------------------------------------------------------------- + +# --- GStreamer --- +ocv_clear_vars(HAVE_GSTREAMER) +if(WITH_GSTREAMER) + CHECK_MODULE(gstreamer-base-0.10 HAVE_GSTREAMER) + if(HAVE_GSTREAMER) + CHECK_MODULE(gstreamer-app-0.10 HAVE_GSTREAMER) + endif() + if(HAVE_GSTREAMER) + CHECK_MODULE(gstreamer-video-0.10 HAVE_GSTREAMER) + endif() +endif(WITH_GSTREAMER) + +# --- unicap --- +ocv_clear_vars(HAVE_UNICAP) +if(WITH_UNICAP) + CHECK_MODULE(libunicap HAVE_UNICAP_) + CHECK_MODULE(libucil HAVE_UNICAP_UCIL) + if(HAVE_UNICAP_ AND HAVE_UNICAP_UCIL) + set(HAVE_UNICAP TRUE) + endif() +endif(WITH_UNICAP) + +# --- PvApi --- +ocv_clear_vars(HAVE_PVAPI) +if(WITH_PVAPI) + find_path(PVAPI_INCLUDE_PATH "PvApi.h" + PATHS /usr/local /opt /usr ENV ProgramFiles ENV ProgramW6432 + PATH_SUFFIXES include "Allied Vision Technologies/GigESDK/inc-pc" "AVT GigE SDK/inc-pc" "GigESDK/inc-pc" + DOC "The path to PvAPI header") + + if(PVAPI_INCLUDE_PATH) + if(X86 AND NOT WIN32) + set(PVAPI_SDK_SUBDIR x86) + elseif(X86_64) + set(PVAPI_SDK_SUBDIR x64) + elseif(CMAKE_SYSTEM_PROCESSOR MATCHES arm) + set(PVAPI_SDK_SUBDIR arm) + endif() + + get_filename_component(_PVAPI_LIBRARY "${PVAPI_INCLUDE_PATH}/../lib-pc" ABSOLUTE) + if(PVAPI_SDK_SUBDIR) + set(_PVAPI_LIBRARY "${_PVAPI_LIBRARY}/${PVAPI_SDK_SUBDIR}") + endif() + if(NOT WIN32 AND CMAKE_COMPILER_IS_GNUCXX) + set(_PVAPI_LIBRARY "${_PVAPI_LIBRARY}/${CMAKE_OPENCV_GCC_VERSION_MAJOR}.${CMAKE_OPENCV_GCC_VERSION_MINOR}") + endif() + + set(PVAPI_LIBRARY "${_PVAPI_LIBRARY}/${CMAKE_STATIC_LIBRARY_PREFIX}PvAPI${CMAKE_STATIC_LIBRARY_SUFFIX}" CACHE PATH "The PvAPI library") + if(EXISTS "${PVAPI_LIBRARY}") + set(HAVE_PVAPI TRUE) + endif() + endif(PVAPI_INCLUDE_PATH) +endif(WITH_PVAPI) + +# --- 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() +endif(WITH_1394) + +# --- xine --- +ocv_clear_vars(HAVE_XINE) +if(WITH_XINE) + CHECK_MODULE(libxine HAVE_XINE) +endif(WITH_XINE) + +# --- V4L --- +ocv_clear_vars(HAVE_LIBV4L HAVE_CAMV4L HAVE_CAMV4L2) +if(WITH_V4L) + CHECK_MODULE(libv4l1 HAVE_LIBV4L) + CHECK_INCLUDE_FILE(linux/videodev.h HAVE_CAMV4L) + CHECK_INCLUDE_FILE(linux/videodev2.h HAVE_CAMV4L2) +endif(WITH_V4L) + +# --- OpenNI --- +ocv_clear_vars(HAVE_OPENNI HAVE_OPENNI_PRIME_SENSOR_MODULE) +if(WITH_OPENNI) + include("${OpenCV_SOURCE_DIR}/cmake/OpenCVFindOpenNI.cmake") +endif(WITH_OPENNI) + +# --- XIMEA --- +ocv_clear_vars(HAVE_XIMEA) +if(WITH_XIMEA) + include("${OpenCV_SOURCE_DIR}/cmake/OpenCVFindXimea.cmake") + if(XIMEA_FOUND) + set(HAVE_XIMEA TRUE) + endif() +endif(WITH_XIMEA) + +# --- FFMPEG --- +ocv_clear_vars(HAVE_FFMPEG HAVE_FFMPEG_CODEC HAVE_FFMPEG_FORMAT HAVE_FFMPEG_UTIL HAVE_FFMPEG_SWSCALE HAVE_GENTOO_FFMPEG HAVE_FFMPEG_FFMPEG) +if(WITH_FFMPEG) + if(WIN32) + include("${OpenCV_SOURCE_DIR}/3rdparty/ffmpeg/ffmpeg_version.cmake" REQUIRED) + elseif(UNIX) + CHECK_MODULE(libavcodec HAVE_FFMPEG_CODEC) + CHECK_MODULE(libavformat HAVE_FFMPEG_FORMAT) + CHECK_MODULE(libavutil HAVE_FFMPEG_UTIL) + CHECK_MODULE(libswscale HAVE_FFMPEG_SWSCALE) + + CHECK_INCLUDE_FILE(libavformat/avformat.h HAVE_GENTOO_FFMPEG) + CHECK_INCLUDE_FILE(ffmpeg/avformat.h HAVE_FFMPEG_FFMPEG) + if(NOT HAVE_GENTOO_FFMPEG AND NOT HAVE_FFMPEG_FFMPEG) + if(EXISTS /usr/include/ffmpeg/libavformat/avformat.h OR HAVE_FFMPEG_SWSCALE) + set(HAVE_GENTOO_FFMPEG TRUE) + endif() + endif() + if(HAVE_FFMPEG_CODEC AND HAVE_FFMPEG_FORMAT AND HAVE_FFMPEG_UTIL AND HAVE_FFMPEG_SWSCALE) + set(HAVE_FFMPEG TRUE) + endif() + + if(HAVE_FFMPEG) + # Find the bzip2 library because it is required on some systems + FIND_LIBRARY(BZIP2_LIBRARIES NAMES bz2 bzip2) + if(NOT BZIP2_LIBRARIES) + # Do an other trial + FIND_FILE(BZIP2_LIBRARIES NAMES libbz2.so.1 PATHS /lib) + endif() + endif(HAVE_FFMPEG) + endif() + + if(APPLE) + find_path(FFMPEG_INCLUDE_DIR "libavformat/avformat.h" + PATHS /usr/local /usr /opt + PATH_SUFFIXES include + DOC "The path to FFMPEG headers") + if(FFMPEG_INCLUDE_DIR) + set(HAVE_GENTOO_FFMPEG TRUE) + set(FFMPEG_LIB_DIR "${FFMPEG_INCLUDE_DIR}/../lib" CACHE PATH "Full path of FFMPEG library directory") + if(EXISTS "${FFMPEG_LIB_DIR}/libavcodec.a") + set(HAVE_FFMPEG_CODEC 1) + set(ALIASOF_libavcodec_VERSION "Unknown") + if(EXISTS "${FFMPEG_LIB_DIR}/libavformat.a") + set(HAVE_FFMPEG_FORMAT 1) + set(ALIASOF_libavformat_VERSION "Unknown") + if(EXISTS "${FFMPEG_LIB_DIR}/libavutil.a") + set(HAVE_FFMPEG_UTIL 1) + set(ALIASOF_libavutil_VERSION "Unknown") + if(EXISTS "${FFMPEG_LIB_DIR}/libswscale.a") + set(HAVE_FFMPEG_SWSCALE 1) + set(ALIASOF_libswscale_VERSION "Unknown") + set(HAVE_FFMPEG 1) + endif() + endif() + endif() + endif() + endif(FFMPEG_INCLUDE_DIR) + if(HAVE_FFMPEG) + set(HIGHGUI_LIBRARIES ${HIGHGUI_LIBRARIES} "${FFMPEG_LIB_DIR}/libavcodec.a" + "${FFMPEG_LIB_DIR}/libavformat.a" "${FFMPEG_LIB_DIR}/libavutil.a" + "${FFMPEG_LIB_DIR}/libswscale.a") + ocv_include_directories(${FFMPEG_INCLUDE_DIR}) + endif() + endif(APPLE) +endif(WITH_FFMPEG) + +# --- VideoInput --- +if(WITH_VIDEOINPUT) + # always have VideoInput on Windows + set(HAVE_VIDEOINPUT 1) +endif(WITH_VIDEOINPUT) + +# --- Extra HighGUI libs on Windows --- +if(WIN32) + list(APPEND HIGHGUI_LIBRARIES comctl32 gdi32 ole32) + if(MSVC) + list(APPEND HIGHGUI_LIBRARIES vfw32) + elseif(MINGW64) + list(APPEND HIGHGUI_LIBRARIES msvfw32 avifil32 avicap32 winmm) + elseif(MINGW) + list(APPEND HIGHGUI_LIBRARIES vfw32 winmm) + endif() +endif(WIN32) diff --git a/modules/core/test/test_misc.cpp b/modules/core/test/test_misc.cpp new file mode 100644 index 0000000000..43daf67189 --- /dev/null +++ b/modules/core/test/test_misc.cpp @@ -0,0 +1,25 @@ +#include "test_precomp.hpp" + +using namespace cv; +using namespace std; + +TEST(Core_Drawing, _914) +{ + const int rows = 256; + const int cols = 256; + + Mat img(rows, cols, CV_8UC1, Scalar(255)); + + line(img, Point(0, 10), Point(255, 10), Scalar(0), 2, 4); + line(img, Point(-5, 20), Point(260, 20), Scalar(0), 2, 4); + line(img, Point(10, 0), Point(10, 255), Scalar(0), 2, 4); + + double x0 = 0.0/pow(2.0, -2.0); + double x1 = 255.0/pow(2.0, -2.0); + double y = 30.5/pow(2.0, -2.0); + + line(img, Point(int(x0), int(y)), Point(int(x1), int(y)), Scalar(0), 2, 4, 2); + + int pixelsDrawn = rows*cols - countNonZero(img); + ASSERT_EQ( (3*rows + cols)*3 - 3*9, pixelsDrawn); +} \ No newline at end of file diff --git a/samples/c/fback_c.c b/samples/c/fback_c.c index 7515bcc1e2..3bc5063c1c 100644 --- a/samples/c/fback_c.c +++ b/samples/c/fback_c.c @@ -1,5 +1,6 @@ #include "opencv2/video/tracking.hpp" #include "opencv2/highgui/highgui.hpp" +#include "opencv2/imgproc/imgproc_c.h" #include void help() { diff --git a/samples/c/motempl.c b/samples/c/motempl.c index 822a42934f..ebcc8d8cb5 100644 --- a/samples/c/motempl.c +++ b/samples/c/motempl.c @@ -1,6 +1,6 @@ #include "opencv2/video/tracking.hpp" -#include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" +#include "opencv2/imgproc/imgproc_c.h" #include #include #include diff --git a/samples/python2/video_threaded.py b/samples/python2/video_threaded.py index 6b2cdacefd..85d9b6a3d6 100644 --- a/samples/python2/video_threaded.py +++ b/samples/python2/video_threaded.py @@ -1,63 +1,29 @@ import numpy as np import cv2 -from Queue import Queue -from threading import Thread +from multiprocessing.pool import ThreadPool from collections import deque -class Worker(Thread): - def __init__(self, tasks): - Thread.__init__(self) - self.tasks = tasks - self.daemon = True - self.start() - - def run(self): - while True: - func, args, kargs = self.tasks.get() - try: func(*args, **kargs) - except Exception, e: print e - self.tasks.task_done() - -class ThreadPool: - def __init__(self, num_threads): - self.tasks = Queue(num_threads) - for _ in range(num_threads): Worker(self.tasks) - - def add_task(self, func, *args, **kargs): - self.tasks.put((func, args, kargs)) - - def wait_completion(self): - self.tasks.join() if __name__ == '__main__': - results = deque() - - def process_frame(i, frame): - global results - res = cv2.medianBlur(frame, 15) - results.append((i, res)) - - pool = ThreadPool(4) + def process_frame(frame): + # some intensive computation... + frame = cv2.medianBlur(frame, 19) + frame = cv2.medianBlur(frame, 19) + frame = cv2.medianBlur(frame, 19) + return frame + + threadn = 8 cap = cv2.VideoCapture(0) - frame_count = 0 - last_frame = None - last_count = -1 + pool = ThreadPool(processes = threadn) + pending = deque() while True: - ret, frame = cap.read() - pool.add_task(process_frame, frame_count, frame.copy()) - frame_count += 1 - while len(results) > 0: - i, frame = results.popleft() - if i > last_count: - last_count, last_frame = i, frame - if last_frame is not None: - cv2.imshow('res', last_frame) + while len(pending) > 0 and pending[0].ready(): + res = pending.popleft().get() + cv2.imshow('result', res) + if len(pending) < threadn+1: + ret, frame = cap.read() + task = pool.apply_async(process_frame, (frame.copy(),)) + pending.append(task) if cv2.waitKey(1) == 27: break - - pool.wait_completion() - - - -