본문 바로가기

소프트웨어/MATLAB

MATLAB] 무한루프 getsnapshot의 속도저하 해결방법

무한루프내에서 웹캠을 통해 getsnapshot을 얻으면 엄청난 속도저하가 일어난다.

 

 

지난 몇달간 그냥 '아 매트랩은 원래 느리구나'하고있었는데 해결법을 발견하기위해 열심히 한땀 한땀 tic-toc을 찍어보며 어디가 문제인지 찾아보있다.

 

obj= videoinput(...)

int a=...

...

...

while(1)

while_img=getsnapshot(obj);

end

라는 코드를 생성했다고 가정한다.

>> tic

while_img=getsnapshot(obj);

toc

Elapsed time is 0.848691 seconds.

tic-toc함수로 연산시간을 체크해보니 무려 0.8초 ㄷㄷ 심할때는 1초까지 걸린다.

빠릿빠릿한 연산은 도저히 불가능한 시간이다. pause를 0.0000000000001초로 줘도 자동으로 딜레이가 1초정도 걸린다.

 

 

먼저 속도 저하가 일어나는 원인은, 매 루프마다 새로 video object를 실행해서 캡쳐하고 루프가 끝날때 video object를 닫는것에 있었다.('닫는'다는 표현이 맞는지는 모르겠다) video object를 새로 실행시키고 getsnapshot을 하는데 무려 1초가까이가 걸리던 것이다!! 이 사실에 착안해서 무한루프 실행전에 preview를 통해 미리 video object를 활성화 시켜줬더니 무려 getsnapshot이 160배가량 빨라졌다.

 

 

obj= videoinput(...)

preview(obj);

int a=...

...

...

while(1)

while_img=getsnapshot(obj);

end

이런식으로 먼저 video object를 활성화 시켜주었다!

 

 

 

 

//////더 좋은방법이 없을까 하며 구글링하던중 나와 똑같은 생각을 한 사람을 발견하였다.

http://stackoverflow.com/questions/8901824/getsnapshot-speedup

그런데 이 글에 답글을 보면 vision.VideoPlayer를 생성해서 데이터를 읽어오는 방법이 나와있는데

어떻게 사용하는지를 모르겠다.. vision 이란건 어디서 긁어와야하는거지..?

혹시 아시는분 계신가요?