【问题标题】:"Can't open file "C:" for reading; you may not have read permission." error in MATLAB“无法打开文件“C:”进行读取;您可能没有读取权限。” MATLAB 中的错误
【发布时间】:2015-08-17 10:52:16
【问题描述】:

我有这样的代码;

for x = 1:100
    path = sprintf('C:\Users\hasan_000\Documents\MATLAB\Project\Images\%d.jpg', x);
    imgarray = imread(sprintf(path));
end

我有一个包含 100 张图片的文件夹。我想通过循环自动上传将它们转换为矩阵。

但我得到这个错误:

无法打开文件“C:”进行阅读;
您可能没有读取权限。

我该如何解决这个问题?

谢谢,

【问题讨论】:

  • 这很奇怪。第二行中的sprintf 是不必要的,但这不是造成这种情况的原因。你确定路径正确吗?
  • 路径为 C:\Users\hasan_000\Documents\MATLAB\Project\Images。例如,C:\Users\hasan_000\Documents\MATLAB\Project\Images\1.jpg。我的 100 张图片从 1 到 100 重命名为 'number'.jpg

标签: image matlab image-processing svm imread


【解决方案1】:

代码应该输出警告:

“警告:转义序列 '\U' 无效。请参阅 'help sprintf' 以获得有效的转义 序列。 "

使用 sprintf 时需要转义 \。你的代码pathC:。有关如何正确转义的示例,请查看sprintf 的文档。相反,我会使用以下代码:

P=fullfile('C:\Users\hasan_000\Documents\MATLAB\Project\Images',sprintf('%d.jpg',x))
imgarray = imread(P);

【讨论】:

  • 那么,Daniel的语法路径可以是什么?
  • 使用fullfile的感觉很好!
【解决方案2】:

sprintf('C:\\Users\\hasan_000\\Documents\\MATLAB\\Project\\Images\\%d.jpg', x); 应该可以解决问题。

sprintf('%s%d%s','C:\Users\hasan_000\Documents\MATLAB\Project\Images\',x,'.jpg');

这是我的建议,因为它使代码更直观和可读。

【讨论】:

    【解决方案3】:

    sprintf 不喜欢文件名中的反斜杠\,因为它可能是特定命令的一部分。如果你只是运行路径文件,你会看到:

    path = sprintf('C:\Users\hasan_000\Documents\MATLAB\Project\Images\%d.jpg', 1);
    

    路径 = C:

    这就是您的代码中断的地方。我目前没有坐在 Windows 机器上,但我会尝试将斜杠从反斜杠 \ 反转为普通斜杠 /,看看它是否可以打开它。

    第二种方法确实有效:

    path = ['C:\Users\hasan_000\Documents\MATLAB\Project\Images\', sprintf('%d.jpg', x)]
    

    路径 = C:\Users\hasan_000\Documents\MATLAB\Project\Images\1.jpg

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-20
      • 1970-01-01
      • 2016-09-15
      • 1970-01-01
      • 2017-02-12
      • 2021-06-27
      • 1970-01-01
      • 2010-12-28
      相关资源
      最近更新 更多