Image processing 如何获取图像的RGB值?
我正在上计算机图形学课,我需要处理纹理,但我不能使用任何库来完成。我一直在加载需要使用的图像的rgb值(图像可以是任何格式,jpg、raw、png等),所以我的问题是,在不使用任何库获取该值的情况下,哪种方法是获取图像(任何格式)rgb值的最简单方法??以下是我在网站上已经找到的内容:Image processing 如何获取图像的RGB值?,image-processing,graphics,rgb,textures,Image Processing,Graphics,Rgb,Textures,我正在上计算机图形学课,我需要处理纹理,但我不能使用任何库来完成。我一直在加载需要使用的图像的rgb值(图像可以是任何格式,jpg、raw、png等),所以我的问题是,在不使用任何库获取该值的情况下,哪种方法是获取图像(任何格式)rgb值的最简单方法??以下是我在网站上已经找到的内容: unsigned char *data; File *file; file = fopen("image.png", "r");// data = (unsigned char
unsigned char *data;
File *file;
file = fopen("image.png", "r");//
data = (unsigned char *)malloc(TH*TV*3); //TH and TV are both 50
fread(data, TH*TV*3, 1, file);
fclose(file);
int i;
for(i=0;i<TH*TV*3;i++){
//suposing I have a struct RGB for the rgb values
RGB.r = data[?];// how do I get the r value
RGB.g = data[?];// how do I get the g value
RGB.b = data[?];// how do I get the b value
}
无符号字符*数据;
文件*文件;
file=fopen(“image.png”,“r”)//
数据=(无符号字符*)malloc(TH*TV*3)//TH和TV都是50
fread(数据,TH*TV*3,1,文件);
fclose(文件);
int i;
对于(i=0;i尝试使用一些框架,比如有几个选项可以获得颜色或操纵图像
在这里,我找到了以下示例代码:
cv::Mat img=cv::imread(“lenna.png”);
对于(int i=0;i而言,您希望迭代由3个字节组成的每个像素,而不是迭代读取的每个字节。因此,将i++
替换为i++=3
for(i=0;i<TH*TV*3;i+=3){
RGB.r = data[i];
RGB.g = data[i+1];
RGB.b = data[i+2];
}
for(i=0;i首先你停止叫喊!我错过了你打开PNG文件的部分。PNG格式很复杂,编写代码来读取它完全超出了StackOverflow答案的范围。不使用库是不切实际的。JPG和许多其他格式也是如此。有一些格式很容易解析(PBM/PGM/PNM、TGA等),但大多数更现代的(尤其是专注于压缩图像的)如果没有库,阅读起来就不那么简单。png图像是压缩的,这是你应该知道的。所以你上面的代码无法工作。@rekire,很抱歉我错过了这一部分。如果没有库,你不可能阅读png。好吧,让我们换一种图像格式,原始图像或bmp怎么样(我可以使用我想要的格式,我以png为例)@user2275378,此解决方案适用于没有标题的原始像素数据。不是一个原始的相机图像,这是一个完全不同的东西,甚至比PNG更复杂。要让上述代码工作,您需要将图像保存在RGB888中。这应该可以工作。正如旁注:OpenCV将获取图像,并将图像转换为RGB888莫瑞,在那里你也可以访问原始数据。