Webカメラを開き、スクリーンショットを撮り、それを処理して、出力を表示するプログラムを実行しようとしています。コードは正しく実行され、出力を取得していますが、出力ウィンドウを閉じると、毎回このエラーが発生します。
Matlabシステムエラー:Matlabで内部問題が発生したため、閉じる必要があります。
私はMatlabを初めて使用するので、誰かが私を助けてくれますか?Windows8オペレーティングシステムとMatlabR2013aを使用しています。
これはコードです:
clear all;
close all;
clc;
video=videoinput('winvideo',1);
preview(video);
while(true)
data=getsnapshot(video);
R=data(:,:,1);
G=data(:,:,2);
B=data(:,:,3);
for i=1:768
for j=1:1024
if(R(i,j)<128)
out(i,j)=1;
else
out(i,j)=0;
end
end
end
cla; % Prevent stuffing too many images into the axes.
imshow(out);
drawnow;
end
WindowsまたはMacでエラーを再現する簡単なコードを次に示します(R2013b、組み込みのFaceTime HDカメラ)。
clear all;
close all;
% video = videoinput('macvideo',1);
video = videoinput('winvideo',1);
while true
data = getsnapshot(video);
cla;
imshow(data);
drawnow;
end
上記を実行し、画像を描画した後でウィンドウを閉じると、ウィンドウがクラッシュする可能性があります。奇妙なことに、私が確実に数回クラッシュさせた後、それをやめました。
何が起こっている?
エラーがランダムに消えたという事実は、ある種の競合状態を疑わせます。コードは特に正しくありませんが、Matlabがこのように激しくクラッシュすることはないはずなので、バグとして報告する必要があります。
どうすればこれを修正できますか?
問題は、無限while
ループの内側に描画されているウィンドウを閉じていることです。while
フィギュアが閉じたらループを壊す必要があります。また、video
オブジェクトの削除などのクリーンアップを実行することもできます。エラーを生成してはならないいくつかの素晴らしい高速コードがあります:
clear all;
close all;
clc;
if ispc
video = videoinput('winvideo',1);
elseif ismac
video = videoinput('macvideo',1);
else
video = videoinput(imaq.VideoDevice);
end
% preview(video);
% Create figure and get handle to image data
data = getsnapshot(video);
R = data(:,:,1);
out = double(R < 128);
h = imshow(out);
while true
data = getsnapshot(video);
R = data(:,:,1);
out = double(R < 128);
if ishghandle(h) % Only if figure still open
set(h,'CData',out); % Replace image data
else
break;
end
end
delete(video); % Clean up
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加