如何获取图像的RGB值?

时间:2013-04-12 17:34:36

标签: image-processing graphics rgb textures

我正在学习计算机图形课程,我需要使用纹理,但我不能使用任何库来完成它。我坚持加载我需要使用的图像的rgb值(图像可以是任何格式,jpg,raw,png等等)所以我的问题是,这是获取rgb值的最简单方法一个图像(任何格式),不使用任何库来获取此值?以下是我在网站上发现的内容:

    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
    }

由于

2 个答案:

答案 0 :(得分:0)

尝试使用像OpenCV这样的框架,有几种方法可以获取颜色或操作图像。

我在这里找到了这个示例代码:

cv::Mat img = cv::imread("lenna.png");
for(int i=0; i<img.rows; i++) {
    for(int j=0; j<img.cols; j++) {
        // You can now access the pixel value with cv::Vec3b
        std::cout << img.at<cv::Vec3b>(i,j)[0] << " ";
        str::cout << img.at<cv::Vec3b>(i,j)[1] << " ";
        str::cout << img.at<cv::Vec3b>(i,j)[2] << std::endl;
    }
}

但请注意,上面的代码性能不是很好,但上面的代码可以让您了解如何读取像素。

答案 1 :(得分:0)

您希望迭代每个由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];
}