如何将视频源从网络摄像头更改为 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 方法。
你能帮我更改此代码以使用文件吗?
我做了一些更改,但出现 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 方法。