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」関数で画像バイトを配列に格納する方法はありますか?? 保存された画像を簡単に読み取る方法はありますか???