【问题标题】:Giving a string variable as a filename in matlab在matlab中将字符串变量作为文件名
【发布时间】:2015-06-23 08:45:18
【问题描述】:

我正在使用下面提到的代码根据图像的 id 从 images_1 文本文件中获取图像的文件名作为字符串,并使用它们从其目录中读取图像

image_count=1;
for image_count=1:6
    file=fopen('D:\Academics\New folder\CUB_200_2011\images_1.txt','r');
    C = textscan(file, '%s');
    original_image=imread('D:\Academics\New folder\CUB_200_2011\images\%s','C{1}{2*(image_count)}');
    imshow(original_image)
end

我能得到文件名但不能使用它。 此代码显示以下错误-

'文件“D:\Academics\New folder\CUB_200_2011\images\%s”不存在。

我对matlab有点陌生,谁能帮帮我。

【问题讨论】:

  • 您的文件名是如何存储在 images_1.txt 中的?它们是否包含图像的完整路径或仅包含文件名(例如:“image_2.png”等)?
  • 它们实际上是像这样给出文件夹名称和文件名称的完整路径-01.Black_footed_Albatross/Black_Footed_Albatross_0046_18.jpg
  • %s 中的 imread 构造不会被第二个参数替换。使用strcat 连接路径和文件名。所以你可以这样调用:imread(strcat('D:\Academics\New folder\CUB_200_2011\images\',C{1}{2*(image_count)}))
  • @Matt 这就是我的想法,所以我说要使用sprintf。但我想还有更多问题。
  • 但是 strcat 也不起作用,它显示-文件“D:\Academics\New folder\CUB_200_2011\images\%s001.Black_footed_Albatross/Black_Footed_Albatross_0046_18.jpg”不存在。它没有取代 %s

标签: string matlab filenames


【解决方案1】:

要连接部分文件路径,您必须使用fullfile

 imread(fullfile('D:\Academics\New folder\CUB_200_2011\images\',C{1}{2*(image_count)}))

Strcat 是一种替代方法,但 fullfile 负责在需要时使用一个文件分隔符。

【讨论】:

    【解决方案2】:

    您需要将反斜杠\ 更改为正斜杠/,否则一些\ 后跟一个字母可能是sprintf 函数中的命令,例如\N\a .更多信息请参见formatSpec区域中的sprintf documentation

    original_image=imread(sprintf('D:/Academics/New folder/CUB_200_2011/images/%s', C{1}{2*(image_count)}));
    

    【讨论】:

    • 这显示以下错误 - 警告:转义序列“A”无效。有关有效的转义序列,请参见“help sprintf”。使用 imread 时出错(第 367 行)无法打开文件“D:”进行读取;您可能没有阅读权限。我应该更改图像的路径
    • C{1}{2*(image_count)} 是什么?
    • 图片目录和图片名称是这样的-01.Black_footed_Albatross/Black_Footed_Albatross_0046_18.jpg
    • 是的,但是如果你将它传递给whos 函数,你会得到什么?
    • 我在答案中添加了一些解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-15
    • 1970-01-01
    • 1970-01-01
    • 2017-04-04
    • 1970-01-01
    • 2021-07-15
    相关资源
    最近更新 更多