微控制器中的图像接收

时间:2014-09-02 06:20:40

标签: c image-processing microcontroller lpc

我买了LinkSprite JPEG彩色相机和LPC1768 mbed微控制器。通过" LinkSprite"相机我可以拍摄jpeg格式的图像,根据他们提供的教程,我可以在桌面上传输和查看这些图像。但我想在" LPC1768 mbed"微控制器。例如,我想循环遍历该图像的每一行和一列以匹配颜色。任何人都可以告诉我如何将整个图像接收到2D阵列中,然后循环遍历阵列以匹配红色等颜色。当我传输图像时数据看起来像另一个问题。 ff d8 ff e0 00 10 ........... 40 c6 81 90 b9 aa ee 68 19 ff d9。我知道jpeg图像以ff d9开头,以ff d9结尾。但是如何识别这些值中的像素以及如何比较颜色是否与红色相匹配???

摄像机拍照并逐字节传输图像的代码

int main() {
JPEGCamera camera(p9, p10); // TX, RX
LocalFileSystem local("local"); //save images on mbed
Timer timer;
timer.start();
if(camera.setPictureSize(JPEGCamera::SIZE160x120))
{
  myled1 = 1;
  wait(2.0);
  myled1 = 0; 
  wait(2.0); 
}
for (int i = 1; i < 3; i++) {
    if (camera.isReady()) {
        char filename[32];
        sprintf(filename, "/local/pict%03d.jpg", i);
        printf("Picture: %s \n", filename);
        if (camera.takePicture(filename)) {
            while (camera.isProcessing()) {
                camera.processPicture();
            }


            myled1 = 1; //show successful picture was taken 
            wait(2.0);
            myled1 = 0;
        } else {
            printf("take picture failed\n");
            myled3 = 1; //show picture take failed
            wait(2.0);
            myled3 = 0;
        }
    } else {
        printf("camera is not ready\n");
        myled4 = 1; //show camera is not ready
        wait(2.0);
        myled4 = 0;
    }
}

在JPEGCamera.cpp中

bool JPEGCamera::processPicture() {
if (state == PROCESSING) {
    bt.printf("\n\nNew Image \n\n");
    if (address < imageSize) {
        char data[2048];
        int size = readData(data, min(sizeof(data), imageSize - address), address);
        int ret = fwrite(data, size, 1, fp);
        for (int i=0; i<size; i++) bt.printf("%x ",data[i]);
        if (ret > 0)
            address += size;
        if (ret == 0 || address >= imageSize) {
            stopPictures();
            fclose(fp);
            wait(0.1); // ????
            state = ret > 0 ? READY : ERROR;
        }
    }
}

return state == PROCESSING || state == READY;

}

有没有什么方法可以将图像字节存储在数组中的&#34; processPicture&#34;功能?? 有什么方法可以简单地读取存储的图像???

1 个答案:

答案 0 :(得分:1)

您可能还没准备好自己重新实现JPEG解压缩/解码。因此,您需要找到一个可在嵌入式环境中构建(并适合)的库。这可能很棘手,因为许多标准编程库不是为嵌入而设计的。

Here is a discussion thread关于嵌入式上下文中的JPEG解码。一点是处理JPEG图像相当需要RAM,而your microcontroller只有32 KB的RAM。这真的不是很多,考虑到24位图像的单个像素需要3个字节。

然后,一个选项可能是“流式”方法,您可以在其中进行解码,例如一次一条扫描线,并且永远不必存储超过(大致)的扫描线,但我不确定是否可以通过这种方式解码JPEG,或者是否存在任何库存这样做。你需要做更多的研究。