2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Вероятная проблема формирования file header Unix- Window
Сообщение10.11.2017, 14:12 
Аватара пользователя


05/06/08
477
Как преодолеть вот эту ошибку:
Цитата:
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 
Заслуженный участник
Аватара пользователя


06/10/08
6422
А пример заголовка плохого файла можете выложить?

 Профиль  
                  
 
 Re: Вероятная проблема формирования file header Unix- Window
Сообщение10.11.2017, 14:25 
Заслуженный участник


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

 Профиль  
                  
 
 Re: Вероятная проблема формирования file header Unix- Window
Сообщение10.11.2017, 14:38 
Заслуженный участник
Аватара пользователя


01/08/06
3131
Уфа
Возможно, результат 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 
Аватара пользователя


05/06/08
477
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 
Заслуженный участник
Аватара пользователя


06/10/08
6422
Я нагуглил вот такие куски кода: 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 
Аватара пользователя


05/06/08
477
Да, вот ещё у меня стоит French_Canada.1252, чтобы в тестовом режиме писать для Экселя.
Но не думаю, что запись в файл зависит от точек или запятых.
Это же не printf а fprintf

 Профиль  
                  
 
 Re: Вероятная проблема формирования file header Unix- Window
Сообщение10.11.2017, 14:51 
Заслуженный участник
Аватара пользователя


06/10/08
6422
MGM в сообщении #1264034 писал(а):
Это же не printf а fprintf
Они одинаково работают, printf это по сути частный случай fprintf.
Вы можете привести пример того, что получается-то? Только заголовок.

 Профиль  
                  
 
 Re: Вероятная проблема формирования file header Unix- Window
Сообщение10.11.2017, 14:53 
Аватара пользователя


05/06/08
477
Xaositect в сообщении #1264011 писал(а):
А пример заголовка плохого файла можете выложить?

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

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

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

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


06/10/08
6422
Файл в текстовом редакторе откройте и посмотрите, что у него вверху написано.

 Профиль  
                  
 
 Re: Вероятная проблема формирования file header Unix- Window
Сообщение10.11.2017, 15:22 
Аватара пользователя


05/06/08
477
Сейчас проверю, но возможно это дейсвительно French_Canada.1252
Так как разделители разные: запятая и точка.
В этом случае самая ценная идея - printf = fprintf.
Спасибо.

 Профиль  
                  
 
 Re: Вероятная проблема формирования file header Unix- Window
Сообщение10.11.2017, 18:33 
Аватара пользователя


05/06/08
477
Всем большое спасибо!!!!!
Действительно French_Canada.1252.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group