Я пытаюсь получить a simple OpenCV sample, работающий на C++ в Windows, и мой C++ более чем ржавый.Преобразование _TCHAR * в char *
The sample довольно прост:
#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;
}
Когда я делаю новый простой C++ консольное приложение (с ATL) в Visual Studio 2012 Я получаю другой шаблон для main
:
int _tmain(int argc, _TCHAR* argv[])
Так что перед Я отправляю имя файла в функцию imread
OpenCV. Мне нужно преобразовать _TCHAR*
arg[1]
в char*
. С помощью простого файла, «OpenCV-logo.jpg», из памяти в окне памяти, я могу видеть, что _TCHAR принимают два байта каждого
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
В соответствии с рекомендацией преобразования в another answer Я пытаюсь использовать ATL 7.0 String Conversion Classes and Macros вставив следующий код:
char* filename = CT2A(argv[1]);
Но в результате память беспорядок, конечно, не 'OpenCV-logo.jpg' как строка ASCII:
fe fe fe fe fe fe fe fe fe fe ...
þþþþþþþþþþ ...
Какой метод преобразования, функция или макрос я должен использовать?
(нотабене This может быть связан вопрос, но я не могу видеть, как применять the answer здесь.)
Ваш шаблон проекта пытается создать проект на C++ для поддержки юникода. Я не помню конкретные параметры проекта/компилятора, но должно быть что-то, чтобы указать, использует ли Unicode или нет. – OldProgrammer
Он находится на странице [общая страница свойств проекта] (http://msdn.microsoft.com/en-us/library/vstudio/8x480de8.aspx) – user786653
Вам нужна USES_CONVERSION; в верхней части каждой функции, которая использует макросы преобразования? –