From aee4533e118bd1c9e92ddf4f9011bff28f807d29 Mon Sep 17 00:00:00 2001 From: Antoine Pazat <antoine.pazat@gmail.com> Date: Fri, 24 Jun 2016 13:53:12 +0200 Subject: [PATCH] modification CMakeLists pour que les sources compilent --- CMakeLists.txt | 23 ++++- app/Services/FilteringService.h | 2 + core/CMakeLists.txt | 12 +++ plugins/CMakeLists.txt | 2 + plugins/Median/Median.cpp | 167 ++++++++++++++++++++++++++++++++ plugins/Median/Median/main.cpp | 31 ++++++ plugins/Median/Median/main.h | 28 ++++++ 7 files changed, 263 insertions(+), 2 deletions(-) create mode 100644 plugins/Median/Median.cpp create mode 100644 plugins/Median/Median/main.cpp create mode 100644 plugins/Median/Median/main.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 640d3c2..9657a6b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,11 +1,18 @@ project(ImageINSA) cmake_minimum_required(VERSION 2.8.11) +set(CMAKE_BUILD_TYPE "Release") # Find includes in corresponding build directories set(CMAKE_INCLUDE_CURRENT_DIR ON) # Instruct CMake to run moc automatically when needed. set(CMAKE_AUTOMOC ON) +#Modif Pazat : repertoire contenant les fichiers de configuration .cmake pour QT5. !!! Modifier le chemin pour qu'il dépende des variables d'environnement !!! +#set (CMAKE_PREFIX_PATH "C:\\Qt\\Qt5.6.1\\5.6\\msvc2015_64\\lib\\cmake\\") + +#Modif Pazat : repertoire contenant les fichiers de configuration .cmake pour QT5. +set (CMAKE_PREFIX_PATH "C:\\Qt\\Qt5.6.1\\5.6\\mingw49_32\\lib\\cmake") + # Find the Qt libraries find_package(Qt5Core REQUIRED) find_package(Qt5Gui REQUIRED) @@ -24,6 +31,8 @@ set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${DEPLOY_OUTPUT_DIRECTORY}/lib) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${DEPLOY_OUTPUT_DIRECTORY}/lib) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${DEPLOY_OUTPUT_DIRECTORY}) +set (CMAKE_PREFIX_PATH "C:\\RandomLib-mingw32") + # Find RandomLib, which must be built and installed before running this compilation find_package(RandomLib 1.7 REQUIRED) if(RandomLib_FOUND) @@ -45,6 +54,10 @@ else() "for Detiq-T (ImageIn & GenericInterface libraries), and re-run CMake.") endif() +set (CMAKE_MODULE_PATH "C:\\Program Files\\CMake\\share\\cmake-3.6\\Modules\\") +set (CMAKE_PREFIX_PATH "C:\\Program Files (x86)\\GnuWin32\\") + + find_package(JPEG) if(JPEG_FOUND) include_directories(${JPEG_INCLUDE_DIR}) @@ -63,8 +76,14 @@ find_package(Threads REQUIRED) # Simple inclusion, more control have already been performed # in previous Detiq-T lookup (GenericInterface) -find_package(Qwt 6.0) -include_directories(${QWT_INCLUDE_DIRS}) +set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules) +set(CMAKE_PREFIX_PATH "C:\\Qwt-6.1.2\\") +set(QWT_LIBRARY "C:\\Qwt-6.1.2\\lib\\qwt.dll") +set(QWT_INCLUDE_DIR "C:\\Qwt-6.1.2\\include") + +find_package(Qwt 6.0 REQUIRED) + include_directories(${QWT_INCLUDE_DIRS}) + add_subdirectory(core) include_directories(core) diff --git a/app/Services/FilteringService.h b/app/Services/FilteringService.h index c6c9a55..8b18b57 100644 --- a/app/Services/FilteringService.h +++ b/app/Services/FilteringService.h @@ -28,7 +28,9 @@ #include "Widgets/FilterEditor.h" #include <QStringList> +#ifdef __linux__ #include <pthread.h> +#endif namespace filtrme { diff --git a/core/CMakeLists.txt b/core/CMakeLists.txt index 9c2db83..b53623e 100644 --- a/core/CMakeLists.txt +++ b/core/CMakeLists.txt @@ -1,6 +1,18 @@ find_package(Qt5Widgets REQUIRED) + set(CMAKE_PREFIX_PATH "C:\\Qwt-6.1.2\\") + #set(QWT_LIBRARY "C:\\Qwt-6.1.2\\lib\\qwt.dll") +set(QWT_LIBRARY C:/Qwt-6.1.2/lib/qwt.dll) + set(QWT_INCLUDE_DIR "C:\\Qwt-6.1.2\\include") + +find_package(Qwt 6.0 REQUIRED) +if(QWT_FOUND) + include_directories(${QWT_INCLUDE_DIRS}) +else() + message(FATAL_ERROR "Cannot find Qwt library. Please add the Qwt library directory to CMAKE_PREFIX_PATH.") +endif() + set(SRCS BuiltinOpSet.cpp BuiltinOpSet.h diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt index 2fd2686..ca4f8dd 100644 --- a/plugins/CMakeLists.txt +++ b/plugins/CMakeLists.txt @@ -18,3 +18,5 @@ target_link_libraries(segmentationTest core) add_library(entropy SHARED Entropy/Entropy.cpp) target_link_libraries(entropy core) +add_library(median SHARED Median/Median.cpp) +target_link_libraries(median core) diff --git a/plugins/Median/Median.cpp b/plugins/Median/Median.cpp new file mode 100644 index 0000000..6bf6a4e --- /dev/null +++ b/plugins/Median/Median.cpp @@ -0,0 +1,167 @@ +/* + * Copyright 2011-2012 INSA Rennes + * + * This file is part of EIImage. + * + * EIImage is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * EIImage is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with EIImage. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include <iostream> +#include <string> +#include <algorithm> + +#include "Image.h" +#include "Converter.h" + +#include "Operation.h" +#include "Plugin.h" +#include "ImgParam.h" +#include "IntParam.h" +#include "PlugOperation.h" + +#include <cstring> +#include <cstdio> +#include <cmath> +#include <vector> +#include <algorithm> + +using namespace std; +using namespace imagein; + +class MedianCroix : public PlugOperation { + public: + MedianCroix() : PlugOperation("MedianCroix") { + addParam(CurrentImg(), &MedianCroix::img); + addParam(IntParam("Taille",1,30,3),&MedianCroix::wSide); + } + void operation() { + Image *outputImage = new Image(img); + unsigned int histo[256]; + unsigned int imageWidth = img.getWidth(); + unsigned int imageHeight = img.getHeight(); + unsigned int nbChannels = img.getNbChannels(); + int iStart, iStop, jStart, jStop; + + // parcours des composantes de couleur + for (int c=0;c<nbChannels;c++){ + + // parcours de l'image + for (int x=0;x<imageWidth;x++){ + for(int y=0;y<imageHeight;y++){ + //parcours de la fenêtre du filtre + + x-wSide/2 < 0 ? iStart = 0 : iStart = x-wSide/2; + x+wSide/2 > imageWidth-1 ? iStop = imageWidth : iStop = x+wSide/2+1; + y-wSide/2 < 0 ? jStart = 0 : jStart = y-wSide/2; + y+wSide/2 > imageHeight-1 ? jStop = imageHeight : jStop = y+wSide/2+1; + + + for(int i=iStart; i< iStop ; i++){ + for(int j=jStart;j<jStop;j++){ + //remplissage de la fenêtre du filtre + if (i==x || j==y)window.push_back(img.getPixelAt(i,j,c)); + + }//j + }//i + + size_t size = window.size(); + sort(window.begin(), window.begin()+size); + outputImage->setPixelAt(x, y, c, window[size/2]); + window.clear(); + }//y + }//x + }//c + + //conversion de la taille de la fenêtre en string pour l'affichage de l'image résultat + string str; + ostringstream convert; + convert << wSide; + str = convert.str(); + + outImage(outputImage, "Image filtered (median"+str+"x"+str+")"); + } + private: + Image img; + int wSide;//largeur de la fenêtre + vector<int> window; +}; + +class MedianCarre : public PlugOperation { + public: + MedianCarre() : PlugOperation("MedianCarre") { + addParam(CurrentImg(), &MedianCarre::img); + addParam(IntParam("Taille",1,30,3),&MedianCarre::wSide); + } + + void operation() { + Image *outputImage = new Image(img); + unsigned int histo[256]; + unsigned int imageWidth = img.getWidth(); + unsigned int imageHeight = img.getHeight(); + unsigned int nbChannels = img.getNbChannels(); + int iStart, iStop, jStart, jStop; + int i,j; + + // parcours des composantes de couleur + for (int c=0;c<nbChannels;c++){ + + // parcours de l'image + for (int x=0;x<imageWidth;x++){ + for(int y=0;y<imageHeight;y++){ + //parcours de la fenêtre du filtre + + x-wSide/2 < 0 ? iStart = 0 : iStart = x-wSide/2; + x+wSide/2 > imageWidth-1 ? iStop = imageWidth : iStop = x+wSide/2+1; + y-wSide/2 < 0 ? jStart = 0 : jStart = y-wSide/2; + y+wSide/2 > imageHeight-1 ? jStop = imageHeight : jStop = y+wSide/2+1; + + for(i=iStart; i< iStop ; i++){ + for(j=jStart;j<jStop;j++){ + //remplissage de la fenêtre du filtre + window.push_back(img.getPixelAt(i,j,c)); + }//j + }//i + + size_t size = window.size(); + sort(window.begin(), window.begin()+size); + outputImage->setPixelAt(x, y, c, window[size/2]); + window.clear(); + }//y + }//x + }//c + + //conversion de la taille de la fenêtre en string pour l'affichage de l'image résultat + string str; + ostringstream convert; + convert << wSide; + str = convert.str(); + + outImage(outputImage, "Image filtered (median"+str+"x"+str+")"); + } + private: + Image img; + int wSide;//largeur de la fenêtre + vector<int> window; +}; + +extern "C" Plugin* loadPlugin() { + Plugin* plugin = new Plugin("Median"); + plugin->addOperation(new MedianCroix()); + plugin->addOperation(new MedianCarre()); + return plugin; +} + +extern "C" void unloadPlugin(Plugin* plugin) { + delete plugin; +} diff --git a/plugins/Median/Median/main.cpp b/plugins/Median/Median/main.cpp new file mode 100644 index 0000000..9563a95 --- /dev/null +++ b/plugins/Median/Median/main.cpp @@ -0,0 +1,31 @@ +#include "main.h" + +// a sample exported function +void DLL_EXPORT SomeFunction(const LPCSTR sometext) +{ + MessageBoxA(0, sometext, "DLL Message", MB_OK | MB_ICONINFORMATION); +} + +BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) +{ + switch (fdwReason) + { + case DLL_PROCESS_ATTACH: + // attach to process + // return FALSE to fail DLL load + break; + + case DLL_PROCESS_DETACH: + // detach from process + break; + + case DLL_THREAD_ATTACH: + // attach to thread + break; + + case DLL_THREAD_DETACH: + // detach from thread + break; + } + return TRUE; // succesful +} diff --git a/plugins/Median/Median/main.h b/plugins/Median/Median/main.h new file mode 100644 index 0000000..2bd887e --- /dev/null +++ b/plugins/Median/Median/main.h @@ -0,0 +1,28 @@ +#ifndef __MAIN_H__ +#define __MAIN_H__ + +#include <windows.h> + +/* To use this exported function of dll, include this header + * in your project. + */ + +#ifdef BUILD_DLL + #define DLL_EXPORT __declspec(dllexport) +#else + #define DLL_EXPORT __declspec(dllimport) +#endif + + +#ifdef __cplusplus +extern "C" +{ +#endif + +void DLL_EXPORT SomeFunction(const LPCSTR sometext); + +#ifdef __cplusplus +} +#endif + +#endif // __MAIN_H__ -- GitLab