clc I=imread('D:\课设图片\1.jpg'); [H,W,G]=size(I) ; subplot(331),imshow(I),title('原图'); I1=im2bw(I,0.6); subplot(332),imshow(I1),title('二值化'); se=strel('disk',5); I2=imclose(I1,se); I3=imopen(I2,se); I4=imopen(I3,se); subplot(333),imshow(I4),title('开运算闭运算'); L=bwlabel(I4); L1=edge(L,'canny'); subplot(334),imshow(L1),title('canny算子分割结果'); SE = strel('disk', 4); J = imdilate(I4, SE); subplot(335),imshow(J),title('1'); % 将二值图像转化为连通域标记图像 cc = bwconncomp(J); L = labelmatrix(cc); % 计算所有连通域的属性 props = regionprops(cc, 'area', 'BoundingBox'); % 根据面积筛选出面积大于 1000 的连通域 idx = find(area >= 2000 & area <= 3800); % 创建不同形状的平行四边形 ps1 = polyshape([200 236 315 300],[360 160 180 360]); ps2 = polyshape([420 500 400 350],[360 360 190 220]); % 绘制框选形状 figure; imshow(I); hold on; for i = 1:length(idx) % 判断连通域是否在 ps1 中 if ps1.isinterior(props(idx(i)).BoundingBox(1:2)) plot(ps1); end % 判断连通域是否在 ps2 中 if ps2.isinterior(props(idx(i)).BoundingBox(1:2)) plot(ps2); end end hold off;修改代码使输出的图片单独显示
时间: 2024-02-06 19:03:00 浏览: 92
完整版 可直接运行 MATLAB DCT程序 图片添加水印 水印添加 图片水印提取源码 源程序代码 含原图和水印图.rar
5星 · 资源好评率100%
你可以在每个 `subplot` 后添加 `figure;` 来使每张图片单独显示。修改后的代码如下:
```
clc
I=imread('D:\课设图片\1.jpg');
[H,W,G]=size(I) ;
figure; subplot(331),imshow(I),title('原图');
I1=im2bw(I,0.6);
figure; subplot(332),imshow(I1),title('二值化');
se=strel('disk',5);
I2=imclose(I1,se);
I3=imopen(I2,se);
I4=imopen(I3,se);
figure; subplot(333),imshow(I4),title('开运算闭运算');
L=bwlabel(I4);
L1=edge(L,'canny');
figure; subplot(334),imshow(L1),title('canny算子分割结果');
SE = strel('disk', 4);
J = imdilate(I4, SE);
figure; subplot(335),imshow(J),title('1');
% 将二值图像转化为连通域标记图像
cc = bwconncomp(J);
L = labelmatrix(cc);
% 计算所有连通域的属性
props = regionprops(cc, 'area', 'BoundingBox');
% 根据面积筛选出面积大于 1000 的连通域
idx = find(area >= 2000 & area <= 3800);
% 创建不同形状的平行四边形
ps1 = polyshape([200 236 315 300],[360 160 180 360]);
ps2 = polyshape([420 500 400 350],[360 360 190 220]);
% 绘制框选形状
figure; imshow(I); hold on;
for i = 1:length(idx)
% 判断连通域是否在 ps1 中
if ps1.isinterior(props(idx(i)).BoundingBox(1:2))
plot(ps1);
end
% 判断连通域是否在 ps2 中
if ps2.isinterior(props(idx(i)).BoundingBox(1:2))
plot(ps2);
end
end
hold off;
```
注意,你需要在运行代码前将 `D:\课设图片\1.jpg` 修改为你自己的图片路径,并且需要在 MATLAB 中运行此代码。
阅读全文