我创建了一个动画,使用rgb2hsv
查看RGB的不同值和等效的HSV值,但colors don't match at all
我使用的转换错误了吗? 我希望获得相似的颜色,并获得与RGB值相同的HSV值,我该怎么做?
示例代码我曾经在下面用动画进行测试。
clear all,clf reset,tic,clc
pkg load image
for ii=1:5:255
ii;
r(:,:,1)=127;
g(:,:,1)=mod(19+ii,255);
b(:,:,1)=12;
rgb_img(:,:,1)=r;
rgb_img(:,:,2)=g;
rgb_img(:,:,3)=b;
rgb_img=uint8(rgb_img); %convert so Imshow an show image
hsv_img=rgb2hsv(rgb_img);
h=hsv_img(:,:,1);
s=hsv_img(:,:,2);
v=hsv_img(:,:,3);
hsv_img=uint8(hsv_img); %convert so Imshow an show image
pause(.0001)
height_wanted=300;%size(img,1) %length wanted needs to stay size(repmat_rgb,1) to get all colors. only change for testing
width_wanted=280; %width wanted can be changed
rgb_out = imresize(rgb_img, [height_wanted, width_wanted]); %reshape output
hsv_out = imresize(hsv_img, [height_wanted, width_wanted]); %reshape output
str_rgb1=('RGB Values');
str_rgb2=(sprintf('\nRed=%3d Green=%3d Blue=%3d',r,g,b));
str_hsv1=('HSV Values');
str_hsv2=(sprintf('\nHue=%0.3f Satuation=%0.3f Value=%0.3f',h,s,v));
subplot(1,2,1);imshow(rgb_out); title([str_rgb1,str_rgb2]);
subplot(1,2,2);imshow(hsv_out); title([str_hsv1,str_hsv2]);
end
Ps:我使用的是Octave 4.0,就像Matlab一样
答案 0 :(得分:2)
正如其他人在评论中提到的那样,您无法像任何其他图像一样显示HSV图像,因为它是一种根本不同的颜色表示。 3-D HSV图像矩阵不会显示为MATLAB中的图像显示功能(如imshow
)特别有意义,因为它们只会将它们(错误地)解释为RGB图像(即色调通道被视为红色,饱和度通道被视为绿色,值通道被视为蓝色。
您可能想要做的是分别显示每个HSV频道:
这里有一些代码可以使图形与你的相似,但有4个图而不是2个(我相信这应该适用于MATLAB和Octave):
<div class="icon">
<ul><a href="home.html"></ul>
<img src="img/icons/menu-media.png"/></a>
</div>
这是动画: