% 读取图像 img = imread('C:\Users\zhoub\Desktop\258.png'); % 将图像转换为灰度图像 gray_img = rgb2gray(img); % 预处理图像(平滑和二值化) smooth_img = imgaussfilt(gray_img); bw_img = imbinarize(smooth_img); % 边缘检测 edge_img = edge(bw_img, 'Canny'); % 检测圆形硬币 [centers, radii] = imfindcircles(edge_img, [20 50]); % 去除噪声并填充硬币内部 se = strel('disk', 10); open_img = imopen(bw_img, se); fill_img = imfill(open_img, 'holes'); % 显示结果 figure; subplot(2,2,1); imshow(img); title('原图像'); subplot(2,2,2); imshow(bw_img); title('二值化图像'); subplot(2,2,3); imshow(edge_img); title('边缘检测图像'); subplot(2,2,4); imshow(img); hold on; viscircles(centers, radii, 'EdgeColor', 'b'); title('检测到的硬币'); % 检测铅笔 se = strel('line', 20, 90); erode_img = imerode(bw_img, se); dilate_img = imdilate(erode_img, se); filled_img = imfill(dilate_img, 'holes'); stats = regionprops(filled_img, 'Area', 'Perimeter', 'Eccentricity'); figure; imshow(img); hold on; for i=1:length(stats) if stats(i).Area > 500 && stats(i).Perimeter > 100 && stats(i).Eccentricity > 0.9 rectangle('Position', stats(i).BoundingBox, 'EdgeColor', 'r', 'LineWidth', 2); text(stats(i).BoundingBox(1), stats(i).BoundingBox(2)-20, '铅笔', 'Color', 'r', 'FontSize', 14); end end title('检测到的铅笔');
时间: 2023-11-26 07:06:02 浏览: 64
bmp.zip_bmp图像_bmp图像读取_imread_matlab读取bmp_图像读取 bmp
5星 · 资源好评率100%
这段代码是用 MATLAB 实现的图像处理程序,主要用于检测图像中的硬币和铅笔。首先,读取一张图像并将其转换为灰度图像,然后进行平滑和二值化处理,接着进行边缘检测,使用 imfindcircles 函数检测圆形硬币,并使用 viscircles 函数将检测到的硬币可视化。然后,使用 imerode、imdilate 和 imfill 函数对二值化图像进行处理,去除噪声并填充硬币内部。最后,使用 regionprops 函数检测铅笔,并使用 rectangle 和 text 函数将检测到的铅笔可视化。
阅读全文