From 4d9b8fa34f118dc116edce6bd04e41a54988069d Mon Sep 17 00:00:00 2001 From: Dmitry Vorotnev Date: Mon, 8 Mar 2021 23:02:38 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D0=B8=D0=BD=D0=B3=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8?= =?UTF-8?q?=D0=B9=20=D0=B4=D0=BB=D1=8F=20=D0=BE=D1=82=D0=BB=D0=B0=D0=B4?= =?UTF-8?q?=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .travis.yml | 2 +- include/Debug.h | 24 --------------- include/Debug.hpp | 63 ++++++++++++++++++++++++++++++++++++++ main.cpp | 2 +- python/CMakeLists.txt | 11 +++---- python/version.patch | 10 +++++++ src/Contour.cpp | 2 +- src/Debug.cpp | 70 ------------------------------------------- 8 files changed, 82 insertions(+), 102 deletions(-) delete mode 100644 include/Debug.h create mode 100644 include/Debug.hpp create mode 100644 python/version.patch delete mode 100644 src/Debug.cpp diff --git a/.travis.yml b/.travis.yml index 6666824..e988984 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,5 @@ language: cpp -dist: bionic +dist: focal sudo: required addons: diff --git a/include/Debug.h b/include/Debug.h deleted file mode 100644 index 535d978..0000000 --- a/include/Debug.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - Дополнительный функционал для отладки. -*/ - -#ifndef __DEBUG_H__ -#define __DEBUG_H__ - -#include - -#define ___DEBUG___ 0 - -// Каталог отладки. -#if ___DEBUG___ -static const char debug_directory[] = "..\\result\\"; -#endif // ___DEBUG___ - -// В режиме отладки: запись изображения в каталог отладки. -void imageWrite(const cv::String& name, const cv::Mat& mat); - -// В режиме отладки: запись изображения в каталог отладки. -// В обычном режиме: вывод изображения на экран. -void imageShow(const cv::String& winname, const cv::Mat& mat); - -#endif // __DEBUG_H__ diff --git a/include/Debug.hpp b/include/Debug.hpp new file mode 100644 index 0000000..d156378 --- /dev/null +++ b/include/Debug.hpp @@ -0,0 +1,63 @@ +/* + Дополнительный функционал для отладки. +*/ + +#ifndef __DEBUG_HPP__ +#define __DEBUG_HPP__ + +#include + +#define ___DEBUG___ 1 + +#if ___DEBUG___ +#include +#include + +#include +#include +#endif // ___DEBUG___ + +// В режиме отладки: запись изображения в каталог отладки. +template +void imageWrite(const String& win_name, const cv::Mat& mat) +{ +#if ___DEBUG___ + namespace fs = std::filesystem; + static size_t debug_frame_counter = 0; + if (win_name == std::string("Input")) + ++debug_frame_counter; + + const fs::path debug_dir = "../result/"; + fs::create_directory(debug_dir); + fs::path image_dir = debug_dir / win_name; + fs::create_directory(image_dir); + std::string file_name = std::to_string(debug_frame_counter) + ".png"; + fs::path image_path = image_dir / file_name; + cv::imwrite(image_path, mat); +#endif // ___DEBUG___ +} + +// В режиме отладки: запись изображения в каталог отладки. +// В обычном режиме: вывод изображения на экран. +template +void imageShow(const String& win_name, const cv::Mat& image) +{ + imshow(win_name, image); + +#if ___DEBUG___ + if (image.channels() == 1) + { + cv::Mat bin_image = image.clone(); + const uchar BackGround = 0; + const uchar ForeGround = 255; + cv::threshold(image, bin_image, BackGround, ForeGround, cv::THRESH_BINARY); + imageWrite(win_name, bin_image); + } + else + { + imageWrite(win_name, image); + } +#endif // ___DEBUG___ +} + +#endif // __DEBUG_HPP__ diff --git a/main.cpp b/main.cpp index f43e598..33f2880 100644 --- a/main.cpp +++ b/main.cpp @@ -7,7 +7,7 @@ #include #include -#include +#include #include #include #include diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index c7c80fa..f159188 100644 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -1,19 +1,20 @@ include(ExternalProject) -FIND_PACKAGE(PythonLibs 3 REQUIRED) +find_package(Python COMPONENTS Interpreter Development REQUIRED) +find_package(Boost COMPONENTS python38 system REQUIRED) add_compile_options(-Wno-unused-function -Wno-unused-variable) file(GLOB SOURCES *.cpp) -PYTHON_ADD_MODULE(${PROJECT_NAME}_py MODULE ${SOURCES}) +add_library(${PROJECT_NAME}_py MODULE ${SOURCES}) -find_package(Boost COMPONENTS system python3 REQUIRED) -target_include_directories(${PROJECT_NAME}_py PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} ${PYTHON_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS}) +target_include_directories(${PROJECT_NAME}_py PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} ${Python_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS}) target_link_libraries(${PROJECT_NAME}_py PUBLIC ${Boost_LIBRARIES} ${PROJECT_NAME}-lib) ExternalProject_Add(pyboostcvconverter URL https://api.github.com/repos/Algomorph/pyboostcvconverter/tarball/3338a4c URL_HASH MD5=b02287f63b4ab543e1277de499da87b3 + PATCH_COMMAND patch CMakeLists.txt ${CMAKE_CURRENT_SOURCE_DIR}/version.patch CMAKE_ARGS "-DCMAKE_BUILD_TYPE=Release;-DPYTHON_DESIRED_VERSION=3.X" INSTALL_COMMAND "" ) @@ -23,7 +24,7 @@ ExternalProject_Get_Property(pyboostcvconverter SOURCE_DIR) ExternalProject_Get_Property(pyboostcvconverter BINARY_DIR) add_library(pyboostcvconverter_lib SHARED IMPORTED) -set_property(TARGET pyboostcvconverter_lib PROPERTY IMPORTED_LOCATION ${BINARY_DIR}/pbcvt.cpython-36m-x86_64-linux-gnu.so) +set_property(TARGET pyboostcvconverter_lib PROPERTY IMPORTED_LOCATION ${BINARY_DIR}/pbcvt.cpython-38-x86_64-linux-gnu.so) target_include_directories(${PROJECT_NAME}_py PUBLIC ${SOURCE_DIR}/include) target_link_libraries(${PROJECT_NAME}_py PUBLIC pyboostcvconverter_lib) diff --git a/python/version.patch b/python/version.patch new file mode 100644 index 0000000..19c7234 --- /dev/null +++ b/python/version.patch @@ -0,0 +1,10 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 017c63b..668a33e 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -1,4 +1,4 @@ +-cmake_minimum_required(VERSION 2.8 FATAL_ERROR) ++cmake_minimum_required(VERSION 2.8.12 FATAL_ERROR) + project("pbcvt") + + #----------------------------CMAKE & GLOBAL PROPERTIES-------------------------# diff --git a/src/Contour.cpp b/src/Contour.cpp index 8f271c4..4d02ff4 100644 --- a/src/Contour.cpp +++ b/src/Contour.cpp @@ -6,7 +6,7 @@ #include #include -#include +#include using namespace std; using namespace cv; diff --git a/src/Debug.cpp b/src/Debug.cpp deleted file mode 100644 index 42140b2..0000000 --- a/src/Debug.cpp +++ /dev/null @@ -1,70 +0,0 @@ -/* - Реализация дополнительного функционала для отладки. -*/ - -#include -#include - -#ifdef _WIN32 -#include -#endif - -#include - -using namespace cv; - -static unsigned int debug_frame_counter = 0; - -#if ___DEBUG___ -static uchar BackGround = 0; -static uchar ForeGround = 255; -#endif // ___DEBUG___ - -void imageWrite(const String& name, const Mat& mat) -{ -#if ___DEBUG___ - _mkdir(debug_directory); - String file_name = String(debug_directory) + name; - _mkdir(file_name.c_str()); - char frame_counter_str[10]; - sprintf_s(frame_counter_str, "%d", debug_frame_counter); - file_name = file_name + "\\" + frame_counter_str + ".png"; - imwrite(file_name, mat); -#endif // ___DEBUG___ -} - -#if ___DEBUG___ -static void binarizeImage(Mat& image) -{ - for (int y = 0; y < image.rows; ++y) - { - uchar* ptr = image.ptr(y); - for (int x = 0; x < image.cols; ++x) - { - if (ptr[x] != BackGround) - ptr[x] = ForeGround; - } - } -} -#endif // ___DEBUG___ - -void imageShow(const String& winname, const Mat& mat) -{ - if (winname == "Input") - ++debug_frame_counter; - -#if ___DEBUG___ - if (mat.channels() == 1) - { - Mat output = mat.clone(); - binarizeImage(output); - imageWrite(winname, output); - } - else - { - imageWrite(winname, mat); - } - -#endif // ___DEBUG___ - imshow(winname, mat); -}