我打电话给for
循环中的一些图像,然后对这些图像进行一些处理。之后,我使用step
函数在视频播放器中显示这些帧及其蒙版。如何将边界添加到蒙版图像内的对象?另外,如何使边界更加粗糙,并在掩模图像中绘制每个斑点在掩模中的质心?以下是代码的粗略草图。如何在step()函数内调用的视频帧上绘制边界和质心
videoPlayer = vision.VideoPlayer();
maskPlayer = vision.VideoPlayer();
for ii = 1:nfiles
filenameii = [............]
frame= imread(filenameii);
mask = dOB(frame,BackgroundImg);
% some processing on the images
mask= bwareaopen(mask,27);
boundaries = bwboundaries(mask,'noholes');
B=boundaries{1};
Centroid = regionprops(mask,'centroid');
Centroids = cat(1, Centroid.Centroid);
plot(B(:,2),B(:,1),'g','LineWidth',3);
plot(Centroids(:,1), Centroids(:,2), 'r+', 'MarkerSize', 10); step(videoPlayer,frame);
step(maskPlayer, mask);
P.S:我知道如何显示它使用hold on
一个数字,但我想在图像上直接完成这件事在视频播放器显示它之前。任何指导将不胜感激。
非常感谢您的回应。这确实在播放器中显示blob的边界,但是它显示了具有边界的原始图像而不是二进制图像。我想要在二进制图像周围显示边界。你能告诉我为什么这样吗?另外我想知道使用bwboundaries和bwperim的区别是什么。 – BlueBee
啊,我以为你想在原始图像,而不是二进制图像。我会更新我的帖子。 'bwboundaries'和'bwperim'之间的区别在于'bwboundaries'将blob的边界看作一组'(x,y)'点。 'bwperim'作为图像返回blob的边界。此图像对绘制像素以在图上显示该图像至关重要。 – rayryeng
非常感谢,它的工作现在完美:)。是否可以增加边界/边界的宽度?此外,如何将遮罩图像顶部的质心绘制为当前显示在单独窗口中的图形。 – BlueBee