Closed CaoJu600 closed 1 year ago
这里应该是一个字节序问题。你可以参考:https://github.com/espressif/esp32-camera/pull/428。
uint8_t rgbBuf[...];
jpg2rgb565(fb->buf, fb->len, rgbBuf, JPG_SCALE_8X);
// swap the byte order and the image looks ok
size_t i;
for(i = 0; i < sizeof(rgbBuf); i+=2){
const uint8_t tmp = rgbBuf[i];
rgbBuf[i] = rgbBuf[i+1];
rgbBuf[i+1] = tmp;
}
这里应该是一个字节序问题。你可以参考:https://github.com/espressif/esp32-camera/pull/428。
uint8_t rgbBuf[...]; jpg2rgb565(fb->buf, fb->len, rgbBuf, JPG_SCALE_8X); // swap the byte order and the image looks ok size_t i; for(i = 0; i < sizeof(rgbBuf); i+=2){ const uint8_t tmp = rgbBuf[i]; rgbBuf[i] = rgbBuf[i+1]; rgbBuf[i+1] = tmp; }
解决了,非常感谢!
人脸识别例程中默认的摄像头输出格式是RGB565,我将它改为了JPEG并在识别前进行解码,程序运行没什么问题,但是解码后的图像不正确。 app_main中: register_camera(PIXFORMAT_RGB565, FRAMESIZE_240X240, 2, xQueueAIFrame); 改为 register_camera(PIXFORMAT_JPEG, FRAMESIZE_240X240, 2, xQueueAIFrame);
然后主要修改的是who_human_face_recognition.cpp中下图框选部分,lcd刷屏函数搬过来是为了方便调试,原先的lcd任务已经禁用。 当相机格式选用RGB565时,输出画面一切正常 改用jpeg后
frame->buf拷贝到oldbuf的过程应该没问题,我尝试过将oldbuf通过wifi发送到电脑并保存为jpg格式,图片完全正常。 但经过jpg2rgb565函数解码后的newbuf,用lcd显示就是上图的错误效果。 调试了很久也没找到问题出在哪里,希望有大佬解惑,感激不尽!
下面是who_human_face_recognition.cpp中static void task_process_handler(void arg)修改后的完整代码: extern scr_driver_t g_lcd; static void task_process_handler(void arg) { camera_fb_t *frame = NULL; HumanFaceDetectMSR01 detector(0.3F, 0.3F, 10, 0.3F); HumanFaceDetectMNP01 detector2(0.4F, 0.3F, 10);
if CONFIG_MFN_V1
if CONFIG_S8
elif CONFIG_S16
endif
endif
if !CONFIG_IDF_TARGET_ESP32S3
endif
}