嵌入式硬件中的Cimg

时间:2015-04-24 15:01:09

标签: image-processing

我通过.incbin将汇编代码加载到Stm32板上的嵌入式系统内存中,并通过std :: copy将数据复制到备用缓冲区。图像显示在附加的液晶屏幕上,并用picoimage解压缩,一切都很好。我希望预先应用图像效果,我使用CImg,它似乎小巧便携。与其他人相比,我只需将标题放在工作目录中,我在下面有一个灰度代码;但是,我遇到同样的问题,因为当我试图手动改变代码时,屏幕显示为黑色。我似乎无法找到适当的解决方案。是他们的任何建议。出于某种原因,我觉得CImg不知道它是一个jpg文件,并选择加载和操作整个压缩数据。这是他们的工作吗?

CImg<uint8_t> image(_buffer,_panel->getWidth(),_panel->getHeight(),1,1,true);

        int width = image.width();
        int height = image.height();
        //int depth = image.depth();

        //New grayscale images.
        //CImg<unsigned char> gray1(width,height,depth,1);
        //CImg<unsigned char> gray2(width,height,depth,1);


        unsigned char r,g,b;
        unsigned char gr1 = 0;
        unsigned char gr2 = 0;

        /* Convert RGB image to grayscale image */
        for(int i=0;i<width;i++){
            for(int j=0;j<height;j++){

                //Return a pointer to a located pixel value.
                r = image(i,j,0,0); // First channel RED
                g = image(i,j,0,1); // Second channel GREEN
                b = image(i,j,0,2); // Third channel BLUE


                //PAL and NTSC
                //Y = 0.299*R + 0.587*G + 0.114*B
                gr1 = round(0.299*((double)r) + 0.587*((double)g) + 0.114*((double)b));

                //HDTV
                //Y = 0.2126*R + 0.7152*G + 0.0722*B
                gr2 = round(0.2126*((double)r) + 0.7152*((double)g) + 0.0722*((double)b));

                image(i,j,0,0) = gr1;
                //image(i,j,0,0) = gr2;

            }
        }

1 个答案:

答案 0 :(得分:0)

cimg不解压缩jpeg图像本身,它使用你的系统jpeg库。例如,如果您使用的是debian-derivative,则在编译之前需要apt-get install libjpeg-turbo8-dev。仔细查看cimg并确保它正在拾取标题并正确链接。