2015-06-03 60 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

相關問題