ArduCAM Mini 5MP OV5642 poor JPEG performance compared to BMP on Arduino

Hey all, hoping someone can point me in the right direction. I’ve got an ArduCAM mini camera module shield with the 5MP OV5642 (B0068) connected to my Arduino, and the JPEG vs BMP behavior is really confusing me.

In BMP mode everything is fine — I get clean, good-looking images. The only downside is the resolution is limited and each capture takes a while. But in JPEG mode the module works very poorly: some features are either inaccessible or just act erratic, and the image quality is much worse.

Why is there such a big difference between the two formats? Is there any way to fix the JPEG side? And should I be updating the libraries — if so, how?

Thanks for the report. To help narrow it down, could you share a few more details? Which Arduino board are you using, and which library/sketch are you running for the OV5642? When you say features act ‘erratic’ in JPEG mode, do you mean it freezes, drops frames, or produces corrupted images?

Sample captures from both modes of the same scene would also be really helpful for comparison.

Sure. Setup is the ArduCAM mini 5MP OV5642 shield on an Arduino, running the stock ArduCAM library examples. I grabbed the same scene in both formats so you can see the difference. BMP comes out clean, no issues, just limited resolution and slower capture. JPEG is where it falls apart — poor quality plus the erratic/inaccessible features I mentioned.

OV5642_Flip_JPEG.JPG
OV5642_Base_JPEG.JPG
OV5642_Base_BMP.JPG
OV5642_Flip_BMP.JPG

Thanks, those comparisons make it clearer. The main reason for the quality difference is that BMP is uncompressed — the sensor data is stored as-is, so the image looks clean. JPEG compresses the image to keep file sizes down, and that compression introduces artifacts and lowers perceived quality, even from the same sensor and scene.

That said, compression alone wouldn’t normally make features inaccessible or erratic. That behavior is more likely tied to the JPEG capture path on the shield, which is also more memory/processing heavy on an Arduino.

So here’s what I’d try:

  1. For JPEG, use a larger resolution like 1600x1200. Higher resolution JPEGs hold up much better than small ones, so the quality hit from compression is less noticeable.
  2. Make sure you’re on the latest ArduCAM library for the OV5642 — outdated libraries are a common cause of weird JPEG behavior on the mini shield.

To sum up: BMP gives better quality because it’s uncompressed, but it limits resolution and capture time. JPEG compresses and can degrade quality, so bumping the resolution to 1600x1200 is the recommended workaround for now. If updating the library and trying the higher resolution doesn’t sort it, the ArduCAM forum (https://forum.arducam.com/) or [email protected] can take a closer look at your specific setup.