ページ 1 / 1
OpenCVでカメラのFPSが設定できません
Posted: 2016年11月30日(水) 14:44
by めがねにく
OpenCVでカメラのFPSが設定できません。どうやったらできるのでしょうか。
cap.set(CV_CAP_PROP_FPS,1);
と記述したのですがFPSが1にならないようです。なぜでしょうか
Re: OpenCVでカメラのFPSが設定できません
Posted: 2016年11月30日(水) 15:45
by Egg
せめて以下の項目ぐらいは記述してもらわないと答えようがないです。
使用している言語:
OpenCVのバージョン:
Re: OpenCVでカメラのFPSが設定できません
Posted: 2016年11月30日(水) 17:36
by C6b14
C++ OpenCV3.1 ですが このコード で動いてます。
コード:
#include <opencv2/core.hpp>
#include <opencv2/videoio.hpp> // videoioのヘッダーをインクルード
#include <opencv2/highgui.hpp> // highguiのヘッダーをインクルード
#include <iostream>
int main(int argc, const char* argv[])
{
// (1)DirectShowを使ってカメラキャプチャを行う。
// また、カメラIDが0番のカメラについてキャプチャの準備を行う
int camera_id = 0;
cv::VideoCapture cap(cv::CAP_DSHOW + camera_id);
// (2)カメラIDが0番のカメラが正しくオープンできているかをチェックする
//(正しくオープンできていなければエラー終了する)
if (!cap.isOpened())
return -1;
// (3)カメラキャプチャのフレームレートを30.0に指定する
cap.set(cv::CAP_PROP_FPS, 30.0);
// 画像表示用のウィンドウを生成する
cv::namedWindow("image", cv::WINDOW_AUTOSIZE);
// 画像データを格納するための変数を宣言する
cv::Mat frame;
for (;;)
{
// (4)カメラから1フレーム分の画像データを取得して、変数frameに格納する
cap >> frame;
// 画像データ取得に失敗したらループを抜ける
if (frame.empty()) break;
// 取得した画像データをウィンドウ表示する
cv::imshow("image", frame);
if (cv::waitKey(30) >= 0) break;
}
return 0;
}
cap.set(CV_CAP_PROP_FPS,1); は 値が 間違って いませんか。
Re: OpenCVでカメラのFPSが設定できません
Posted: 2016年12月02日(金) 10:07
by めがねにく
ご返信ご検証ありがとうございます
OSはUbuntuでopencvはC++のver3.1.0を使用しています
以下のコードを記述すればカメラから得られる動画像は1FPSになってカクカクな映像が表示されると踏んでいたのですが
滑らかな映像で表示されます(体感40FPS以上?)
何故こうなるのか見当もつきません
ご教授の程よろしくお願いします
コード:
#include <opencv2/core/core.hpp>
#include <opencv2/video/video.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
int main(int argc, const char* argv[]){
cv::VideoCapture cap(0);
if (!cap.isOpened())
return -1;
cap.set(CV_CAP_PROP_FPS,1);
cv::namedWindow("image", cv::WINDOW_AUTOSIZE);
cv::Mat frame;
while(1){
cap >> frame;
if (frame.empty()) break;
cv::imshow("image", frame);
if (cv::waitKey(30) >= 0) break;
}
return 0;
}
Re: OpenCVでカメラのFPSが設定できません
Posted: 2016年12月02日(金) 10:47
by C6b14
単純に 待ち時間 を 900 以上 にして 調整してみてください。
30fps だと 1000 ミリ秒 わる 30 で 33 msec なので
waitKey(30) かな という 気がします。
Re: OpenCVでカメラのFPSが設定できません
Posted: 2016年12月02日(金) 10:55
by C6b14
Re: OpenCVでカメラのFPSが設定できません
Posted: 2016年12月02日(金) 11:41
by C6b14
試して見たら いいみたいです。
Re: OpenCVでカメラのFPSが設定できません
Posted: 2016年12月02日(金) 11:52
by usao
オフトピック
>何故こうなるのか
CV_CAP_PROP_FPS
等の設定が効かないというのは経験があります.
CVが中でどうやってそれを実現しようとするのか仕組みはわかりませんので,正確な理由は私は知りませんが,
例えば,単にカメラ自体にそう動けという設定をする形になっているのであれば,
カメラ側がそのような動作モードみたいなのをサポートしていなければ無理だろうな,とか想像はできます.
C6b14さんがおっしゃっているように,自前でフレーム画像を取得するタイミングを調整する方向ではダメなのでしょうか?
”1FPS”に対する要求精度がとても高いのでしょうか?
Re: OpenCVでカメラのFPSが設定できません
Posted: 2016年12月02日(金) 13:32
by C6b14
[ OpenCVでカメラのFPSを設定するには? CV_CAP_PROP_FPSは偽物です ] という 情報があって
”highgui / cap_v4l.cppには実装が存在しないため ” と ありますが。( ちょっと前の情報です )
Re: OpenCVでカメラのFPSが設定できません
Posted: 2016年12月02日(金) 16:14
by usao
とりあえず,まず
cap.set(CV_CAP_PROP_FPS,1);
の戻り値をチェックしてはどうでしょうか.
設定不能であれば,falseが返ってるのではないかと.
Re: OpenCVでカメラのFPSが設定できません
Posted: 2016年12月03日(土) 10:32
by C6b14
なるほど、私のPCでは1(true)が返るので,カメラの機種情報が分からないと調べようがないですね。
[ OpenCVでカメラのFPSを設定するには? CV_CAP_PROP_FPSは偽物です ] というのはここ
http://stackoverflow.com/questions/7039 ... -is-a-fakeの翻訳を見たのだと思います。注意して見ると
Worked for me for OpenCV 3.0.0 on Ubuntu 12.04. After
installing libv4l-dev, I reran my original cmake
(WITH_LIBV4L was enabled by default) and linking worked
without any change to make. Getting and setting
CV_CAP_PROP_FPS now works for my LifeCam Cinemas. – Ulrich Stern Aug 19 '15 at 14:36
とあるのでいまはカメラによっては正しく動いているようです。
読んでみると海外の皆さんもOpenCVの組織に問い合わせて苦労してるようです。(私のPCないのコードのopencvのincludeには該当する箇所がみつからず
https://fossies.org/diffs/opencv/2.4.11 ... -diff.htmlなどを眺めてました。おかげで勉強になりました。)
Re: OpenCVでカメラのFPSが設定できません
Posted: 2016年12月07日(水) 11:09
by めがねにく
cap.get(CV_CAP_PROP_FPS);とcap.set(CV_CAP_PROP_FPS);の戻り値が共に-1になってしまうのを確認しました
(cap.get(CV_CAP_PROP_FRAME_WIDTH)の戻り値はちゃんと出るのになんで...... ;_; )
なのでwhileの中で経過時間を測定してFPSを調整する方法を試してみます