我想知道RGB [228,198,208]的颜色是什么,所以我写了这个函数:
function showColor()
im = ones(500, 500, 3);
color = ones(500, 500);
R = color * 228;
G = color * 198;
B = color * 208;
im(:, :, 1) = R;
im(:, :, 2) = G;
im(:, :, 3) = B;
imshow(im);
结果是白色的,看起来并不正确。
然后我尝试了这个:
function showColor2()
im = imread('pic.jpg'); %It's a 2448*3264 picture
color = ones(2448, 3264);
R = color * 228;
G = color * 198;
B = color * 208;
im(:, :, 1) = R;
im(:, :, 2) = G;
im(:, :, 3) = B;
imshow(im);
此功能显示正确的颜色,但它看起来就像第一个(图像尺寸除外)。
所以我的问题是:
我们创建的矩阵和我们从imread()
得到的矩阵有什么区别吗?
为什么第二个功能运作良好?
我们可以通过编写矩阵来创建图像吗?
答案 0 :(得分:4)
尝试
im = ones(500, 500, 3,'uint8');
color = ones(500, 500,'uint8');
R = color * 228;
G = color * 198;
B = color * 208;
im(:, :, 1) = R;
im(:, :, 2) = G;
im(:, :, 3) = B;
imshow(im);
Matlab支持两种不同的图像格式。一个基于double
数组,其值在0到1.0范围内(这是由ones
创建的默认类型。尝试键入class(ones(500,500))
)。另一种更有效,基于每维8位。这些数组由ones(N,M,'uint8')
创建。
要使用double
图像格式,请使用原始代码,但请确保值介于0到1.0之间。所以,在你的情况下:
im = ones(500, 500, 3);
color = ones(500, 500);
R = color * 228/256;
G = color * 198/256;
B = color * 208/256;
im(:, :, 1) = R;
im(:, :, 2) = G;
im(:, :, 3) = B;
imshow(im);