0

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

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

我问2个问题:

a) 怎么可能省略这 4 个无用的字符?(我将它们输入为“1234”,因为此站点无法显示它们)

  • 名称 0x003a7b04 "Logos/cat/1234cat_1.tif" 字符 [40]

b) 可以使用 imread() 中的表达式将这 4 行折叠为 1 行吗?

4

2 回答 2

5

您不能使用预期std::stringa的地址。const char*它们是不相同的。

sprintf(name, "Logos/cat/%s_%d.tif", currentText.c_str(), i);
于 2015-01-02T14:21:17.783 回答
2

您正在混合框架,但您不了解其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()
于 2015-01-02T14:36:39.547 回答