Scilab SIVP - eiichiromomma/CVMLAB GitHub Wiki
Scilab) SIVP
(SIPよりパワフルな画像処理ToolBox
OpenCVを内部で使っているらしいので期待が持てる。 動画像処理もできる。
導入
Windowsの場合はインストーラがあるので実行しておしまい。 非常に便利。
有効化
Scilabを起動したらtoolboxesメニューからSIVPを選ぶ
動画像処理
カメラのオープン
n=camopen()
でnにインデックスを取得できる。
※camopen()の実行は1回で良い。カメラが1台にもかかわらず複数回実行すると、その分だけインデックスが更新されるが実態は最初に取得したインデックスとしか結び付かない。 間違えて取得してしまった場合はaviclose(インデックス)で開放できる。
以下のソースでは毎回解放することにした。
フレームの取得
特別な操作は殆ど必要無く、ループ中にavireadframeで画像を取得→処理といった流れになる。 camopenの所から書くと次のようになる。
n=camopen();
for f=1:500
im=avireadframe(n);
imshow(im);
end
aviclose(n);
フレームごとの処理
n=camopen();
for f=1:500
im=avireadframe(n);
im=rgb2gray(im);
E=edge(im,'sobel');
imshow(E);
end
aviclose(n);
stack size exceeded! (Use stacksize function to increase it)というエラー
stacksize関数でスタックの容量を増やす。
stacksize(20000000);
フレームの保存
n=camopen();
im=avireadframe(n);
im(:,:,:,2)=avireadframe(n);
for f=1:50
im(:,:,:,f)=avireadframe(n);
end
for f=1:50
imshow(im(:,:,:,f));
sleep(33);
end
aviclose(n);
とでもして
nf=avifile('test.avi',[240;320],20);
for f=1:50
addframe(nf,im(:,:,:,f));
end
aviclose(nf);
でaviに保存できる筈なのだが、うちの環境では保存できない。
一応ちゃんとした動画像処理
realtime()という関数で実時間制御が出来るらしい。 但し、カメラからのキャプチャ等のスピードが出ないので1/10も難しい。
realtimeinit(t)で時間の単位[s]を決める。下の例では0.5sごとにキャプチャしてエッジ抽出したものを表示させる。 一応下のソースできっかり3分動いたので単位中に処理が終わればそこそこ正確?うちの環境ではこの速さが限界。
n=camopen();
realtimeinit(1/5);
realtime(0);
for f=1:900
realtime(f);
im=avireadframe(n);
im=rgb2gray(im);
E=edge(im,'sobel');
imshow(E);
end
aviclose(n);
関数(使ったのだけ)
filter2
MATLABとの違いは第3引数が無い事。 'same'の扱いになるらしい。 ラプラシアンの単純な例
chdir('C:\Program Files\scilab-4.1.2\contrib\SIVP-0.4.3\images');
im=imread('lena.png)');
imshow(im)
f=[0,-1,0;-1,4,-1;0,-1,0];
im2=filter2(f,im(:,:,2));
imshow(im2)
fspecial
MATLABと使い方は同じ。 面倒なのでこっち 参照