2017-09-21 53 views
0

Octaveで画像にパーティクルを簡単に追加する機能を書いていますが、問題があります。Octaveは画像をimread()したくないと思っています

function [ out ] = enparticle(mainImg, particleNames, particleData, frames, fpp, sFrame, eFrame) 

    %particleData format: 
    % [ p1Xline p1StartHeight p1EndHeight; 
    % p2Xline p2StartHeight p2EndHeight; 
    % p3Xline p3StartHeight p3EndHeight; 
    % ... ] 
    %particleNames format: 
    % [ p1Name; 
    % p2Name; 
    % p3Name; 
    % ... ] 

    pAmount = size(particleData, 1); 

    for i= 1:pAmount 
    tmp = particleNames(i,:) 
    [ pIMG pMAP pALPHA ] = imread(tmp); 
    end 

end 

私は

enparticle("ffield.png", [ "p_dot.png"; "p_star.png"; "p_dot.png" ], [ 100 50 100; 200 50 100; 300 50 100 ], 30, 10, 5, 25) 

と、この単純なコードを実行すると、私は私が(IMREADしようとすると、これはコンソール

tmp = p_dot.png 
error: imread: unable to find file p_dot.png 
error: called from 
    imageIO at line 71 column 7 
    imread at line 106 column 30 
    enparticle at line 24 column 23 

で書かれ得る)ことがあり、Octaveは考えて、この方法を提出このような名前のファイルはありません。しかし、それは実際にです。スクリプトファイルと同じフォルダにあります。

最も好奇心が強い事は、私が

tmp = particleNames(:,:) 

tmp = particleNames(i,:) 

を変更し、Octaveが配列としてtmpにするすべての名前を割り当てると、それは魔法のように渡された名前を持つすべてのファイルを見つける、ということです。

しかし、すべてのファイルが置き換えられたり、マージされたり、画像処理に合わせてsthされたりするので、私が動作させたいのではありません。

このようにしているのはなぜか事実と一致しているのですが、私は各フレーム(画像とアルファ)を​​別々にセル配列に入れたいと思っています。

私は完全に私が間違って何をすべきかについての手掛かりを持っていないとどこにもまた、それをグーグルことができません:(

答えて

3

コード:

filenames = [ "p_dot.png"; "p_star.png"; "p_dot.png" ] 

をあなたがそれを考えて何をしません。これは、文字の2次元 配列を作成しますん。関心ノートの

octave> size (filenames) 
ans = 

    3 10 

を参照してください、それは10個の列が表示されていることである。あなたのを見てみましょうファイル名が 、長さが9、長さが10であることがわかります。しかし、これは数値行列のように です。唯一の違いはascii 文字です。数値行列と同様に、すべての行には長​​さが必要です。 何が起こっているのですか。最短の行に空白が埋め込まれていますか? あなたは、ファイル名のASCII 10進コード をチェックすることでこれを確認することができます:最初の3行目が「32」で終わるか

octave> int8 (filenames) 
ans = 

    112 95 100 111 116 46 112 110 103 32 
    112 95 115 116 97 114 46 112 110 103 
    112 95 100 111 116 46 112 110 103 32 

注意を。 ASCIIでは、それは スペース文字(テーブルを持っているwikipedia article about ASCIIを参照してください)

だから、問題はその関数imreadは 「p_dot.png」という名前のファイルを見つけられないではないですが、問題はそれが見つからないということですファイル名は 'p_dot.png'です。

これには文字配列を使用しないでください。代わりに、 セル配列を使用します。 char配列のセル配列内。これと同じように:

filenames = {"p_dot.png", "p_start.png", "p_dot.png"} 
for i = 1:numel (filenames) 
    fname = filenames{i}; 
    [pIMG, pMAP, pALPHA] = imread (fname); 
    ## do some stuff 
endfor 
+0

私はちょうどそれを発見し、ここに書きたかったが、あなたは最初にあってきました; D おかげでたくさんのお時間を過ごし、解決:) –

関連する問題