0

LinkSprite JPEG Color Camera と LPC1768 mbed マイクロコントローラーを購入しました。「LinkSprite」カメラで画像をjpeg形式で撮ることができ、提供されたチュートリアルに従って、これらの画像をデスクトップに転送して見ることができます.しかし、これらの画像を「LPC1768 mbed」マイクロコントローラーで処理したい.たとえば、ループしたいその画像の各行と列を使用して、色を一致させます。画像全体を 2D 配列に受け取り、配列をループして 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」関数で画像バイトを配列に格納する方法はありますか?? 保存された画像を簡単に読み取る方法はありますか???

4

1 に答える 1

1

JPEG 解凍/デコードを自分で再実装する準備ができていない可能性があります。そのため、組み込み環境でビルド (および適合) するライブラリを見つける必要があります。多くの標準プログラミング ライブラリは埋め込み用に設計されていないため、これは注意が必要です。

これは、埋め込みコンテキストでの JPEG デコードに関するディスカッション スレッドです。1 つのポイントは、JPEG 画像の処理はかなり RAM を消費し、マイクロコントローラーには 32 KB の RAM しかないということです。24 ビット画像の 1 ピクセルが 3 バイトを必要とすることを考慮してください。

1つのオプションは、たとえば一度に1つのスキャンラインをデコードし、それ以上(大まかに)それ以上を保存する必要がない「ストリーミング」アプローチかもしれませんが、JPEGをそのようにデコードできるかどうか、またはそれを行うライブラリはすべて存在します。もっと研究をする必要があります。

于 2014-09-02T09:04:42.997 に答える