2

C++ で OpenCV 2.4.6 と Qt 5.1.1 を使用するプロジェクトに取り組んでいます。通常どおりを使用して、コードのいくつかのポイントで画像処理のために画像をロードする必要がありますcv::imread。ただし、ソフトウェアを他の言語のファイルシステムと互換性を持たせたいと考えていたところ、ファイル パスに外国語の文字が含まれていると読み込みに失敗することがわかりました。

この問題は、 が(または)imreadしか取り込めず、Latin-1 以外の記号を含むパスを にキャストすると、UTF-8 ( 、これがパスの保存方法です)が複数の文字に変換されます。std::stringchar*std::stringQString

wstringファイル パスが有効であることを確認するために、通常の に aを渡してパスを開きました。これによりifstream、ファイルが正常に開き、ビットが読み取られます。私たちの現在のハックは、イメージを としてロードしてQImageからデータを にコピーすることcv::Matですが、主に私たちが理解しているように、Qt::QImageイメージを 8 ビット形式でロードし、イメージが .より高いビット深度。

これを回避する「クリーンな」方法はありますか?この質問を見ましたtoAsciiが、非推奨であり、その代替品は機能しませんでした。QStringを に変換してstd::stringに渡す次の方法を試しましたimread

QString::toStdString(), QString::toUtf8().data(), QString::toLocal8Bit().data(), QString::toLatin1().data(). それらはすべて、ほぼ同じ結果をもたらすようです。

前もって感謝します。

4

1 に答える 1

1

結果を にQString::toStdWString()変換してみてください。std::wstringstd::string

于 2013-11-12T09:29:44.907 に答える