主要内容

检测和情节水位变化与USB摄像头实时编辑任务

这个例子向您展示了如何设置您的USB摄像头检测和水位的变化。从USB摄像头使用交互式地捕获图像获取摄像头图像在编辑器现场任务。现场编辑任务的更多信息,见交互式任务添加到脚本

在本例中,您将估计的水平水一杯用图像减法减去样品图片参考图像。你还会画出规范化的水位实时。使用获取摄像头图像任务在一个循环中捕获样本图片。

负载的参考图像

下面的例子使用了参考图像image01.png

refImage = imread (“image01.png”);

这张照片是一个空的玻璃640 x 480的分辨率。

或者,您可以捕获这张照片使用获取摄像头图像的任务。

设置输出窗口

设置图绘制实时水位的变化。

无花果=图(“名称”,“水位跟踪器”,“可见”,“关闭”);t = tiledlayout (2, 2,“父”图);t。填充=“没有”;t。TileSpacing =“没有”;ax₁= nexttile (t);持有(ax₁“上”);标题(“参考图像”,“父”、ax₁);imshow (refImage“父”、ax₁);ax2 = nexttile (t) [2 1]);标题(“水位v / s的时间”,“父”,ax2);包含(的时间(年代),“父”,ax2);ylabel (“水位(归一化)”,“父”,ax2);ax3 = nexttile (t);标题(“水位”,“父”,ax3);网格;h = animatedline (ax2,“颜色”,“红色”,“线宽”3);webcamLETFig =图(“名称”,“获取摄像头图像输出”);

情节水位变化

确定水位的变化,使用图像减法。减去每个样本图像与参考图像。捕捉示例图像,使用获取摄像头图像的任务。

确保在现场任务如下:

  1. 选择一个网络摄像头连接到你的电脑的摄像头。

  2. 清除显示图像复选框,以防止在每次循环迭代中显示图像。

  3. 关掉自动运行功能如果你想活的任务只有当执行整个脚本执行。禁用自动运行,点击自动运行图标。

  4. 选择实时预览查看摄像头的视频直播,同时调整摄像头的属性。

执行以下操作:

  1. 捕获图像使用获取摄像头图像任务在一个循环中。你可以改变时间的循环执行通过输入文本框的时间间隔,以秒为单位。

  2. 减去每一sampleImagerefImage得到diffImage。

  3. 提取的RGB分量diffImage并将图像转换为灰度来减少图像中的噪声。

  4. 发现平均在每一行图像的像素强度值。均值像素强度用于查找图像像素对应的水位。

  5. 定义一个窗口大小和强度阈值通过移动滑块。

  6. 找到的差异之间的instensities n + 10像素和n个像素windowSize。“n”是行索引和10在本例中使用的窗口大小。如果像素的强度值大于阈值强度、存储像素值作为水位。

  7. 情节与时间的水位。

现场编辑任务获取摄像头图像是如图所示。

你可以设置摄像头的属性,如图片所示。

当玻璃是空的时候,你会看到在零水平。

%开始时间戳计时器策划水位与时间t =抽搐;(toc (t) <120年)%从摄像头读取图像捕获%的“获取摄像头图像输出”图活动图图(webcamLETFig);sampleImage = img;%保存相对时间戳tStamp = toc (t);%减去样本图像与参考图像%的imsubtract从图像处理工具箱可以在这里使用diffImage = refImage - sampleImage;dim =大小(diffImage);%从差分图像中提取RGB分量R = diffImage (:,: 1);G = diffImage (:: 2);B = diffImage (:: 3);%转换为图像灰度的差异greyDiffImage = 0 (dim (1), (2) dim、“uint8”);行= 1:退去(1)坳= 1:(2)greyDiffImage dim(行,坳)= (0.2989 * R(行)上校)+ (0.5870 * G(行)上校)+ (0.1140 * B(行)上校);结束结束%发现意味着在每一行图像的像素强度值rowMean = 0 (1, (1) dim);行= 1:(1)rowMean dim(行)=意味着(greyDiffImage(行,:));结束%找到相对应的图像像素最高水位%之间找到区别instesities n + 10日和n个像素。%这个像素值存储为水位,如果这intesnity大于一个阈值windowSize =10;intensityThreshold =15;waterLevelPixel = dim (1);(rowMean) -windowSize rowIndex = 1:长度如果rowMean (rowIndex + windowSize)——rowMean (rowIndex) > intensityThreshold waterLevelPixel = rowIndex;打破;结束结束%显示图像%的“水位跟踪”图活动图图(图);%显示参考图像%显示当前水位持有(ax3“所有”);imshow (sampleImage“父”,ax3);箭袋;(2)/ 2,waterLevelPixel, 0, (1) -waterLevelPixel dim、“颜色”,“黄色”,“线宽”3,“父”,ax3);持有;%的阴谋水位vs /时间addpoints (h, tStamp、abs (1 - (waterLevelPixel /退去(1))));drawnow;fig.Visible =“上””;结束