对象计数
这个例子展示了如何使用形态学操作来计数视频流中的对象。
简介
输入视频流包含订书钉的图像。在本例中,您使用顶帽形态操作来消除不均匀的光照,使用开口形态操作来消除订书钉之间的间隙。然后将图像转换为二进制,对每一帧使用不同的阈值。一旦应用了这个阈值,就可以计算订书钉的数量并计算每个订书钉的质心。
初始化
使用下面的代码部分来初始化所需的变量和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);
总结
输出的视频显示了用圆圈和加号标记的单个订书钉。它还显示每一帧中出现的订书钉的数量。