文档

对象计数

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

简介

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

初始化

使用下面的代码部分来初始化所需的变量和System对象。

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

文件名=“staples.mp4”;hVideoSrc = vision。VideoFileReader(文件名,...“ImageColorSpace”,“强度”,...“VideoOutputDataType”,“单一”);

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

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

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

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

流处理循环

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

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

~isDone(hVideoSrc) I = step(hVideoSrc);我的意思是:我的意思是:“广场”, 18));Im = imopen(Im, strel)“矩形”15 [3]));th = multithresh(Im);%确定阈值使用大津的方法BW = Im > th;Centroids = step(hBlob, BW);%斑点分析StaplesCount = int32(size(Centroids,1));TXT = sprintf('订书钉计数:%d', StaplesCount);It = insertText(I,[10 280],txt,“字形大小”、22);%显示订书钉计数Centroids(:, 2) = Centroids(1,2);%水平对齐标记它= insertMarker(它,Centroids,“o”,“大小”6“颜色”,“r”);它= insertMarker(它,Centroids,“o”,“大小”5,“颜色”,“r”);它= insertMarker(它,Centroids,“+”,“大小”5,“颜色”,“r”);步骤(hVideoOut);结束

释放

在这里,您调用System对象上的release方法来关闭所有打开的文件和设备。

释放(hVideoSrc);

总结

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