Tag: OpenCV
基本的に OpenCV (と依存ライブラリ),および標準ライブラリ以外は使用しません.
連続した画像(パラパラ漫画のうような画像)から一つの動画を作ったのでメモを残しときます。
Conclusion Use 'mp4v' or 'avc1'
対処療法ですが、ループ内の処理時間を常時計測して、そのときどきで早送りの原因となる空洞ができないように(空洞が埋まるように)、解説などのサンプルではループ内で一回の処理で終わっているwriter << frameを必要回数実行するようなプログラムを書きます。
waitKey(1)としておけば可能な限り最小の待ち時間(最大のFPS)で表示されるため、カメラの映像をリアルタイムで表示する場合は基本的にはwaitKey(1)としておけば問題ないはず。
fpsを元の動画から取得した後にfps_newと新しいフレームレートを指定して動画を保存している所が違いになります。
cv::waitKey は、ユーザーからのキー入力を取得する関数ですが、実際にはメッセージループの役割を持っています。 したがって画像を表示するためには、少なくとも一回は WM_PAINT を処理する必要があり、これが、cv::waitKey を呼び出さないと画像が表示されない理由でもあります。
OpenCV 1.x では,画像を管理する構造体として IplImage が,その他の行列を管理する構造体として CvMat が用いられました. しかし,OpenCV 2.x の C++ インタフェースでは, cv::Mat クラスを利用して,これらを統一的に扱います.
OpenCV の C++ 行列クラス
OpenCVを触っているとよく出てくるCV_8UC3とかCV_8UC1。どんなものがあるか一覧にしました。
効率が重要な場合、 cv::Matオブジェクトのピクセルを素早く処理するには、 ptr<T>(int r)メソッドを使用して、行rの先頭(0から始まるインデックス)へのポインタを取得します。
OpenCVで画像を作るにあたって,サンプルコードでは様々なクラス/構造体を使っている.その歴史も合わせてちょこちょこ書いてく
圧倒的にポインタを用いる方法が速いです。しかし,驚きなのはMatに関するメソッドなどはそれほど速度が変わらないところです。
OpenCVがHomebrewなどでインストールされている前提
#include <opencv2/core/utility.hpp>
ただしC++のOpenCV
userdata – コールバック関数に渡されることになるユーザデータ.グローバル変数に頼らずにトラックバーイベントを扱うために利用されます
今回説明するトラックバーはパラメータを可変に動かすことで出力画像を表示することができる
よく使用するのは、画像のノイズやひげを除去する cv::erode(from, to, cv::Mat(), cv::Point(-1,-1), 1); 画像の欠損部を補完する cv::dilate(from, to, cv::Mat(), cv::Point(-1,-1), 1);