2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Вероятная проблема формирования file header Unix- Window
Сообщение10.11.2017, 14:12 
Аватара пользователя
Как преодолеть вот эту ошибку:
Цитата:
Error: whitespace expected in file after scale factor


В 2015м году использовал софт на MS 2005 и формировал выходные файлы по следующему коду
(образец был дан на сайте получателей результата):
Код:
void WriteFilePFM(float *data, int width, int height, const char* filename, float scalefactor=1/255.0)
{
    // Open the file
    FILE *stream = fopen(filename, "wb");
    if (stream == 0) {
        fprintf(stderr, "WriteFilePFM: could not open %s\n", filename);
   exit(1);
    }

    // sign of scalefact indicates endianness, see pfms specs
    if (littleendian())
   scalefactor = -scalefactor;

    // write the header: 3 lines: Pf, dimensions, scale factor (negative val == little endian)
    fprintf(stream, "Pf\n%d %d\n%f\n", width, height, scalefactor);

    int n = width;
    // write rows -- pfm stores rows in inverse order!
    for (int y = height-1; y >= 0; y--) {
   float* ptr = data + y * width;
   // change invalid pixels (which seem to be represented as -10) to INF
   for (int x = 0; x < width; x++) {
       if (ptr[x] < 0)
      ptr[x] = INFINITY;
   }
   if ((int)fwrite(ptr, sizeof(float), n, stream) != n) {
       fprintf(stderr, "WriteFilePFM: problem writing data\n");
       exit(1);
   }
    }
   
    // close file
    fclose(stream);
}

И тогда в 2015м эти файлы спокойно грузились на сайте Middleburry.
Теперь перешел на MS VS 2017 и попытался upload те же файлы.
Ответ: Error: whitespace expected in file after scale factor
Хозяева не дают точного ответа, так как с Windows традиционно не работают.

Это следсвие неправильного формирования заголовка,
Код:
    // write the header: 3 lines: Pf, dimensions, scale factor (negative val == little endian)
    fprintf(stream, "Pf\n%d %d\n%f\n", width, height, scalefactor);

или может быть данные сразу после заголовка?
или теперь они поменяли negative val == little endian
у меня он отрицательный.
На сайте обещали посмотреть через неделю,
но мне нужно загрузить результат как раз до этой даты.
Один и тот же deadline CVPR
Заранее благодарю за любую идею.

 
 
 
 Re: Вероятная проблема формирования file header Unix- Window
Сообщение10.11.2017, 14:20 
Аватара пользователя
А пример заголовка плохого файла можете выложить?

 
 
 
 Re: Вероятная проблема формирования file header Unix- Window
Сообщение10.11.2017, 14:25 
Не проше открыть файл в любом просмотрщике текста (FAR, HIEW, да хоть Блокнот винды) и глянуть что там за символ в конце строки с scale factor? А потом уж разбираться откуда он берётся в программе формирования файла. Тем более что нужно привести в порядок считанное количество файлов (один)? Ладно бы надо было тысячи файлов исправить, но один-то, почему не руками (в том же Блокноте)?!

 
 
 
 Re: Вероятная проблема формирования file header Unix- Window
Сообщение10.11.2017, 14:38 
Аватара пользователя
Возможно, результат fprintf для вещественных значений (%f) зависит от текущих системных настроек (точка или запятая как разделитель целой и дробной частей, вот это вот всё):
https://stackoverflow.com/questions/14753505/c-c-printf-use-commas-instead-of-dots-as-decimal-separator
Ну и если они там пробел просят, ну поставьте, что ли, пробел, поэкспериментируйте.

 
 
 
 Re: Вероятная проблема формирования file header Unix- Window
Сообщение10.11.2017, 14:41 
Аватара пользователя
worm2 в сообщении #1264029 писал(а):
Возможно, результат fprintf для вещественных значений (%f) зависит от текущих системных настроек (точка или запятая как разделитель целой и дробной частей, вот это вот всё):
https://stackoverflow.com/questions/14753505/c-c-printf-use-commas-instead-of-dots-as-decimal-separator
Ну и если они там пробел просят, ну поставьте, что ли, пробел, поэкспериментируйте.

Я эксперементировал. Но с настройками посмотрю, спасибо.

-- Пт ноя 10, 2017 15:42:18 --

Dmitriy40 в сообщении #1264017 писал(а):
Не проше открыть файл в любом просмотрщике текста (FAR, HIEW, да хоть Блокнот винды) и глянуть что там за символ в конце строки с scale factor? А потом уж разбираться откуда он берётся в программе формирования файла. Тем более что нужно привести в порядок считанное количество файлов (один)? Ладно бы надо было тысячи файлов исправить, но один-то, почему не руками (в том же Блокноте)?!

Файлов много. И перезапуск занимает пол часа.

 
 
 
 Re: Вероятная проблема формирования file header Unix- Window
Сообщение10.11.2017, 14:44 
Аватара пользователя
Я нагуглил вот такие куски кода: https://github.com/dscharstein/imageLib ... O.cpp#L457 и https://github.com/introlab/rtabmap/blo ... /io.h#L127
Так что подозреваю, что все-таки проблемы с выводом действительного числа.

 
 
 
 Re: Вероятная проблема формирования file header Unix- Window
Сообщение10.11.2017, 14:46 
Аватара пользователя
Да, вот ещё у меня стоит French_Canada.1252, чтобы в тестовом режиме писать для Экселя.
Но не думаю, что запись в файл зависит от точек или запятых.
Это же не printf а fprintf

 
 
 
 Re: Вероятная проблема формирования file header Unix- Window
Сообщение10.11.2017, 14:51 
Аватара пользователя
MGM в сообщении #1264034 писал(а):
Это же не printf а fprintf
Они одинаково работают, printf это по сути частный случай fprintf.
Вы можете привести пример того, что получается-то? Только заголовок.

 
 
 
 Re: Вероятная проблема формирования file header Unix- Window
Сообщение10.11.2017, 14:53 
Аватара пользователя
Xaositect в сообщении #1264011 писал(а):
А пример заголовка плохого файла можете выложить?

Честно говоря, не знаю как это увидеть.
Программы чтения у меня бибилотечные.
И как ни странно, свои файлы, как и файлы ground truth того же сайта что и аплоад мой софт читает без проблем.
То есть может они что-то добавили в бибилиотеку свою.

-- Пт ноя 10, 2017 15:55:40 --

Сейчас попробую залезть в стрим и что-нибудь распечатать. Тогда и поглядим.

 
 
 
 Re: Вероятная проблема формирования file header Unix- Window
Сообщение10.11.2017, 14:56 
Аватара пользователя
Файл в текстовом редакторе откройте и посмотрите, что у него вверху написано.

 
 
 
 Re: Вероятная проблема формирования file header Unix- Window
Сообщение10.11.2017, 15:22 
Аватара пользователя
Сейчас проверю, но возможно это дейсвительно French_Canada.1252
Так как разделители разные: запятая и точка.
В этом случае самая ценная идея - printf = fprintf.
Спасибо.

 
 
 
 Re: Вероятная проблема формирования file header Unix- Window
Сообщение10.11.2017, 18:33 
Аватара пользователя
Всем большое спасибо!!!!!
Действительно French_Canada.1252.

 
 
 [ Сообщений: 12 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group