我買了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;
}
有,我可以存儲圖像的任何方式「processPicture」函數中的數組中的字節? 有什麼辦法可以簡單地讀取存儲的圖像?
* jpeg *與* bmp *不同。它是圖像的壓縮版本。要獲得實際的顏色,您必須先*解碼*。 – 2014-09-02 08:01:59
我該怎麼做? @valter – DarkenShooter 2014-09-02 08:05:56
有沒有什麼辦法可以將圖像數據存儲在「processPicture」函數的數組中? – DarkenShooter 2014-09-02 08:07:00