我正在做一个项目,需要通过相机输入获取阈值图像的x,y坐标。在阈值处理和背景减法之后,我设法将输出显示为黑色和白色,并显示质心和坐标。现在我需要提取并保存这些质心' x'并且' y'对于将基于这些' x'进行进一步操作的单独价值。并且' y'协调价值观。 这是我已经合并的质心代码
stats = regionprops(bw, 'BoundingBox', 'Centroid');
hold on
for object = 1:length(stats)
bb = stats(object).BoundingBox;
bc = stats(object).Centroid;
rectangle('Position',bb,'EdgeColor','r','LineWidth',2)
plot(bc(1),bc(2), '-m+')
a=text(bc(1)+15,bc(2), strcat('X: ', num2str(round(bc(1))), ' Y: ', num2str(round(bc(2)))));
set(a, 'FontName', 'Arial', 'FontWeight', 'bold', 'FontSize', 12, 'Color', 'red');
end
hold off
如何提取' x'并且' y'要在以后处理的质心值? 三江源。
答案 0 :(得分:1)
为了补充Ander的评论,质心的坐标存储在数组bc
中,您在调用rectangle
绘制所述质心后使用它。如果您以后需要使用它们,可以在循环之前将它们放在N x 2
数组中,其中N
实际为length(stats)
。
使用vertcat堆积每个x和y坐标,如下所示:
stats = regionprops(bw, 'BoundingBox', 'Centroid');
AllCentroids = vertcat(stats.Centroid);
这与bc
类似,但包含所有质心坐标。您可以使用“边界”框的坐标执行相同操作。这里你的数组是N x 4
:
AllBB = vertcat(stats.BoundingBox);
你也可以摆脱循环中的几行并将它们放在外面。例如:
a=text(AllCentroids(:,1)+15,AllCentroids(:,2), strcat('X: ', num2str(round(AllCentroids(:,1))), ' Y: ', num2str(round(AllCentroids(:,2)))));
set(a, 'FontName', 'Arial', 'FontWeight', 'bold', 'FontSize', 12, 'Color', 'red');
for object = 1:length(stats)
rectangle('Position',AllBB(k,:),'EdgeColor','r','LineWidth',2)
plot(AllCentroids(object,1),AllCentroids(object,2), '-m+')
end
希望让事情更清楚!