libcamera-stillを使って写真を撮ってみる
前回、OV5647というOmniVision社製イメージセンサーを搭載した以下のカメラモジュールをラズパイに接続し、libcamera-jpegで写真を撮ってみた。
今回はlibcamera-stillというコマンドで写真を撮ってみる。libcamera-stillではjpegだけでなくbmpやpngなどのファイル形式で画像を保存することができたり、イメージセンサーのRAW画像データを取得することができたりするので、色々と試してみる。
なお、今回もSSH接続はせずに、ラズパイにモニター、キーボード、マウスを接続してGUI上から操作を行った。
SSH越しに接続して操作する場合は、操作するPC側でXmingなどのXサーバーを起動しているとエラーが出るので、Xサーバーを終了するか-nオプションをつけてlibcameraを実行する。詳しくは以下の記事を参照↓
Xサーバ(Xming)を起動したPCでSSH越しにRaspberry Piに接続してlibcameraを使ったら「failed to import fd 19」というエラーが出た
なお、今回も前回同様にラズベリーパイの公式ドキュメントの情報を参照しながら進めた。
https://www.raspberrypi.com/documentation/accessories/camera.html#libcamera-still
実行環境
Raspberry Pi 4 Model B
Raspberry Pi OS (Bullseye)
カメラモジュール(OV5647)
ファイル形式を指定して画像やバイナリデータを保存する
libcamera-stillでは-e(–encoding)オプションをつけることによって、jpegの他にもbmp、png形式が画像ファイルを保存できる。
libcamera-still -e png -o cameratest.png
libcamera-still -e bmp -o cameratest.bmp
もちろんlibcamera-jpegと同様に画像サイズの指定や、露出補正なども可能。例えば以下のように指定が可能。
libcamera-still -e png -o --ev 0.5 camerastill-bright.png --width 640 --height 480
このコマンドで実際にラズベリーパイで画像サイズオプション&露出補正を使って保存してみたpng画像が以下のもの。
また、エンコードをせずにRGB、YUVピクセルのバイナリデータを保存することもできる。
libcamera-still -e rgb -o cameratest.data
libcamera-still -e yuv420 -o cameratest.data
Raw画像データを保存する
libcamera-stillのもう一つの特徴として、-rオプションをつけることでイメーセンサーでつくられたRaw画像データを直接保存することができる。
RAW画像データはイメージセンサーで取得した情報がそのまま保存されるのでファイルサイズは大きくなるが、情報量が多いので後から画像加工したり撮影情報を使って何か処理したりする場合には便利。
たとえば以下のように写真を撮ると、camerastill-raw.jpgというjpegファイルと一緒に、camerastill-raw.dng というAdobe Digital Negativeフォーマットのファイルが保存される。
libcamera-still -r -o camerastill-raw.jpg
ちなみにdngファイルは画像編集ソフトによってはそのまま開けることもあるが、開けないソフトも多いので注意。
Raw画像データの中身を見てみる
RawデータにはExifというフォーマットで色々なメタデータが含まれているので、Exifのメタデータの内容を確認できるExifToolで今回保存したdngファイルの情報を確認してみる。ExifToolの使い方は以下を参照。
-rオプションをつけて保存したcamerastill-raw.dngを開いてみたのが以下の画像。Black LevelやWhite Level、Color Matrixなど色々な情報が含まれている。
比較のために、同時に保存したjpegファイルのメタデータも見てみる。エンコードして圧縮されたjpegファイルでは色々なメタデータが削ぎ落とされていることがわかる。
ざっくりとcamera-stillの使い方はわかった。次回も引き続きlibcameraを使って、libcamera-vidというコマンドで動画を撮影してみたいと思う。
日記まとめ
ラズパイで遊んでみた軌跡を以下でまとめてます。