在我的for循环中,我试图从局部变量构建一个向量。但奇怪的事情正在发生。当我构建我的矢量时,我希望它包含3个双打(1x3)。但它包含数百个双打(1x1XX)。
到底出了什么问题?我是否误解m
的范围或矢量构建?
for i=0:ncols
for j=0:nrows
...
roi = imcrop(img, [cx, cy, cw, ch]);
%Extract 3 channels
red = roi(:,:,1);
green = roi(:,:,2);
blue = roi(:,:,3);
%Get most frequent colour
[freqR, f, c] = mode(red);
[freqG, f, c] = mode(green);
[freqB, f, c] = mode(blue);
freqR = double(freqR) / 255;
freqG = double(freqG) / 255;
freqB = double(freqB) / 255;
%ERROR OCCURS ON BELOW LINE
%Build vector representing most common colour in cell
col = [freqR, freqG, freqB];
%Intended usage of col
rectangle('Position', [cx, cy, cw, ch], 'EdgeColor', col, 'LineWidth', 3, 'LineStyle','-');
endfor
endfor
答案 0 :(得分:3)
mode
和MATLAB中的一些其他函数,如果应用于数组,则返回结果沿着作为函数的第二个输入提供的维度,如果未提供,则默认为第一维。当您编写时mode(red)
它与mode(red, 1)
相同。
所以你需要将矩阵转换为列向量:
[freqR, f, c] = mode(red(:));