이 페이지는 기계 번역을 사용하여 번역되었습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
getsnapshot를 사용하여 루프에서 단일 이미지 수집
R2026a이 예제에서는 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);
프레임을 Figure 창에 표시합니다.
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)