J'essaye d'obtenir a simple OpenCV sample fonctionnant en C++ sur Windows et mon C++ est plus que rouillé.Conversion de _TCHAR * en char *
The sample est assez simple:
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
if(argc != 2)
{
cout <<" Usage: display_image ImageToLoadAndDisplay" << endl;
return -1;
}
Mat image;
image = imread(argv[1], IMREAD_COLOR); // Read the file
if(! image.data) // Check for invalid input
{
cout << "Could not open or find the image" << std::endl ;
return -1;
}
namedWindow("Display window", WINDOW_AUTOSIZE); // Create a window for display.
imshow("Display window", image); // Show our image inside it.
waitKey(0); // Wait for a keystroke in the window
return 0;
}
Quand je fais une nouvelle application console C++ simple (avec ATL) dans Visual Studio 2012 je reçois un autre modèle pour main
:
int _tmain(int argc, _TCHAR* argv[])
Alors avant J'envoie le nom de fichier à la fonction imread
d'OpenCV dont j'ai besoin pour convertir le _TCHAR*
arg[1]
en char*
. En utilisant un nom de fichier simple, « OpenCV-logo.jpg », de la mémoire dans la fenêtre de mémoire, je peux voir que le _TCHAR prennent deux octets chacun
o.p.e.n.c.v.-.l.o.g.o...j.p.g...
6f 00 70 00 65 00 6e 00 63 00 76 00 2d 00 6c 00 6f 00 67 00 6f 00 2e 00 6a 00 70 00 67 00 00 00
Suite à la recommandation de conversion en another answer Je suis en train d'utiliser ATL 7.0 String Conversion Classes and Macros en insérant le code suivant:
char* filename = CT2A(argv[1]);
Mais la mémoire résultante est un gâchis, certainement pas 'OpenCV-logo.jpg' comme une chaîne ascii:
fe fe fe fe fe fe fe fe fe fe ...
þþþþþþþþþþ ...
Quelle technique, fonction ou macro de conversion dois-je utiliser?
(N.B. This peut-être une question connexe, mais je ne peux pas voir comment appliquer the answer ici.)
Votre modèle de projet tente de créer un projet C++ pour le support Unicode. Je ne me souviens pas des options de projet/compilateur spécifiques, mais il devrait y avoir quelque chose à spécifier si vous utilisez unicode ou non. – OldProgrammer
C'est dans la [page de propriétés générales du projet] (http://msdn.microsoft.com/en-us/library/vstudio/8x480de8.aspx) – user786653
Avez-vous besoin d'un USES_CONVERSION; déclaration en haut de chaque fonction qui utilise les macros de conversion? –