我正在使用Visual Studio 10,qt插件和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", &currentText, i);
    templ_img [i] = cv::imread( name );

因此,我认为这应该可以正常工作,但是当我调试它时,将鼠标悬停在“名称”上方,并且我注意到在currentText值之前有4个非英语字符。

我问两个问题:

a)如何省略这四个无用字符? (我将其键入为“1234”,因为此网站无法显示它们)
  • 名称0x003a7b04“Logos / cat / 1234cat_1.tif” char [40]

  • b)是否可以使用imread()内的表达式将这4行折叠成1条?

    最佳答案

    您将框架混合得太多了,却不了解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()
    

    07-28 01:33