• 締切済み

動画中の画面全体のRGB平均取得

お世話になってます。 黒い背景の中を白色の玉が左から右へただ流れていく動画があります。 24時間分あり、玉がいつ流れるかは全くわかりません。 白い玉が通過した時間をだいたいで良いので知りたいですが、24時間動画を見続けるのは厳しいのでフリーソフトか簡単なプログラムでできないか検討しています。 一つ考えたのが、画面全体のRGB値の平均を毎フレーム(?)とり、エクセルなどで横軸(時間)、縦軸(RGB値)で描画すれば、通過した時間だけピークになるようなグラフが得られると思います。 OpenCVというもので特定領域の画像のRGB取得しているものはあったのですが、動画で同じようなことができないでしょうか? エクセルのマクロ程度ならできるのでOpenCVを勉強してみようと思いますが、動画を解析するのが敷居が高いので、プログラムソースかどういった関数(?)を使えばできるかヒントをいただければ幸いです。 ご教授下されば幸いです。 よろしくお願い致します。

みんなの回答

  • myuki1232
  • ベストアンサー率57% (97/170)
回答No.2

OpenCV を使えばできることは確かなんですが、プログラミング初心者の方にはなかなか難しいですよね。 そういう方にも簡単に使えるツールがあればいいんですが…。 とりあえず、OpenCV を使って15分位でちゃっちゃと作ってみましたが、動作確認していませんので大体のイメージとして捉えてください。 初心者の方には、このソースだけ出されてもどうやって動かせばいいの? というのが最大の問題なんですよね…。 ここから↓ #include <string> #include <iostream> #include <opencv2/core.hpp> #include <opencv2/imgproc.hpp> #include <opencv2/highgui.hpp> int main(int argc, char **argv) { std::string filename = argv[0]; // 動画ファイルを開く cv::VideoCapture capture; capture.open(filename); cv::Mat image, gray; // 1フレームずつ読み込む while (capture.read(image)) { gray.create(image.size(), image.depth()); cv::cvtColor(image, gray, CV_RGB2GRAY); // 平均値を求める cv::Scalar mean = cv::mean(gray); double i = cv::norm(mean); // 標準出力へ出力 std::cout << i << std::endl; } }

gallus
質問者

お礼

コードやコメントまで入れていただいてありがとうございます!! excelマクロやarduinoとは書き方が違うようですが、なんとなくやろうとしていることは伝わりました! 関数(コマンド?)がわかれば勉強できますので、1行ずつ理解していきたいと思います! OpenCV の開き方から勉強ですが…(笑) それにしてもこれを15分はすごいです!!

  • i-q
  • ベストアンサー率28% (972/3411)
回答No.1

具体的に候補を挙げられませんが、もっと簡易な方法なら有ります。 ビットレートを調べてはどうでしょう? 変化がある部分で上下していると思います。

gallus
質問者

お礼

コメントありがとうございます。 確かにおっしゃる通りRGBの必要性はないですね。 色で認識しなくても動きや画像の変化するポイントを見けられれば良いですね! ビットレートとは動画全体の解像度的なものと持っていたのですが、フレーム(?)ごとのビットレートを知る方法があるのでしょうか

関連するQ&A

  • HPLCのピーク面積

    HPLCで分析をおこなってます。 蛍光検出です。 ピークの面積はどのように出したものなのでしょうか? チャートを見ると、横軸:時間 縦軸:florescence となっています。この縦軸は何を意味していますか? 辞書を見ても分かりません。 自分なりに、ネットや本を読んで調べてみた のですが、あまり分からないので、 どなたか時間があれば、教えてください。

  • プログラム動作時のCPU処理時間とCPU負荷の取得

    シミュレーションを行うために、C言語で書いたプログラムのCPU処理時間(CPUがそのプログラムのために動作していた時間)と、横軸が時間で縦軸がCPU負荷(%)を取得したいのですが、方法を教えてください。 プログラムはwindowsでVC++ or Linuxでgccでコンパイルしようと思っています。 よろしくお願いいたします。

  • エクセルで作ったグラフの横軸の間隔を変えたい

    エクセルでグラフを作りました。縦軸は重さで横軸は経過時間です。一定の経過時間ごとに重さを計れば良かったのですが,一定ではない時間ごとに重さを計ってしまいました。そこでグラフの横軸の間隔を時間と比例するように変えたいのですが,どのようにすれば良いのでしょうか。

  • エクセルの折れ線グラフで、縦軸を順位、横軸を時間に設定は可能でしょうか。

    (1)エクセルの折れ線グラフで、縦軸を順位、横軸を時間に設定は可能でしょうか。 (2)縦軸に順位を指定すると、1位が下に、最下位が上位に来るため、これを逆転させたいと考えています。 縦軸の上から、1位…最下位とするにはどうしたらよいでしょうか。 よろしくお願いいたします。

  • 取得したデータでグラフを描画する際、オートレンジにしたいです。

    Visual Basicでプログラミングをしています。 測定器から2つのデータを取得してグラフを作成するという流れを、数十回程度、繰り返したいのですが、取得されるデータの大きさ(桁など)が明確で無い場合は、取得したデータから縦軸と横軸のレンジ(リミット)を判断して描画をさせる必要があると考えています。 もしも数値の見当がつくようなら、こちらでいくつかのレンジを用意すれば済むと思うのですが、オーバーレンジになったり極端に小さくなったりすることもあると思いますので、画面内に、ちょうど良い程度の大きさにグラフが描画されれば、見るほうも見やすいのかなと思います。 流れとしては、取得したデータから最大レンジを決めて画面内になるように描画し、次にデータを取得したときは、前のデータと比較するか何かして、そのままのレンジでは描画できない(枠からはみ出すなど)ようであれば、画面内に描画されるようにレンジを設定し直し、前のデータと次のデータを再描画する、そしてそれを繰り返していく・・・という感じになるのかなぁと考えています。 考えているだけでどのようにするか方法が分からず困っています。 上記とは全く違う別の考えかたでももちろん結構ですので、プログラムのアドバイスをどうぞお願いしますm(__)m

  • 減衰振動で求められた値

    減衰振動の実験で得られた値を縦軸にピーク電圧の自然対数、横軸に時間を取ってグラフを書きました。 この時このグラフの傾きは-γ/2となっているというところまでは理解できました。 しかしこの求められたγって一体何を表すのでしょうか? 教科書を見てもいまいちよく分かりませんでした。 単位?次元は何なのでしょう?

  • 半値幅の測り方

    半値幅の測り方は知っているのですが、少しわからないところがありますので、教えていただきたいです!! 今、あるデータをExcelに取り込んでグラフを表示しています。ここで、いくつかのピーク値があるので、そのピークごとの半値幅を測って、ピークの高さ×半値幅で積分強度を出さなければいけません。 で、横軸が角度2θ、縦軸がピークの高さです。ピークの高さはそのままの値を取り出せばよいのですが、半値幅の単位って何でしょうか??半値幅をはかりやすいようにグラフを大きくして測ったりすると、半値幅をものさしなどで測ると半値幅の長さ変わってきてしまいます。 この半値幅の単位というのは、角度なんでしょうか?? 質問の仕方が下手ですいませんがよろしくお願いします。。。

  • gnuplotのフリーズについて

    C++で作成したプログラムでgnuplotを呼び出し、リアルタイムで描画をさせています。 データを計測しつつその変化をgnuplotのグラフで確認しているのですが、時折gnuplotの描画が止まってしまいます。 フリーズの状況は規則性がないようで、開始してすぐであったり、しばらくしてから止まったりです。 プログラム内で同時に命令しているデータの記録は継続されるので、gnuplotのフリーズのみの症状となります。 プログラムソースは長くなるのでとりあえず省きますが、プログラムの流れとしては データをサンプリング→プログラム内で計算→csv形式で出力→csvファイルを読み込んでgnuplotで描画 という形の繰り返しです。 動作環境はWindowsXPでプログラムはC++ Builder6で作成しました。 サンプリング間隔・描画間隔の変更、描画データの間引きなどを試しましたが改善できていません。 同様の症状、その解決策をご存じの方がいらっしゃいましたら、教えて頂けないでしょうか。 参考までに実行画面の画像を添付しました。縦軸がデータ値、横軸が経過時間です。 不足している情報などありましたら合わせてご連絡ください。 どうぞよろしくお願いします。

  • エクセルでグラフ変換した時に・・・

    エクセルで表(縦軸:人数、横軸:時間)を作成し、グラフに変換したら どの時間(年号)においても人数が「0」になってしまいます。 要因としてはどのようなことが考えられるのでしょうか? アドバイスの方よろしくお願いいたします。

  • グラフを作りたい

    横軸に時間、縦軸に人数をとってグラフを作りたいです。 手元にあるデータは誰が何時から何時までいてたというデータ(約200人分) これを、どのようにエクセルにデータ化すればうまくグラフができますか? よろしくお願いします。

専門家に質問してみよう