В этом примере показано, как использовать морфологические операции для подсчета объектов в видеопотоке.
Входной видеопоток содержит изображения скобок. В этом примере вы используете морфологическую операцию верхней шляпы, чтобы удалить неравномерное освещение, и морфологическую операцию открытия, чтобы удалить зазоры между скобками. Затем преобразуйте изображения в двоичные, используя другой порог для каждой системы координат. Когда этот порог применяется, вы подсчитываете количество скобок и вычисляете центроид каждой скобки.
Используйте эти следующие разделы кода для инициализации необходимых переменных и системных объектов.
Создайте системный объект, чтобы считать видео из файла avi.
filename = 'staples.mp4';
hVideoSrc = VideoReader(filename);
Создайте системный объект анализа больших двоичных объектов, чтобы подсчитать скобы и найти их центроиды.
hBlob = vision.BlobAnalysis( ... 'AreaOutputPort', false, ... 'BoundingBoxOutputPort', false, ... 'OutputDataType', 'single');
Создайте Системный объект для отображения выхода видео.
hVideoOut = vision.VideoPlayer('Name', 'Counted Staples'); hVideoOut.Position(3:4) = [650 350];
Здесь вы вызываете цикл обработки, чтобы подсчитать скобки в вход видео. Этот цикл использует системные объекты, которые вы создали.
Цикл останавливается, когда вы достигаете конца входного файла, который обнаруживается объектом BinaryFileReader System.
while hasFrame(hVideoSrc) I = im2gray(readFrame(hVideoSrc)); Im = imtophat(I, strel('square',18)); Im = imopen(Im, strel('rect',[15 3])); th = multithresh(Im); % Determine threshold using Otsu's method BW = Im > th; Centroids = step(hBlob, BW); % Blob Analysis StaplesCount = int32(size(Centroids,1)); txt = sprintf('Staple count: %d', StaplesCount); It = insertText(I,[10 280],txt,'FontSize',22); % Display staples count Centroids(:, 2) = Centroids(1,2); % Align markers horizontally It = insertMarker(It, Centroids, 'o', 'Size', 6, 'Color', 'r'); It = insertMarker(It, Centroids, 'o', 'Size', 5, 'Color', 'r'); It = insertMarker(It, Centroids, '+', 'Size', 5, 'Color', 'r'); step(hVideoOut, It); end
На выходном видео показаны отдельные скобки, отмеченные кругом и знаком плюс. В нем также отображается количество скобок, которые появляются в каждой системе координат.