Мы работаем над проектом с использованием 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()
. Кажется, все они дают примерно одинаковые результаты.
Заранее спасибо.
Возможный дубликат [opencv imread() для Windows для имен файлов, отличных от ASCII] (http://stackoverflow.com/questions/24769623/opencv-imread-on-windows-for-non-ascii-file-names) –