如何利用matlab导入并提取jpg彩色图像像素点的坐标及其RGB值?想要完整的编码。谢谢哈。

如题所述

假设原图片为“image.jpg”

代码如下:

clc;

clear;

%读入原图像

image = imread('image.jpg');

s = size(image);

%s=[98,97,3],表示image是3个98*97的矩阵,分别代表这个图像每个像素点的R、G、B值

%点[30,30]处的RGB数值:

p_r = image(30,30,1);

p_g = image(30,30,2);

p_b = image(30,30,3);

%分别读取RGB

image_r = image(:,:,1);

image_g = image(:,:,2);

image_b = image(:,:,3);

%测试RGB输出

subplot(2,2,1),imshow(image_r),title('Red component');  

subplot(2,2,2),imshow(image_g),title('green component');  

subplot(2,2,3),imshow(image_g),title('blue component');  

subplot(2,2,4),imshow(image),title('original image'); 



扩展资料:

1、图片文件的数据,简单地说,就是一个二维数组,二维数组的行对应图像的高,二维数组的列对应图像的宽,二维数组的元素对应图像的像素,二维数组元素的值就是像素的灰度值。

2、彩色空间是用来表示彩色的数学模型,又被称为彩色模型。RGB色彩模式是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的。

参考资料:

百度百科-imread

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-03-07

假设原图片为“image.jpg”。

可以使用 Python Image Library 做,load() 函数会返回一个对象,这个对象我们可以把它当作一个二维数组对待,而数组中存放的就是点的 RGB 值,可以很容易地访问到任何像素点的 RGB 值:

from PIL import Image

  # 可以支持很多种图片格式.

im = Image.open("your_picture.jpg") 

pix = im.load()

  # 获得图片的尺度,可以用于迭代

print im.size   

# 获得某个像素点的 RGB 值,像素点坐标由 [x, y] 指定

print pix[x,y] 

  # 设置 [x, y] 点的 RGB 的值为 value 

pix[x,y] = value

扩展资料:

在电脑中,RGB的所谓“多少”就是指亮度,并使用整数来表示。通常情况下,RGB各有256级亮度,用数字表示为从0、1、2...直到255。注意虽然数字最高是255,但0也是数值之一,因此共256级。如同2000年到2010年共是11年一样。

按照计算,256级的RGB色彩总共能组合出约1678万种色彩,即256×256×256=16777216。通常也被简称为1600万色或千万色。也称为24位色(2的24次方)。

参考资料来源:百度百科-RGB

本回答被网友采纳
第2个回答  2019-10-18

假设图片为image.jpg ,而且是500*500的像素。

代码为:

A = imread('image.jpg');

得到的三维矩阵A, size(A) =[500 500 3],那个3就是RGB三个值所占空间,如果你想去(10,10)的RGB3个值,则A(10,10, :)即可得到RGB的一个三维的向量。

扩展资料:

注意事项

Matlab 读取彩色图像是三维数组,图像的坐标是以左上角为(0,0)点,彩色图像形成的三维数组中前两位表示图像的像素点的坐标,第三位为1时表示是图像中R的值,为2时表示G的值,为3时表示B的值。故若要对一个彩色图像分别读取R,G,B时,采用下述代码即可。

% 2017-3-14 

% write by Mr.Han

clc;

clear;

%读入原图像及获取大小

image = imread('1.jpg');

%   分别读取RGB

image_r=image(:,:,1);

image_g=image(:,:,2);

image_b=image(:,:,3);

%  测试RGB输出

subplot(2,2,1),imshow(image_r),title('Red component');  

subplot(2,2,2),imshow(image_g),title('green component');  

subplot(2,2,3),imshow(image_g),title('blue component');  

subplot(2,2,4),imshow(image),title('original image');  

本回答被网友采纳
第3个回答  推荐于2017-11-25
假设图片为image.jpg ,而且是500*500的像素
代码为:
A = imread('image.jpg');

得到的三维矩阵A, size(A) =[500 500 3],那个3就是RGB三个值所占空间,如果你想去(10,10)的RGB3个值,则A(10,10, :)即可得到RGB的一个三维的向量。追问

这个三位向量就是某个像素点的RGB值?像素点坐标怎么确定?

追答

三维向量就是三个数组成的向量,你知道吧,RGB是指的红(R)、绿(G)、蓝(B)三个值。坐标就是图片上像素点所对应的位置啊,也就是说有了这个矩阵A之后,你就可知道图片的每一个像素点所对应的RGB值了。

追问

坐标怎么显示出来?因为我必须将像素点的左边和RGB值绑定,经过坐标变换变成新的图像的坐标,但是RGB值绑在一起,所以RGB不会变。

追答

你所谓的图像坐标,指的什么?
我理解的是假设图像是由500*500个像素点组成的,那个最左上角的坐标就是(1,1),最右下角的就是(500,500)。你要把坐标显示出来是要把一个坐标和它对应的RGB列出来么?如果是可以这样:
B = zeros(500*500,5);
for i =1:500
for j = 1:500
B(j+(i-1)*500,1) = i;
B(j+(i-1)*500,2) = j;
B(j+(i-1)*500,3) = A(i,j,1);
B(j+(i-1)*500,4) = A(i,j,2);
B(j+(i-1)*500,5) = A(i,j,3);
end
end
这样的到的矩阵B是一个列表,每一行的前两个元素代表像素点坐标,后三个代表RGB值。

你指的实际坐标是什么,难道是图像在屏幕的显示器上像素点坐标吗?老实将你到底要表达什么坐标我不懂。

追问

这个代码得到的矩阵等同将导入图像的坐标和RGB值进行了绑定。谢谢哈。我要做的是将拍摄的图像展开(小孔成像一类的),所以需要一个算法进行坐标转换,将原始图像的坐标转换成展开后图像的坐标。

追答

那你不说别人怎么知道你要做坐标转换呢。。。如果你要转换就再做一个坐标转换就是了。。。

本回答被提问者采纳
相似回答