이 페이지는 기계 번역을 사용하여 번역되었습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
getsnapshot
를 사용하여 루프에서 단일 이미지 수집
이 예제에서는 getsnapshot
함수를 사용하는 방법을 보여줍니다. 단일 비디오 프레임을 빠르게 수집하려면 getsnapshot
함수를 사용하세요.
수집 객체 설정
Image Acquisition Toolbox™와의 대부분의 상호작용은 비디오 입력 객체를 통해 이루어집니다. 이러한 객체는 videoinput
명령으로 생성됩니다. 이 예제에서는 winvideo
어댑터를 통해 액세스하는 웹캠을 사용합니다.
vidobj = videoinput('winvideo')
Summary of Video Input Object Using 'Microsoft® LifeCam Cinema(TM)'. Acquisition Source(s): input1 is available. Acquisition Parameters: 'input1' is the current selected source. 10 frames per trigger using the selected source. 'YUY2_1280x720' video data to be logged upon START. Grabbing first of every 1 frame(s). Log data to 'memory' on trigger. Trigger Parameters: 1 'immediate' trigger(s) on START. Status: Waiting for START. 0 frames acquired since starting. 0 frames available for GETDATA.
이 카메라의 디폴트 비디오 포맷이 YUY2_1280x720
이므로 이미지는 YCbCr
컬러스페이스로 반환됩니다. ReturnedColorSpace
속성 값을 지정하여 컬러스페이스를 rgb
로 변경합니다.
vidobj.ReturnedColorSpace = "rgb";
프레임 수집
단일 프레임을 얻으려면 getsnapshot
함수를 사용하세요.
snapshot = getsnapshot(vidobj);
프레임을 도형 창에 표시합니다.
imagesc(snapshot)
여러 프레임 수집
일반적인 작업 중 하나는 단일 이미지를 반복적으로 수집하고, 이를 처리한 다음 결과를 저장하는 것입니다. 이렇게 하려면 루프에서 getsnapshot
를 호출합니다.
for i = 1:5 snapshot = getsnapshot(vidobj); imagesc(snapshot); end
타이밍 의미
getsnapshot
함수는 호출되면 많은 작업을 수행합니다. 장치에 연결하고, 장치를 구성하고, 수집을 시작하고, 한 프레임을 수집하고, 수집을 중지한 다음 장치를 닫아야 합니다. 즉, 하나의 프레임을 수집하는 데 예상했던 카메라의 프레임 속도보다 훨씬 더 오랜 시간이 걸릴 수 있다는 의미입니다. 이를 설명하기 위해 루프에서 getsnapshot
를 호출해 보겠습니다.
20개의 프레임을 수집하는 데 걸리는 시간을 측정합니다.
tic for i = 1:20 snapshot = getsnapshot(vidobj); end elapsedTime = toc
elapsedTime = 0.9685
프레임당 시간과 효과적인 프레임 속도를 계산합니다.
timePerFrame = elapsedTime/20
timePerFrame = 0.0484
effectiveFrameRate = 1/timePerFrame
effectiveFrameRate = 20.6510
다음 예는 루프를 수행하는 더 효율적인 방법을 보여줍니다.
수동 트리거 모드 사용
이전 설정에서 설명한 getsnapshot
의 오버헤드를 피하려면 videoinput
객체의 수동 트리거 모드를 사용하면 됩니다. 수동 트리거 모드를 사용하면 툴박스가 메모리에 데이터를 기록하지 않고 한 번만 장치에 연결하고 장치를 구성할 수 있습니다. 이는 프레임을 더 짧은 지연으로 MATLAB®으로 반환할 수 있음을 의미합니다.
객체를 수동 트리거 모드로 구성합니다.
triggerconfig(vidobj, 'manual');
이제 장치가 수동 트리거에 맞게 구성되었으므로 start
를 호출합니다. 이렇게 하면 장치가 MATLAB로 데이터를 다시 전송하지만 이 시점에서는 프레임을 메모리에 기록하지 않습니다.
start(vidobj)
20개의 프레임을 수집하는 데 걸리는 시간을 측정합니다.
tic for i = 1:20 snapshot = getsnapshot(vidobj); end elapsedTime = toc
elapsedTime = 0.7926
프레임당 시간과 효과적인 프레임 속도를 계산합니다.
timePerFrame = elapsedTime/20
timePerFrame = 0.0396
effectiveFrameRate = 1/timePerFrame
effectiveFrameRate = 25.2339
stop
함수를 호출하여 장치를 중지합니다.
stop(vidobj)
수동 트리거를 사용하면 경과 시간이 이전 예보다 훨씬 짧은 것을 볼 수 있습니다.
정리
비디오 입력 객체가 더 이상 필요하지 않으면 관련 변수를 삭제합니다.
delete(vidobj)