Matlab中bwboundaries返回边界特定坐标点查询异常求助
问题分析与解决方案
首先,你代码里的核心错误是搞反了bwboundaries返回的坐标对应关系:
- Matlab中
bwboundaries返回的每个边界点格式是[行号(y), 列号(x)],也就是第一列对应图像的y坐标(纵向行),第二列对应x坐标(横向列)。 - 你原来的代码用
boundary(:,2)==y_middle_right,相当于在找x等于目标y值的点,逻辑完全颠倒,这就是结果不符合预期的原因。
修正后的代码
[B,L] = bwboundaries(img_cutB_filled,8,'noholes'); % 获取图像边界 y_target = 328; % 你要查询的固定y值 for k = 1:length(B) boundary = B{k}; % 筛选y等于目标值的边界点(用第一列判断y) ind = find(boundary(:,1) == y_target); % 提取对应的所有x值(第二列是x坐标) x_values = boundary(ind,2); if(isempty(x_values)) x_values = 1; % 无匹配点时设置默认值 end % 绘制所有匹配的点 plot(x_values, y_target,'r.', 'MarkerSize',20,'LineWidth',5); end
额外说明
- 如果需要获取所有对应x值,直接用
x_values即可(它会是一个数组,包含所有匹配的x坐标);如果只需要最小/最大x,再用min(x_values)或max(x_values)。 - 测试时可以先打印
x_values,确认是否和你预期的两个点一致,比如执行disp(x_values)查看结果。
内容的提问来源于stack exchange,提问作者Rafael
相关产品推荐
相关产品推荐

