A = imread ('C:\Users\86153\Desktop\图片1.jpg'); B = rgb2gray(A) imshow(B); title('枫叶'); BW = edge(B,'Canny'); subplot(1,1,1); imshow(BW); [B,L,N,A] = bwboundaries(BW,'noholes'); imshow(BW); hold on; for k=1:length(B) boundary = B{k}; end figure k = find(A); spy(A);为什么BW为中全是零,要得出轮廓点的坐标,应该怎么修改程序
时间: 2024-04-17 20:27:20 浏览: 140
U_rmy1.zip
根据你提供的代码,`BW`全为零可能是因为转换为灰度图像后,图像的阈值设置不合适导致。你可以尝试调整 `edge` 函数中的阈值参数来改善结果。例如,使用 `edge(B,'Canny', threshold)`,其中 `threshold` 是一个合适的阈值值。你可以尝试不同的阈值值,直到得到满意的边缘检测结果。
另外,关于获取边界点的坐标,你可以在`for`循环中添加以下代码:
```matlab
plot(boundary(:,2), boundary(:,1), 'r', 'LineWidth', 2);
```
这将在图像上绘制红色的边界线。注意,这段代码应该放在 `for` 循环内部。
最后,关于绘制稀疏图像,你可以使用 `spy` 函数来查看二值图像 `A` 中非零元素的位置。但是在你的代码中,`A` 是从 `bwboundaries` 函数返回的边界属性,可能不是你想要的结果。如果你想绘制二值图像 `BW` 的非零元素位置,你可以使用以下代码:
```matlab
figure;
spy(BW);
```
这将在新的图像窗口中显示 `BW` 中非零元素的位置。
请注意,我根据你提供的代码进行了一些修改和推测,如果有任何误解,请随时提醒我。
阅读全文