Я работаю с Visual Studio 10, QT Addin и библиотеки Opecv.
Я хочу загрузить несколько файлов с помощью цикла for:
(У меня есть ui.image_templates_comboBox-> currentText () = «cat»)
for (int i = 1; i <= 15; i++){
string currentText = ui.image_templates_comboBox->currentText().toStdString();
char name[40];
sprintf(name, "Logos/cat/%s_%d.tif", ¤tText, i);
templ_img [i] = cv::imread( name );
Итак, я подумал, что это должно работать нормально, но когда я отлаживаю его, я наводю указатель мыши над «name» и замечаю, что перед значением currentText стоят 4 неанглийских символа.
Я задаю 2 вопроса:
а) Как можно пропустить эти 4 бесполезных символа? (Я набрал их как «1234», так как этот сайт не может их отображать)
б) Можно свернуть эти 4 строки в 1, используя выражение внутри imread ()?
Вы много смешиваете фреймворки и не понимаете как sprintf
работает. Исправить это так:
for (int i = 1; i <= 15; i++){
QString fileName = QString("Logos/cat/%1_%2.tif")
.arg(ui.image_templates_comboBox->currentText())
.arg(i);
templ_img [i] = cv::imread(fileName.toAscii().data()); // or: toLocal8Bit, toLatin1(), toUtf8()
Вы не можете использовать адрес std::string
где const char*
ожидается. Они не то же самое.
sprintf(name, "Logos/cat/%s_%d.tif", currentText.c_str(), i);