c - 微 Controller 中的图像接收

标签 c image-processing microcontroller lpc

我购买了 LinkSprite JPEG 彩色相机和 LPC1768 mbed 微 Controller 。通过“LinkSprite”相机,我可以拍摄 jpeg 格式的图像,根据他们提供的教程,我可以传输并在桌面上查看这些图像。但是我想在“LPC1768 mbed”微 Controller 中处理这些图像。例如,我想循环遍历该图像的每一行和每一列来匹配颜色。谁能告诉我如何将整个图像接收到二维数组中,然后循环遍历该数组以与 red 等颜色匹配。当我传输图像数据时出现另一个问题。 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;

}

有什么方法可以将图像字节存储在“processPicture”函数的数组中吗? 有什么方法可以简单地读取存储的图像???

最佳答案

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

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

一种选择可能是“流式传输”方法,您可以在其中解码,例如一次一条扫描线,并且永远不必存储超过(大致)的数量,但我不确定是否可以以这种方式解码 JPEG,或者是否存在任何库可以做到这一点。您需要做更多研究。

关于c - 微 Controller 中的图像接收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25617006/

相关文章:

c - gnu gcc asm;使用 "C"枚举值

c - 尝试打印到文件时 C 中出现段错误

c# - 在 C# 中从图像中获取 RGB 数组

python - 用于特定内容边界框测量的最佳线检测器算法

c - MSP430 函数调用被跳过

embedded - SPI通信中CPOL/CPHA设置的使用

c - scanf 后未考虑 getchar

c++ - 我在程序中对同一图像得到不同的结果

c - 使用数组存储引脚位

c++ - 我是否正确理解 C/C++ 严格别名?