極軸合わせソフトの修正

By taka_ume - 9月 18, 2022

 9月になったというのに暑いですね。さて5月以来、天体撮影ごぶさたしているわけですが、撮影対象が風景やモデルに向いてしまい、夏休みもモデル撮影会に参加、その後休みのたびに京都や神戸などの風景撮影に勤しんでおりました。

肝心の天体撮影はと言うと、極軸合わせカメラをZWOカメラからノーマルのUSBカメラに変更したため、ソフトもカメラアクセス部分を作り変えないといけないのですが、なんかうまくいかず最近までおいたままにしていました。

USBカメラを動作させるにはV4L2という仕組みを使うわけですが、"/dev/video0"といったデバイスをioctlシステムコールを使ってなんやかんやしないとだめのようです。デバイスを直接コントロールするのはちょっと面倒と感じて、OpenCVの"cv::VideoCapture"を使ってみました。

上記のサイトを参考にコーディングをすると、意外と簡単に動画が出てきました。しかし、"cap.set(cv::CAP_PROP_AUTO_EXPOSURE,1);"といった、パラメータ設定をストリーミング中に行ってもなぜか反映されず… いろいろググってみたもののよくわからない日々が続き、半ばあきらめておりました。

こうなるとioctlシステムコールを使うしかないなあと覚悟を決めて、再度ググって次のサイトを参考にしました。


エラー処理は一旦無視して、ほぼコピペをしてよっしゃ~と思った矢先画面が出ない… MJPEG方式で画像データが入力されるので、それをRGBに変換するため"cv::imdecode"を使ってみるも、ビルドエラーの連発。書いてある通りしているのに~と思っていたのですが、思い込みでした。

std::vector<uchar> buf_x((char*)buffer, (char*)buffer + main_buf.length);

C++のvectorを画像のデータポインタでコンストラクタ指定するのですが、2つ目の引数はデータ数とばかり思い込んでmain_buf.lengthのみを指定していたのがエラーのもとでした。上記のように正しいコードになるまで数時間を要しました。思い込みはだめですね…

エラーを修正し、露出パラメータなどの設定コードを追加し完成。無事に絵が出ました。


次は、晴れた夜の日にデバッグだあ。


  • Share:

You Might Also Like

0 コメント