В этом примере показано, как использовать морфологические операции, чтобы считать объекты в видеопотоке.
Входной видеопоток содержит изображения главных продуктов. В этом примере вы используете цилиндр морфологическая операция, чтобы удалить неровное освещение и вводную морфологическую операцию, чтобы удалить разрывы между главными продуктами. Вы затем преобразуете изображения в двоичный файл, с помощью различного порога для каждой системы координат. Если этот порог применяется, вы считаете количество главных продуктов и вычисляете центроид каждого главного продукта.
Используйте эти следующие разделы кода, чтобы инициализировать необходимые переменные и Системные объекты.
Создайте Системный объект, чтобы считать видео из 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.
while hasFrame(hVideoSrc) I = rgb2gray(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
Выходное видео показывает отдельные главные продукты, отмеченные круговым и знаком "плюс". Это также отображает количество главных продуктов, которые появляются в каждой системе координат.