2016-09-24 3 views
4

J'utilise Windows 10 et Visual Studio 2015. En C++, j'ai besoin d'obtenir la transformée de Fourier d'une image pour y appliquer des filtres. Il semble que FFTW ++ soit la solution idéale pour cela, mais je n'arrive pas à la compiler et cela me rend fou. Je suis relativement nouveau à la programmation donc je ne sais pas à quel point c'est embarrassant. J'ai utilisé la fonction NuGet dans Visual Studio pour obtenir la bibliothèque FFTW. Comme je ne pouvais pas le trouver sur NuGet j'ai téléchargé le truc FFTW + à partir du lien suivant: https://sourceforge.net/projects/fftwpp/ J'ai copié le contenu du téléchargement dans le dossier du projet, et inclus les fichiers d'en-tête dans l'explorateur de solution. Mais il n'a pas compilé, a jeté beaucoup d'erreurs bizarres (par exemple: dans les secondss.h il a dit qu'une fonction qui obtient le fuseau horaire est obsolète, et dans le fftww ++. H il a dit que std :: max est illégal) .Comment faire fonctionner FFTW ++ sur windows? (pour les nuls)

Donc, après avoir vu que cela ne fonctionne pas, je suis retourné sur le site Web de FFTW, et j'ai essayé d'utiliser le guide d'installation de Windows. http://www.fftw.org/install/windows.html J'ai téléchargé la version 64 bits, et je n'ai absolument aucune idée de la façon d'effectuer l'importation de la bibliothèque, ou même ce qu'il fait. i.imgur.com/Qs7mFQT.png C'est tout ce que j'ai, je suis complètement perdu.

Comment puis-je le compiler? S'il vous plaît si vous pouvez: écrivez-moi une explication aussi détaillée que possible sur la façon d'utiliser cette chose, je suis peut-être stupide mais je n'ai aucune idée de ce qui se passe, et je ne trouve pas de tutoriel sur Google.

Répondre

6

Obtenez le 64bit précompilées FFTW 3.3.5 DLL Windows

  1. Télécharger de fftw-3.3.5-dll64.zip
  2. Décompressez le fichier.

Créer la bibliothèque d'importation (fichier .lib)

  1. Les instructions de FFTW officielles sont here.
  2. Pour des informations sur la façon de lier une DLL à un programme Visual Studio C++ cet article MSDN Linking an Executable to a DLL en particulier la partie sur implicit linking est utile.
  3. Aussi utile, dans l'emplacement unzip, README-WINDOWS.
  4. Ouvrez le invite de commande de développement Visual Studio

    • Naviguer vers Démarrer ->Toutes les applications ->Visual Studio 2015 ->invite de commande Developer
    • Sur ma machine l'emplacement est C: \ Program Files (x 86) \ Microsoft Visual Studio 14.0 \ Common7 \ Tools \ VsDevCmd.batte
  5. naviguer jusqu'à l'emplacement de décompression et le type

    lib /machine:x64 /def:libfftw3-3.def

Generate .lib file

(pour une utilisation de précision à double longue unique ou libfftw3f-3.DEF ou libfftw3l-3 .def)

  • Ceci produira libfftw3-3.lib
  • Notez que ceci est pour x64.

Visual Studio Ouvrir et créer une application console C++

  1. Créer une application console C++ New visual studio C++ console app
  2. Accepter tous les paramètres par défaut Keep default settings
  3. Définir la plate-forme de solution à 64 bits x64 platform

Dites à Visual Studio où trouver le fichier d'en-tête FFTW.

(extrait de this SO répondre.)

Il existe différentes façons de le faire, est une façon ici.

  1. Dans l'explorateur de solution, faites un clic droit sur le projet et sélectionnez Propriétés. Project properties
  2. Ajoutez des répertoires d'inclusion supplémentaires. Ce sera l'emplacement de décompression. Additional include directories

(Alternativement, le fichier .h peut être copié dans le dossier du projet Visual Studio.)

Tell Visual Studio où trouver la bibliothèque d'importation FFTW.

  1. Cliquez à droite sur le projet et sélectionnez propriétés. Project properties
  2. Ajoutez des répertoires de bibliothèque supplémentaires. Ce sera l'emplacement de décompression. Additional library directories
  3. Ajouter une dépendance supplémentaire. Tapez le fichier .lib créé précédemment (libfftw3-3.lib). Additional dependency

Créer un exemple de programme

(De l'FFTW tutorial.)

#include "stdafx.h" 

#include <fftw3.h> 

int main() 
{ 
    fftw_complex *in, *out; 
    fftw_plan p; 

    int N = 32; 

    in = (fftw_complex*)fftw_malloc(sizeof(fftw_complex) * N); 
    out = (fftw_complex*)fftw_malloc(sizeof(fftw_complex) * N); 
    p = fftw_plan_dft_1d(N, in, out, FFTW_FORWARD, FFTW_ESTIMATE); 

    fftw_execute(p); /* repeat as needed */ 

    fftw_destroy_plan(p); 
    fftw_free(in); fftw_free(out); 

    return 0; 
} 

Compile

Dites Windows où trouver FFTW DLL La façon la plus simple est de copier la DLL FFTW (de libfftw3-3.dll) de l'emplacement dézipper à Visual Studio dossier de sortie.

  1. Dans Visual Studio clic droit sur la solution et sélectionnez Ouvrir le dossier dans fichier Exporer. Solution in File Explorer
  2. Naviguer vers le dossier de sortie Exe (par exemple fftw_helloworld2 \ x64 \ Debug) Exe output folder
  3. Copier la DLL libfftw3-3.dll

Run/Debug

  1. Définir un point d'arrêt
  2. Appuyez sur F5 ou Start debugger
0

Merci pour cela, il a résolu le problème que j'avais. Voici ma contribution à la réponse:

L'application console est par défaut x86 arch. J'ai dû utiliser la DLL 32 bits des gens de FFTW. Assurez-vous que vous spécifiez/machine: x86 lors de l'appel lib est avec la communauté VS2017

Ed