主要内容

对象计数

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

介绍

输入视频流包含钉的图像。在这个例子中,您使用顶盖的形态操作来消除不均匀的照明,以及打开形态操作以消除钉之间的间隙。然后,使用每个帧的不同阈值将图像转换为二进制文件。应用此阈值后,您可以计算订书钉的数量并计算每个订书钉的质心。

初始化

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

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

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

创建一个blob分析系统对象以计算订书钉并查找其质心。

hblob = Vision.BlobanAlysis(......'AreaOutputport', 错误的,......'bandingboxoutputport', 错误的,......'outputdatatype''单身的');

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

hvideoout = Vision.videoplayer('名称''计数钉书钉');hvideoout.position(3:4)= [650 350];

流处理循环

在这里,您调用了处理循环来计算输入视频中的订书钉。此循环使用您实例化的系统对象。

当您到达输入文件的末尾时,循环被停止,由BinaryFilereader系统对象检测到。

尽管hasfame(hvideosrc)i = im2gray(Readframe(HVIDESOSRC));Im = imtophat(我,strel('正方形',18));im = imopen(Im,strel('rect',[15 3]));th =多线程(IM);%使用Otsu的方法确定阈值bw = im> th;Centroids =步骤(HBLOB,BW);%blob分析Staplescount = Int32(大小(质心,1));txt = sprintf('订书钉数量:%d',Staplescount);它=插入文本(i,[10 280],txt,'字体大小',22);%显示钉钉计数质心(:,2)=质心(1,2);%水平对齐标记它= InsertMarker(它,质心,'o''尺寸',6,'颜色''r');它= InsertMarker(它,质心,'o''尺寸',5,'颜色''r');它= InsertMarker(它,质心,'+''尺寸',5,'颜色''r');步骤(HVIDEOOUT,IT);结尾

数字计数钉包含轴和其他对象的UiflowContainer,Uimenu,UIToolbar类型。轴包含类型图像的对象。

概括

输出视频显示标有圆和加号的单个钉。它还显示每个帧中出现的订书钉数。