如何在matlab中将视频源从网络摄像头更改为文件

时间:2015-07-23 16:38:18

标签: matlab image-processing video matlab-cvst

您能帮我改变一下这段代码来处理文件吗? 我做了一些更改,但出现Undefined function 'snapshot' for input arguments of type 'VideoReader'.错误。有没有其他选择 snapshot视频文件的功能?

clear classes;

%% Instantiate video device, face detector, and KLT object tracker
%% vidObj = webcam;
vidObj = VideoReader('D:\Movie\a\tork\12 (71).mp4');
faceDetector = vision.CascadeObjectDetector(); % Finds faces by default
tracker = MultiObjectTrackerKLT;

frame = snapshot(vidObj);
frameSize = size(frame);

videoPlayer  = vision.VideoPlayer('Position',[200 100 fliplr(frameSize(1:2)+30)]);

bboxes = [];
while isempty(bboxes)
    framergb = snapshot(vidObj);
    frame = rgb2gray(framergb);
    bboxes = faceDetector.step(frame);
end
tracker.addDetections(frame, bboxes);

frameNumber = 0;
keepRunning = true;
disp('Press Ctrl-C to exit...');
while keepRunning

    framergb = snapshot(vidObj);
    frame = rgb2gray(framergb);

    if mod(frameNumber, 10) == 0

        bboxes = 2 * faceDetector.step(imresize(frame, 0.5));
        if ~isempty(bboxes)
            tracker.addDetections(frame, bboxes);
        end
    else
        % Track faces
        tracker.track(frame);
    end

    displayFrame = insertObjectAnnotation(framergb, 'rectangle',...
        tracker.Bboxes, tracker.BoxIds);
    displayFrame = insertMarker(displayFrame, tracker.Points);
    videoPlayer.step(displayFrame);

    frameNumber = frameNumber + 1;
end

%% Clean up
release(videoPlayer);

是否可以轻松地做到这一点?

2 个答案:

答案 0 :(得分:1)

VideoReader对象没有snapshot方法。它有一个readFrame方法。

或者,您可以使用vision.VideoFileReader对象及其step()方法来读取视频帧。请参阅this example

答案 1 :(得分:1)

不幸的是,在MATLAB中从相机中读取视频流与从文件中读取视频流需要使用两个独立的功能:摄像头和视频输入用于摄像头和VideoReader或vision.VideoFileReader用于从文件中读取。

要使用VideoReader从文件中读取,请使用readFrame方法。