2015-06-03 37 views
3

我有这样的代码;“无法打开文件”C:“用于阅读;您可能没有读取权限。”在MATLAB中的错误

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

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

但我得到这个错误:

Can't open file "C:" for reading;
you may not have read permission.

我该如何解决这一问题?

感谢,

+2

这是奇怪的。第二行中的'sprintf'是不必要的,但这不是造成这种情况的原因。你确定路径是正确的吗? – buzjwa

+0

路径为C:\ Users \ hasan_000 \ Documents \ MATLAB \ Project \ Images。例如,C:\ Users \ hasan_000 \ Documents \ MATLAB \ Project \ Images \ 1.jpg。我的100张图片被重新命名为'number'.jpg – yusuf

回答

5

代码应该输出警告:

"Warning: Escape sequence '\U' is not valid. See 'help sprintf' for valid escape sequences. "

你需要使用sprintf的时候逃跑的\。使用年代码pathC:。有关如何正确转义的示例,请检查文档sprintf。相反,我会使用此代码:

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

因此,Daniel的语法路径是什么? – yusuf

+1

使用'fullfile'很好的触摸! – Shai

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');

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

2

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

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

path = C:

所以这就是你的代码休息。我目前没有坐在Windows机器上,但我会尝试从反斜杠\反斜杠到正常的/,看看它是否可以打开它。

方法二的工作是肯定的:

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

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

相关问题