【发布时间】:2016-03-06 23:54:17
【问题描述】:
我想知道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()得到的矩阵有什么区别吗?为什么第二个函数效果很好?
我们可以只写一个矩阵来创建图像吗?
【问题讨论】:
-
默认情况下 image/imshow 将浮点数组显示为范围 [0, 1] 的图像。如果您希望图像显示为 [0, 255] 的范围,则需要将范围传递给这些函数。第二个有效,因为 imread 返回本机数据类型,通常是 uint8,因此您修改后的图像保持为 uint8 而不是 double,然后 imshow 默认将 uint8 数组显示为范围 [0, 255] 的图像。
-
你的变量
colour是不必要的,你也可以写im(:, :, 1)=228; im(:, :, 2)=198; im(:, :, 3)=208;(不解决问题,只是简化你的代码或答案中的代码)
标签: image matlab image-processing matrix