2016-03-28 21 views
-3

yapısında idi Bu kod hakkında yardım aldım, ancak kodu derlerken bir hata var gibi görünüyor.Bu türlerden biri olması beklenen girdi: char Bunun yerine yapısı

"Expected input to be one of these types: 
char 
Instead its type was struct." 

ne yanlış olabilir:

function search; 

Videoinfo = dir('*videotest.avi'); 

File = {Videoinfo}; 

nfiles = length(File); 

if nfiles == 0 
    error('No avi files available in this directory'); 
end 
for objnum = 1 : nfiles 
    videoobjs(objnum) = VideoReader(File{objnum}); 
end 
outobj = VideoWriter('newvideo.avi'); 
open(outobj); 

while true 
    someleft = arrayfun(@hasFrame, videoobjs); 

    if ~all(someleft); break; end 

    for objnum = 1 : nfiles 

    thisframe(:,:,:,objnum) = readFrame(videoobjs(objnum)); 

    meanframe = mean(thisframe, 4); 

    writeVideo(outobj, meanframe); 

    end 

end 

close(outobj); 

for objnum = 1 : nfiles 
    close(videoobjs(objnum)); 
end 
end 

aşağıdaki hata programı çalıştırırken görünen tutar? (dir döndü) değişken, VideoInfo dizeleri bir structdeğil bir hücre dizisi olduğu için

+0

iplik yardım https için burada her bir listeye File ayarlamak olacaktır: //www.mathworks .com/matlabcentral/answers/273516-no-avi-files-available –

+0

Kodunuzu hata ayıklayıcısını kullanarak adım adım çalıştırın ve veri yapısını kontrol edin. 'dir' bir yapıyı döndürür, bir liste değil. Bu, dosya adı olmayan "File {objnum}" biter. – Daniel

cevap

0

acil bir konudur. Bu nedenle, dosya adına erişmek için struct'un name alanına başvurmanız gerekecektir.

kolay seçenek (ve hangi görünüyor ne istediğini olmak) dosya adları

% This will create a cell array of all filenames. NOTE the use of the NAME field 
File = {Videoinfo.name}; 

% Then later 
videoobjs(objnum) = VideoReader(File{objnum}); 
+0

Mükemmel çalıştı ve hatayı kaldırdı, ancak maalesef başka bir hata ortaya çıktı. Gerekli kodek belirlenemedi. VideoReader'da Hata (satır 172) obj.init (fileName); Aramada hata (satır 11) videoobjs (objnum) = VideoReader (Dosya {objnum}); Bu, yazılımı indirirken Matlab'ın tüm kodeklere sahip olması gerektiğinden beni şaşırtıyor çünkü .avi artık kabul edilebilir bir format değil. –

+0

@AndrewCardozo Bu, 'VideoReader' ve makinenize özgü bir özellik. Bir not olarak, AVI bir * container * formatıdır ve gerçekten de video AVI içinde birçok yoldan biriyle * kodlanabilir, bu yüzden bir AVI çalışacağı anlamına gelmez. [Daha fazla bilgi burada] (http://www.mathworks.com/help/matlab/import_export/supported-video-file-formats.html). Hala sorun yaşıyorsanız, yeni bir soru uygun olabilir. – Suever

+0

Tüm yardımlarınız için teşekkür ederim, bunu anlayamazsam yeni bir soru yayınlayabilirim. –

İlgili konular