主要内容

对象计数

这个示例展示了如何使用形态操作来计数视频流中的对象。

介绍

输入的视频流包含史泰博的图像。在本例中,使用顶帽形态操作来消除不均匀的光照,使用开口形态操作来消除钉书之间的间隙。然后将图像转换为二进制,每帧使用不同的阈值。一旦应用了这个阈值,就可以计算订书钉的数量,并计算每个订书钉的质心。

初始化

使用下面这段代码初始化所需的变量和System对象。

创建一个System对象从avi文件中读取视频。

文件名=“staples.mp4”;hVideoSrc = VideoReader(文件名);

创建一个blob analysis System对象来计数订书钉并找到它们的质心。

hBlob =愿景。BlobAnalysis (...“AreaOutputPort”假的,...“BoundingBoxOutputPort”假的,...“OutputDataType”“单一”);

创建一个System对象来显示输出的视频。

hVideoOut =愿景。放像机(“名字”“算主食”);hVideoOut.Position(3:4) = [650 350];

流处理循环

这里调用处理循环来计算输入视频中的订书钉数。这个循环使用实例化的System对象。

当您到达输入文件的末尾时,循环将停止,BinaryFileReader System对象将检测到这一点。

hasFrame(hVideoSrc) I = im2gray(readFrame(hVideoSrc));I = imtophat(I, strel()“广场”, 18));Im = imopen(Im, strel()“矩形”15 [3]));th = multithresh (Im);%用大津法确定阈值BW = Im > th;质心= step(hBlob, BW);% Blob分析StaplesCount = int32(大小(质心,1));txt = sprintf (“短数:% d ', StaplesCount);它= insertText(I,[10 280],txt,“字形大小”、22);显示订书钉计数Centroids(:, 2) = Centroids(1,2);水平对齐标记它= insertMarker(它,“o”“大小”6“颜色”“r”);它= insertMarker(它,“o”“大小”5,“颜色”“r”);它= insertMarker(它,“+”“大小”5,“颜色”“r”);步骤(hVideoOut);结束

包含一个坐标轴对象和其他类型的uiflowcontainer, uimenu, uitoolbar对象。axis对象包含一个image类型的对象。

总结

输出的视频显示了用圆圈和加号标记的个别订书钉。它还会显示每帧中出现的订书钉数量。