Windows 上の C++ で動作する単純な OpenCV サンプルを取得しようとしていますが、私の C++ は錆びているだけではありません。
サンプルはかなり単純です。
#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;
}
Visual Studio 2012 で新しい単純な C++ コンソール アプリケーション (ATL を使用) を作成すると、次の別のテンプレートが得られmain
ます。
int _tmain( int argc, _TCHAR* argv[] )
したがって、ファイル名を OpenCV のimread
関数に送信する前に、 を に変換する必要があり_TCHAR*
arg[1]
ますchar*
。メモリ ウィンドウのメモリから単純なファイル名「opencv-logo.jpg」を使用すると、_TCHAR がそれぞれ 2 バイトを使用していることがわかります。
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
別の回答の変換に関する推奨事項に従って、次のコードを挿入してATL 7.0 文字列変換クラスとマクロを使用しようとしています。
char* filename = CT2A(argv[1]);
しかし、結果のメモリはめちゃくちゃです。もちろん、ASCII 文字列としての「opencv-logo.jpg」ではありません。
fe fe fe fe fe fe fe fe fe fe ...
þþþþþþþþþþ ...
どの変換手法、関数、またはマクロを使用する必要がありますか?
(NBこれは関連する質問かもしれませんが、ここで回答を適用する方法がわかりません。)