2013-11-10 5 views
1

Мы работаем над проектом с использованием OpenCV 2.4.6 и Qt 5.1.1 на C++. Мы должны загружать изображения для обработки изображений в нескольких точках нашего кода, которые мы использовали, используя cv::imread, как обычно. Однако мы хотели сделать программное обеспечение совместимым с другими языковыми файловыми системами и обнаружили, что наличие путей к файлам с иностранными символами не будет загружаться.OpenCV imread с иностранными символами

Проблемы, по нашему мнению, связаны с тем фактом, что imread может принимать только в std::string (или char*) и отливка пути с не латинскими 1-символами в std::string результатов в символах, которые используют несколько байт UTF-8 (кодировка, используемая для QString, которая хранит пути), преобразуется в несколько символов.

Чтобы подтвердить, что пути к файлам действительны, мы открыли их, передав wstring обычным ifstream, который успешно открывает файл и считывает биты. Наш текущий взлом - загрузить изображение как QImage, а затем скопировать данные на cv::Mat, но это не удовлетворительное решение по нескольким причинам, главным образом, поскольку, как мы понимаем, Qt::QImage загружает изображения в формате 8 бит, а наши изображения имеют более высокую битовую глубину.

Есть ли какой-либо «чистый» способ обойти это? Я видел this вопросов, но toAscii устарел, и его замена не сработала для нас. Мы пробовали следующие способы преобразования QString в std::string и передачи их imread.

QString::toStdString(), QString::toUtf8().data(), QString::toLocal8Bit().data(), QString::toLatin1().data(). Кажется, все они дают примерно одинаковые результаты.

Заранее спасибо.

+0

Возможный дубликат [opencv imread() для Windows для имен файлов, отличных от ASCII] (http://stackoverflow.com/questions/24769623/opencv-imread-on-windows-for-non-ascii-file-names) –

ответ

1

Вы можете попробовать QString::toStdWString(), а затем преобразовать полученный std::wstring в std::string.