在% 读取测试图片 test_img = imread('C:\Users\你的用户名\Desktop\新建文件夹\1.jpg'); % 灰度化处理 test_gray = rgb2gray(test_img); % 二值化处理 test_bw = imbinarize(test_gray, graythresh(test_gray)); % 腐蚀处理 se = strel('disk', 5); test_erode = imerode(test_bw, se); % 边缘检测 test_edge = edge(test_erode, 'Canny'); % 形状分析 stats = regionprops(test_edge, 'Area', 'Perimeter', 'Circularity'); area = stats.Area; perimeter = stats.Perimeter; circularity = 4 * pi * area / (perimeter^2); % 色度分析 red = test_img(:,:,1); green = test_img(:,:,2); blue = test_img(:,:,3); red_mean = mean(red(:)); green_mean = mean(green(:)); blue_mean = mean(blue(:)); % 进行分类 if area > 10000 && circularity > 0.7 && red_mean > 100 && green_mean < 150 && blue_mean < 150 fruit_type = '苹果'; elseif area > 5000 && circularity > 0.6 && red_mean < 100 && green_mean > 150 && blue_mean < 150 fruit_type = '香蕉'; elseif area > 15000 && circularity > 0.5 && red_mean > 150 && green_mean > 100 && blue_mean > 100 fruit_type = '芒果'; else error('无法识别该水果'); end % 输出结果 fprintf('该水果为:%s\n', fruit_type);在这个代码中我输入matlab后出现了错误使用 regionprops>getPropsFromInput (line 1279) 第 3 个输入, PROPERTIES, 应与以下字符串之一相匹配: 'Area', 'Centroid', 'BoundingBox', 'SubarrayIdx', 'MajorAxisLength', 'MinorAxisLength', 'Eccentricity', 'Orientation', 'ConvexHull', 'ConvexImage', 'ConvexArea', 'Image', 'FilledImage', 'FilledArea', 'EulerNumber', 'Extrema', 'EquivDiameter', 'Solidity', 'Extent', 'PixelIdxList', 'PixelList', 'Perimeter', 'PerimeterOld', 'PixelValues', 'WeightedCentroid', 'MeanIntensity', 'MinIntensity', 'MaxIntensity' 'Circularity' 输入与任何有效字符串均不匹配。 出错 regionprops>ParseInputs (line 1244) reqStats = getPropsFromInput(startIdxForProp, ... 出错 regionprops (line 205) [I,requestedStats,officialStats] = ParseInputs(imageSize, argOffset, varargin{:});这个错误,请将改正后的代码给我
时间: 2023-12-24 07:01:59 浏览: 136
在代码中,`regionprops`函数的第二个参数应该是一个字符串数组,每个元素代表要计算的属性。在你的代码中,你将`'Area', 'Perimeter', 'Circularity'`作为一个字符串传递给了`regionprops`函数,这是不正确的。你需要将这些属性分别作为单独的字符串传递给`regionprops`函数。修改后的代码如下:
```
% 读取测试图片
test_img = imread('C:\Users\你的用户名\Desktop\新建文件夹\1.jpg');
% 灰度化处理
test_gray = rgb2gray(test_img);
% 二值化处理
test_bw = imbinarize(test_gray, graythresh(test_gray));
% 腐蚀处理
se = strel('disk', 5);
test_erode = imerode(test_bw, se);
% 边缘检测
test_edge = edge(test_erode, 'Canny');
% 形状分析
stats = regionprops(test_edge, 'Area', 'Perimeter', 'Eccentricity');
area = stats.Area;
perimeter = stats.Perimeter;
circularity = 4 * pi * area / (perimeter^2);
% 色度分析
red = test_img(:,:,1);
green = test_img(:,:,2);
blue = test_img(:,:,3);
red_mean = mean(red(:));
green_mean = mean(green(:));
blue_mean = mean(blue(:));
% 进行分类
if area > 10000 && circularity > 0.7 && red_mean > 100 && green_mean < 150 && blue_mean < 150
fruit_type = '苹果';
elseif area > 5000 && circularity > 0.6 && red_mean < 100 && green_mean > 150 && blue_mean < 150
fruit_type = '香蕉';
elseif area > 15000 && circularity > 0.5 && red_mean > 150 && green_mean > 100 && blue_mean > 100
fruit_type = '芒果';
else
error('无法识别该水果');
end
% 输出结果
fprintf('该水果为:%s\n', fruit_type);
```
注意,我将`Circularity`属性改为了`Eccentricity`,因为`Circularity`不是`regionprops`函数支持的属性之一。
阅读全文