我正在尝试使用Matlab R2014b中的KLT来跟踪视频中的人脸.得到这个错误预期ROI是一个元素数等于4的数组



我正试图在Matlab R2014b中使用KLT来跟踪视频中的人脸。得到这个错误预期ROI是一个元素数等于4的数组。

clc;
clear all;
faceDetector = vision.CascadeObjectDetector();
videoFileReader = vision.VideoFileReader('labedit.mp4');
videoFrame = step(videoFileReader);
bbox = step(faceDetector, videoFrame);
videoFrame = insertShape(videoFrame, 'Rectangle', bbox);
figure; imshow(videoFrame); title('Detected face');
bboxPoints = bbox2points(bbox(1, :)); disp(bboxPoints(1,1));
points = detectMinEigenFeatures(rgb2gray(videoFrame), 'ROI', bbox);
figure, imshow(videoFrame), hold on, title('Detected features'); plot(points);
pointTracker = vision.PointTracker('MaxBidirectionalError', 2);
points = points.Location; initialize(pointTracker, points, videoFrame);
videoPlayer = vision.VideoPlayer('Position',... [100 100 [size(videoFrame, 2), size(videoFrame, 1)]+30]);
oldPoints = points;
while ~isDone(videoFileReader)
    videoFrame = step(videoFileReader);
    [points, isFound] = step(pointTracker, videoFrame);
    visiblePoints = points(isFound, :);
    oldInliers = oldPoints(isFound, :);
    if size(visiblePoints, 1) >= 2 % need at least 2 points
        [xform, oldInliers, visiblePoints] = estimateGeometricTransform(...
            oldInliers, visiblePoints, 'similarity', 'MaxDistance', 4);
        bboxPoints = transformPointsForward(xform, bboxPoints);
        bboxPolygon = reshape(bboxPoints', 1, []);
        videoFrame = insertShape(videoFrame, 'Polygon', bboxPolygon, ...
            'LineWidth', 2);
        videoFrame = insertMarker(videoFrame, visiblePoints, '+', ...
            'Color', 'white');
        oldPoints = visiblePoints;
        setPoints(pointTracker, oldPoints);
    end
    step(videoPlayer, videoFrame);
end
% Clean up
release(videoFileReader);
release(videoPlayer);
release(pointTracker);

这意味着bbox为空,这意味着在帧中未检测到人脸。在调用detectMinEigenFeatures之前,您必须检查bbox是否为空。

最新更新