0

やあ私は(神に誓って)動作するプログラムを書きましたが、動作しなくなりました。このコードは、一連の BMP を受け取り、それらを avi ファイルに変換します。これはコードです:

path4avi='C:/FadeOutMask/'; %dont forget the '/' in the end of the path
pathOfFrames='C:/FadeOutMask/';
NumberOfFiles=1;
NumberOfFrames=10;

%1:1:(NumberOfFiles)
for i=0:1:(NumberOfFiles-1)
FileName=strcat(path4avi,'FadeMaskAsael',int2str(i),'.avi') %the generated file
aviobj = avifile(FileName,'compression','None'); 
aviobj.fps=10;

    for j=0:1:(NumberOfFrames-1)
    Frame=strcat(pathOfFrames,'MaskFade',int2str(i*10+j),'.bmp') %not a good name for thedirectory
    [Fa,map]=imread(Frame);
    imshow(Fa,map);
    F=getframe();
    aviobj=addframe(aviobj,F)
    end
aviobj=close(aviobj);
end    

そして、これは私が得るエラーです:

??? Error using ==> checkDisplayRange at 22
HIGH must be greater than LOW.

Error in ==> imageDisplayValidateParams at 57
common_args.DisplayRange = checkDisplayRange(common_args.DisplayRange,mfilename);

Error in ==> imageDisplayParseInputs at 79
common_args = imageDisplayValidateParams(common_args);

Error in ==> imshow at 199
  [common_args,specific_args] = ...

Error in ==> ConverterDosenWorkd at 19
    imshow(Fa,map);

何らかの理由で、コードセグメントとして配置できません。ごめん

ありがとうございました

アリエル

4

2 に答える 2

0

発生するエラーを再現できる唯一の方法はmap、最初の要素が2番目の要素よりも大きい2要素のベクトルである場合です。最初に、関数IMSHOWを次の構文で呼び出すことができることに注意してください。

imshow(I,[low high]);

Iグレースケール画像でありlowhighピクセル強度の表示範囲を指定します。IがRGB画像の場合、余分な引数は無視されますが、その場合でも、の値はhighの値よりも大きくなければなりません。そうでない場合lowは、エラーがスローされます(上記の値)。

紛らわしいのは、なぜmap2要素のベクトルになるのかということです。IMREADを使用して画像をロードすると、map出力は空になるか(画像がインデックス付き画像でない場合)、N行3列のカラーマップになります。組み込みのIMREADmapが2つの要素だけで引数を 返すような状況は考えられません。

あなたがそれが機能していると言ったが、今は突然機能しなくなったという事実に基づいて、私はあなたが誤って名前のどこかにm-ファイルを作成したかどうかを最初にチェックすることをお勧めしますimread。これを行うと、組み込み関数の代わりにその新しいimread関数が呼び出され、予想とは異なる出力が得られる可能性があります。

于 2010-04-13T15:36:59.267 に答える
0

BMP 画像はインデックス化されていますか? mapこのパラメーターは、インデックス付きのカラーマップを持つ画像にのみ適用されると思います。

于 2010-04-12T23:00:44.183 に答える