主要内容

对象计数

此示例显示了如何使用形态操作来计算视频流中的对象。

介绍

输入视频流包含主食的图像。在此示例中,您使用顶级帽形态操作去除不均匀的照明,并使用开放的形态操作来消除主食之间的间隙。然后,您使用每个帧的不同阈值将图像转换为二进制。应用此阈值后,您可以计算主食的数量并计算每个主食的质心。

初始化

使用这些下一节代码来初始化所需的变量和系统对象。

创建一个系统对象以读取AVI文件的视频。

文件名='staples.mp4';hvideosrc = videoreader(文件名);

创建一个斑点分析系统对象来计算主食并找到其质心。

hblob =视觉。布洛巴分析(...“区域输出港”,错误的,...“边界箱”,错误的,...'outputDatatype',,,,'单身的');

创建一个系统对象以显示输出视频。

hvideoout = vision.videoplayer('姓名',,,,“计数钉书钉”);hvideoout.position(3:4)= [650 350];

流处理循环

在这里,您可以调用处理循环以计算输入视频中的主食。该循环使用您实例化的系统对象。

当您到达输入文件的末尾时,循环将停止,该输入文件的末尾由二进制文件系统对象检测到。

尽管hasframe(hvideosrc)i = im2gray(readframe(hvideosrc));im = imtophat(i,strel(strel)('正方形',18));im = iMopen(im,strel(strel)('rect',[15 3]));th = multIthresh(im);%使用OTTU的方法确定阈值bw = im> th;centroids = step(hblob,bw);百分比分析staplescount = int32(尺寸(Centroids,1));txt = sprintf('主食计数:%d',staplescount);it = insertText(i,[10 280],txt,'字体大小',22);%显示主食计数质心(:,2)=质心(1,2);%水平对齐标记it =插入标记(centroids,'o',,,,'尺寸',6,'颜色',,,,'r');it =插入标记(centroids,'o',,,,'尺寸',5,'颜色',,,,'r');it =插入标记(centroids,'+',,,,'尺寸',5,'颜色',,,,'r');步骤(hvideoout,it);暂停(1);结尾

图计数的主食包含一个轴对象和类型UiflowContainer的其他对象,Uimenu,Uitoolbar。轴对象包含类型图像的对象。

概括

输出视频显示了带有圆圈和加号标记的单个主食。它还显示每个帧中出现的主食数量。