Sony Spresense Camera Board通过Arduino库拍摄RAW图像异常求助
Sony Spresense相机板获取RGB565 RAW图像无文件输出的解决办法
问题根源
你修改图像格式参数后代码能正常运行,但SD卡没有生成文件,核心原因是原示例的文件保存逻辑仅适配JPG压缩格式。RGB565是未压缩的原始像素流,直接套用原JPG的保存逻辑无法生成有效文件。
具体修复步骤
修改文件扩展名
不要再用.jpg作为后缀,换成.raw或.rgb565,方便后续识别文件格式:File rawFile = SD.open("/raw_image_001.raw", FILE_WRITE);重写图像数据写入逻辑
原代码仅处理JPG压缩数据块,RGB565需要直接写入相机返回的原始像素缓冲区。确保拿到数据后完整写入文件:// 按使用的分辨率分配缓冲区,比如320x240的RGB565需320*240*2=153600字节 uint8_t img_buf[320*240*2]; size_t img_size; if (cameraStillPictureGetData(img_buf, &img_size) == CAM_ERR_OK) { if (rawFile) { rawFile.write(img_buf, img_size); rawFile.close(); Serial.println("RAW图像保存成功"); } }注意:缓冲区大小必须匹配你设置的相机分辨率,比如1280x720的RGB565需要12807202=1843200字节的缓冲区。
验证格式切换是否生效
加入验证代码,确认相机确实切换到了RGB565格式:uint32_t currentFmt = camera.getStillPictureImageFormat(); Serial.print("当前图像格式: "); Serial.println(currentFmt); // 输出需等于CAM_IMAGE_PIX_FMT_RGB565的定义值检查SD卡状态
确认SD卡挂载正常、剩余空间充足——RGB565图像体积远大于JPG,比如1080P的RGB565文件约2.2MB,避免因空间不足导致写入失败。
额外提示
- RGB565是16位像素格式,普通图片查看器无法直接打开,可通过Python脚本转换为PNG,或在Photoshop中通过「自定义格式」导入(设置为16位、RGB565排列)。
- 如果需要传感器原生的Bayer RAW格式,需查阅Spresense官方文档,确认相机库是否支持
CAM_IMAGE_PIX_FMT_RAW这类格式,部分RAW格式可能需要底层驱动的额外配置。
内容的提问来源于stack exchange,提问作者omar shamakhi
相关产品推荐
相关产品推荐

