2015-03-31 2 views
0

У меня есть процесс, выполняющийся несколько раз над изображением. Я хотел бы сохранить результат каждого промежуточного изображения, используя увеличивающееся имя;Итеративная процедура именования

Ie iteration1.png, iteration2.png и т. Д. Количество итераций может меняться между каждым исполнением.

У меня возникли проблемы с созданием имени.

Я использую строчки символов, а не строки для имени (именно так оно и есть, я получил функции, которые используют его так).

Как бы я закодировал имя = "итерация" + iter + ". Png"?

Я пробовал strcat, я пробовал с добавлением (+).

Моя последняя попытка: char name[] = strcat("result/",(char)i); name = strcat(name,".png");

Благодаря

+1

Нам нужно больше кода, или ошибка, которую вы получите –

+0

Попробуйте использовать текущее время в вашем файле – floppy12

+0

Я добавил свою последнюю попытку. – Konstabel

ответ

1

Я хотел бы написать что-то вроде:

std::ostringstream o; 

o << "iteration" << iter << ".png"; 

, используя o.str(), как имя файла.

+0

Это дает правильный результат. Однако моя команда вывода не принимает его. 'cvSaveImage (o.str(), image2),' дайте мне ошибку _Invalid arguments 'Кандидаты: int cvSaveImage (const char *, const void *, const int *)' _ – Konstabel

+0

o.str(). c_str() должно быть ОК, если вы хотите преобразовать строки в стиле C. Просто не храните полученный указатель или не делайте с ним ничего в cvSaveImage. Также не забудьте либо создать «o» каждую итерацию, либо вызвать o.clear(), иначе она будет накапливаться. – Robinson

+0

Это, а также _ \t - не может преобразовать 'станд :: basic_ostringstream :: __ string_type {ака станд :: basic_string }' на 'сопзЬ \t полукокса *' для аргумента '1' «INT cvSaveImage (Const символ *, Const CvArr *, const int *) '_ – Konstabel

3

Вы можете попробовать

const int MAX_LEN = 20; 
char name[MAX_LEN + 1]; 
snprintf(name, MAX_LEN, "iteration%d.png", iter). 
+1

Наверное, предпочитаем snprintf над sprintf, если использовать C lib-функции, по крайней мере, в эти дни. – Robinson

+0

Конечно - это должно быть безопаснее (ответ обновлен). –

+1

с помощью '% 03d' вы могли бы даже иметь такие удивительные имена, как:' iteration009'. Это может быть полезно при сортировке файлов. – Lanting

Смежные вопросы