Can vision.For​egroundDet​ector work on GUI

Hi, Can I use GUI to display foreground from vision.ForegroundDetector? By using the same method I can extract the foreground. But in the GUI I can't display the foreground. Please help, thanks

댓글 수: 3

Image Analyst
Image Analyst 2017년 8월 14일
Why not? Did you call imshow()?
Leona Chan
Leona Chan 2017년 8월 14일
Yes, I had. I can display the frame, but foreground cannot. These are some pieces of code
function playCallback(hObject,~,videoSrc,hAxes)
while strcmp(hObject.String, 'Pause') && ~isDone(videoSrc)
[frame,result] = getAndProcessFrame(videoSrc);
showFrameOnAxis(hAxes.axis1, frame);
showFrameOnAxis(hAxes.axis2, result);
end
function [frame,foreground] = getAndProcessFrame(videoSrc)
foregroundDetector = vision.ForegroundDetector('NumGaussians', 4, ... 'NumTrainingFrames', 60);
frame = step(videoSrc);
foreground = step(foregroundDetector, frame); end
Jiro Doke
Jiro Doke 2017년 8월 15일
편집: Jiro Doke 2017년 8월 15일
What do you mean by "you can't display the foreground"? Do you get an error? Does it show something but not what you expect? Is it possible that for the frame input, no foreground was detected? What exactly is the situation?

댓글을 달려면 로그인하십시오.

 채택된 답변

Leona Chan
Leona Chan 2017년 8월 15일

0 개 추천

As above code, showFrameOnAxis(hAxes.axis1, frame); showFrameOnAxis(hAxes.axis2, foreground); The frame can show in both axis1 or axis2, but put foreground either axis1 or axis2 also nothing to display.

댓글 수: 6

Jiro Doke
Jiro Doke 2017년 8월 15일
(If possible, please move this to the Comments section above, since this is the "Answers" section)
Please be a bit more clear. When you say "nothing to display", does it show all black? All white? Something else? Do you see error messages in the Command Window?
Leona Chan
Leona Chan 2017년 8월 15일
All black and no message in the command window
Jiro Doke
Jiro Doke 2017년 8월 15일
That probably means that the algorithm didn't detect any foreground. Detected foreground would show up in white (in the black&white image).
Leona Chan
Leona Chan 2017년 8월 15일
But I can extract the foreground by the same method.
"Same method" as in using foregroundDetector in a loop with video frames?
I can't say for certain, but you may need to take the vision.ForegroundDetector initialization outside of the "loop". If I remember correctly, the detector uses past frames to estimate the background. Currently, in your snippet of code, you are recreating the detector for each frame, thus clearing the past frames from its algorithm. Just using your code snippet, you may need to change to something like this.
function playCallback(hObject,~,videoSrc,hAxes)
foregroundDetector = vision.ForegroundDetector('NumGaussians', 4, ...
'NumTrainingFrames', 60);
while strcmp(hObject.String, 'Pause') && ~isDone(videoSrc)
[frame,result] = getAndProcessFrame(videoSrc,foregroundDetector);
showFrameOnAxis(hAxes.axis1, frame);
showFrameOnAxis(hAxes.axis2, result);
end
end
function [frame,foreground] = getAndProcessFrame(videoSrc,foregroundDetector)
frame = step(videoSrc);
foreground = step(foregroundDetector, frame);
end
Leona Chan
Leona Chan 2017년 8월 15일
Yes, work now, thank you very much

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Image Processing and Computer Vision에 대해 자세히 알아보기

질문:

2017년 8월 14일

댓글:

2017년 8월 15일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by