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

How can I change video source from webcam to file in matlab

你能帮我更改此代码以使用文件吗? 我做了一些更改,但出现 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 (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);

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

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

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

不幸的是,在 MATLAB 中从摄像头读取视频流与从文件读取视频流需要使用两个单独的函数:用于摄像头和 VideoReader 的网络摄像头或视频输入或用于从文件读取的 vision.VideoFileReader。

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