C++ で OpenCV 2.4.6 と Qt 5.1.1 を使用するプロジェクトに取り組んでいます。通常どおりを使用して、コードのいくつかのポイントで画像処理のために画像をロードする必要がありますcv::imread
。ただし、ソフトウェアを他の言語のファイルシステムと互換性を持たせたいと考えていたところ、ファイル パスに外国語の文字が含まれていると読み込みに失敗することがわかりました。
この問題は、 が(または)imread
しか取り込めず、Latin-1 以外の記号を含むパスを にキャストすると、UTF-8 ( 、これがパスの保存方法です)が複数の文字に変換されます。std::string
char*
std::string
QString
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()
. それらはすべて、ほぼ同じ結果をもたらすようです。
前もって感謝します。