#1 Le 04/12/2012, à 00:15
- lu-k41
Equivalences Visual Studio - CodeBlocks
Bonsoir,
Un ami m'a envoyé le code suivant, créé sur Visual Studio sur Windows :
// essai.cpp : définit le point d'entrée pour l'application console.
#include "cv.h"
#include "cxcore.h"
#include "highgui.h"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
// On fixe la taille de l'image à 640x480
CvSize size = cvSize(640,480);
// On récupère l'image donnée par la caméra par défaut
CvCapture* capture = cvCaptureFromCAM( 0 );
// On fixe l'intervalle HSV qui filtre les couleurs selon ce que l'on veut récupérer
CvScalar hsv_min = cvScalar(0, 0, 0, 0);
CvScalar hsv_max = cvScalar(255, 255, 255, 0);
// On crée les images qui contiendront le filtre HSV et les résultats du seuillage
IplImage* hsv_frame = cvCreateImage(size, IPL_DEPTH_8U, 3);
IplImage* thresholded = cvCreateImage(size, IPL_DEPTH_8U, 1);
// On utilise une boucle "infinie" pour pouvoir travailler en temps réel
while( 1 )
{
// On récupère l'image donnée à l'instant t par la cam
IplImage* frame = cvQueryFrame( capture );
// On la convertit en HSV pour faciliter le filtrage des couleurs
cvCvtColor(frame, hsv_frame, CV_BGR2HSV);
// On filtre les couleurs non désirées
cvInRangeS(hsv_frame, hsv_min, hsv_max, thresholded);
// On réserve un emplacement mémoire pour les cercles de Hough
CvMemStorage* storage = cvCreateMemStorage(0);
// On applique un filtre Gaussien pour faciliter la détection
cvSmooth( thresholded, thresholded, CV_GAUSSIAN, 9, 9 );
// On repère les cercles de Hough et on les stock
CvSeq* circles = cvHoughCircles(thresholded, storage, CV_HOUGH_GRADIENT, 2,
thresholded->height/4, 100, 50, 10, 400);
for (int i = 0; i < circles->total; i++)
{
// On dessine un cercle identique au cercle de Hough détecté
float* p = (float*)cvGetSeqElem( circles, i );
printf("Ball! x=%f y=%f r=%f",p[0],p[1],p[2] );
cvCircle( frame, cvPoint(cvRound(p[0]),cvRound(p[1])),
cvRound(p[2]), CV_RGB(0,255,0), 3, 8, 0 );
}
cvShowImage( "Camera", frame );
cvShowImage( "HSV", hsv_frame);
cvShowImage( "Thresholded", thresholded );
cvReleaseMemStorage(&storage);
// On quitte le programme en appuyant sur Echap
if( (cvWaitKey(10) & 255) == 27 ) break;
}
cvReleaseCapture( &capture );
cvDestroyWindow( "mywindow" );
return 0;
}
Il s'agit d'un programme de détection de formes pour un projet.
Mon problème est que j'utilise Code::Blocks sur Ubuntu et que le code ne marche pas dessus : la première erreur est : erreur: ‘_TCHAR’ has not been declared
Après quelques recherches j'ai lu que _TCHAR était propre à Visual Studio (ou à Windows, je n'ai sans doute pas très bien compris, n'hésitez pas à me corriger si je me trompe), comme l'était le "#include "stdafx.h"" qui était en première ligne et que j'ai supprimé.
J'en ai donc conclu que ce code devait avoir plusieurs fonctions, bibliothèques ou variables propres à Visual Studio et je n'ai pas les connaissances nécessaires pour réadapter moi-même le code pour CodeBlocks.
Pouvez-vous me donner votre avis sur la question et éventuellement :
- m'indiquer quoi remplacer pour quoi pour réadapter le code
- me donner un autre IDE dont le fonctionnement serait plus proche de Visual Studio
- me dire que je me suis complètement trompé de problème et me donner toute autre solution valable
D'avance merci !
Hors ligne
#2 Le 04/12/2012, à 00:44
- Maisondouf
Re : Equivalences Visual Studio - CodeBlocks
Regardes du coté de MonoDevelop, c'est un IDE compatible .NET et VBvisual multiplateforme.
ASUS M5A88-v EVO avec AMD FX(tm)-8120 Eight-Core Processor, OS principal Precise 12.04.1 LTS 63bits½
Bricoleur, menteur, inculte, inadapté social et mythomane, enfin d'après certains....
"the secret of my form is summed up in two words, no sport" (Winston Churchill)
Hors ligne
#3 Le 04/12/2012, à 00:45
- xavier4811
Re : Equivalences Visual Studio - CodeBlocks
Manque peut être simplement stdio.h et stdlib.h pour remplacer l'entête de VS
Hors ligne
#4 Le 06/12/2012, à 00:04
- lu-k41
Re : Equivalences Visual Studio - CodeBlocks
Finalement j'ai remplacé " int _tmain(int argc, _TCHAR* argv[]) " par " int main ( int argc, char** argv ) " et ça a marché, mais merci quand même pour vos réponses !
Hors ligne