From 9dc4f1546de23e48c49460b13087b5bc91a32c9d Mon Sep 17 00:00:00 2001 From: Bert Peters Date: Fri, 6 Apr 2018 12:24:07 +0200 Subject: [PATCH] Remove dependency on png++, use openCV instead. --- CMakeLists.txt | 2 -- cmake/modules/Findpng++.cmake | 66 ----------------------------------- src/fmri/PNGDumper.cpp | 37 +++++--------------- src/fmri/PNGDumper.hpp | 3 +- src/fmri/main.cpp | 3 +- 5 files changed, 12 insertions(+), 99 deletions(-) delete mode 100644 cmake/modules/Findpng++.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index cd38b62..7b1801a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,7 +22,6 @@ target_compile_options(fmri PRIVATE "-Wall" "-Wextra" "-pedantic") find_package(Caffe REQUIRED) find_package(OpenGL REQUIRED) find_package(GLUT REQUIRED) -find_package(png++ REQUIRED) find_package(Boost REQUIRED COMPONENTS filesystem program_options) find_package(OpenCV REQUIRED COMPONENTS core imgproc imgcodecs) @@ -30,7 +29,6 @@ target_link_libraries(fmri PUBLIC Caffe::Caffe GLUT::GLUT OpenGL::GLU - png++::png++ Boost::program_options opencv_core opencv_imgproc diff --git a/cmake/modules/Findpng++.cmake b/cmake/modules/Findpng++.cmake deleted file mode 100644 index 65eb74d..0000000 --- a/cmake/modules/Findpng++.cmake +++ /dev/null @@ -1,66 +0,0 @@ -# - Try to find png++ -# -# The following variables are optionally searched for defaults -# png++_ROOT_DIR: Base directory where all png++ components are found -# -# The following are set after configuration is done: -# png++_FOUND -# png++_INCLUDE_DIRS -# png++_LIBRARIES - -find_package(PNG REQUIRED) - -include(FindPackageHandleStandardArgs) - -set(png++_ROOT_DIR "" CACHE PATH "Folder contains png++") - -find_path(png++_INCLUDE_DIR - NAMES - png++/color.hpp - png++/config.hpp - png++/consumer.hpp - png++/convert_color_space.hpp - png++/end_info.hpp - png++/error.hpp - png++/ga_pixel.hpp - png++/generator.hpp - png++/gray_pixel.hpp - png++/image.hpp - png++/image_info.hpp - png++/index_pixel.hpp - png++/info.hpp - png++/info_base.hpp - png++/io_base.hpp - png++/packed_pixel.hpp - png++/palette.hpp - png++/pixel_buffer.hpp - png++/pixel_traits.hpp - png++/png.hpp - png++/reader.hpp - png++/require_color_space.hpp - png++/rgb_pixel.hpp - png++/rgba_pixel.hpp - png++/streaming_base.hpp - png++/tRNS.hpp - png++/types.hpp - png++/writer.hpp - PATHS - ${png++_ROOT_DIR} - PATH_SUFFIXES - src) - -set(png++_INCLUDE_DIRS ${png++_INCLUDE_DIR} ${PNG_INCLUDE_DIRS}) -set(png++_LIBRARY ${PNG_LIBRARIES}) - -find_package_handle_standard_args(png++ DEFAULT_MSG - png++_INCLUDE_DIR) - -if(png++_FOUND) - set(png++_INCLUDE_DIRS ${png++_INCLUDE_DIR}) - set(png++_LIBRARIES ${png++_LIBRARY}) - - add_library(png++::png++ INTERFACE IMPORTED) - set_target_properties(png++::png++ PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES ${png++_INCLUDE_DIR} - INTERFACE_LINK_LIBRARIES PNG::PNG) -endif() diff --git a/src/fmri/PNGDumper.cpp b/src/fmri/PNGDumper.cpp index 81812e0..97e9688 100644 --- a/src/fmri/PNGDumper.cpp +++ b/src/fmri/PNGDumper.cpp @@ -2,7 +2,8 @@ #include #include -#include +#include +#include #include "PNGDumper.hpp" @@ -50,41 +51,21 @@ void PNGDumper::dumpImageSeries(const LayerData &layer) const auto images = shape[0], channels = shape[1], height = shape[2], width = shape[3]; const auto imagePixels = width * height; - // Buffer for storing the current image data. - vector buffer(imagePixels); + cv::Mat image(width, height, CV_32FC1); auto data = layer.data(); - png::image image(width, height); - for (int i = 0; i < images; ++i) { for (int j = 0; j < channels; ++j) { - memcpy(buffer.data(), data, imagePixels * sizeof(DType)); + char pathBuf[PATH_MAX]; + std::copy_n(data, imagePixels, image.begin()); + rescale(image.begin(), image.end(), 0, 255); + std::snprintf(pathBuf, sizeof(pathBuf), "%s/%s-%d-%d.png", baseDir_.c_str(), layer.name().c_str(), i, j); + + cv::imwrite(pathBuf, image); - // advance the buffer; data += imagePixels; - - rescale(buffer.begin(), buffer.end(), 0.0, 255.0); - - for (int y = 0; y < height; ++y) { - for (int x = 0; x < width; ++x) { - image[y][x] = png::gray_pixel((int) buffer[x + y * width]); - } - } - - image.write(getFilename(layer.name(), i, j)); } } } -string PNGDumper::getFilename(const string &layerName, int i, int j) -{ - stringstream nameBuilder; - - nameBuilder << baseDir_ - << "/" << layerName - << "-" << i - << "-" << j << ".png"; - - return nameBuilder.str(); -} diff --git a/src/fmri/PNGDumper.hpp b/src/fmri/PNGDumper.hpp index d549a22..8a48c08 100644 --- a/src/fmri/PNGDumper.hpp +++ b/src/fmri/PNGDumper.hpp @@ -23,6 +23,5 @@ namespace fmri void dumpImageSeries(const LayerData &data); - string getFilename(const string &basic_string, int i, int j); }; -} \ No newline at end of file +} diff --git a/src/fmri/main.cpp b/src/fmri/main.cpp index 4115460..9bf9b24 100644 --- a/src/fmri/main.cpp +++ b/src/fmri/main.cpp @@ -28,7 +28,6 @@ static void loadSimulationData(const Options &options) } CHECK_GT(results.size(), 0) << "Should have some results" << endl; - RenderingState::instance().loadSimulationData(simulator.layerInfo(), std::move(results)); if (dumper) { for (auto &layer : *results.begin()) { @@ -46,6 +45,8 @@ static void loadSimulationData(const Options &options) LOG(INFO) << "Got answer: " << labels[bestIndex] << endl; } } + + RenderingState::instance().loadSimulationData(simulator.layerInfo(), std::move(results)); } int main(int argc, char *argv[])