我想将RGB值转换为HSV值。但是,如果我将9除以28,则八度计算为0.任何人都可以解释原因吗?
function [hsv] = RGBtoHSV()
im = imread('picture.png');
R = im(:,:,1);
G = im(:,:,2);
B = im(:,:,3);
len = length(R); % R, G, B should have the same length
for i = 1:len
MAX = max([R(i),G(i),B(i)]);
MIN = min([R(i),G(i),B(i)]);
S = 0;
if MAX == MIN
H = 0;
elseif MAX == R(i)
disp(G(i) - B(i)); % 9
disp(MAX - MIN); % 28
H = 0.6 * ( 0 + ( (G(i) - B(i)) / MAX - MIN) ); % 0
disp(H) % why i get 0 if try to calculate ( 0 + ( (G(i) - B(i)) / MAX - MIN)?
....
end
return;
end
endfunction
RGBtoHSV()
克里斯:D
答案 0 :(得分:4)
您必须执行以下操作将图像投射到Double
:
im = double(imread('picture.png'));
这将解决因图像类型为UINT8
而发生的问题。
答案 1 :(得分:1)
您也可以使用Octave的内置rgb2hsv功能,而不是自己编写。
im_rgb = imread ("picture.png");
im_hsv = rgb2hsv (im_rgb);
如果这是一个练习,那么我建议您查看其来源,在Octave提示符下输入type rgb2hsv
,看看它是如何实现的。