LoginSignup
3
3

More than 3 years have passed since last update.

C++ OpenCV webカメラを再生と静止させる

Last updated at Posted at 2019-10-06

背景

webカメラを使ってデモプログラムを作成したいと考えていました。
さらに、これまではbool値を使うことから避けていたのですが、
今回を機に、トライしてみました。

実装環境

windows 10 64bit
visual studio 2017
言語 C++
opnecv 4.1.0

C++でOpenCVを使うための環境設定は以下の記事をご確認ください。
環境設定 OpenCV for C++

参考コード

bool値でwebカメラから取得した画像を流したり、止めたりしています。
bool値を変える際には、SPACEキーとEcsキーを使用します。
SPACEキー:再生中の映像を停止
Ecsキー:停止中の映像を再生

[3]_webcamera_with_bool.cpp

#include "pch.h"
#include <iostream>
#include <opencv2/opencv.hpp>

/* SPACE と ESC で停止と再開を繰り返す */
#define CV_WAITKEY_SPACE  32 /* stop */
#define CV_WAITKEY_ESC    27 /* restart */ 
#define CV_WAITKEY_TAB     9 /* break */
#define CV_WAITKEY_ENTER  13 /* write */

int main()
{
    cv::VideoCapture cap(0);//デバイスのオープン
    if (!cap.isOpened())//カメラデバイスが正常にオープンしたか確認.
    {
        //読み込みに失敗したときの処理
        return -1;
    }

    bool working = true;  // 1=動作中, 0=停止中
    static int num_ = 1;  //フレーム番号
    cv::Mat frame; //取得したフレーム
    while (cap.read(frame))//無限ループ
    {
        switch (working)
        {
        case true:
            // wait for SPACE key to stop
            if (cv::waitKey(1) == CV_WAITKEY_SPACE) { /* stop */
                working = false;  
            }

            // ここで必要な画像処理を行う

            cv::imshow("win", frame);//画像を表示.
            cv::waitKey(1);// 1ms待って、画像を表示させる

        default://false
            // wait for ESC key to restart
            if (cv::waitKey(1) == CV_WAITKEY_ESC) {  /* restart */
                working = true;  
            }
        }

        num_++;//インクリメント、1つ増加させる
        //出力
        std::cout << "working =" << working << ", num_ = " << num_ <<  std::endl;
    }

    cv::destroyAllWindows();
    return 0;
}

実行結果

以下のような結果となりました

図sdfさf1.png

反省点

入力キーを押したときに処理する場合、
そのコードはなるべく処理範囲内の上に書いたほうがいいということ。
後ろのように乗せると、入力キーの反応が悪かったりします。
(もしかしたら、自分のPCのスペックかもしれませんが。。。)
処理時間の長さに依存するかもしれません。←こっちのほうが可能性としては高い

Gituhub

コマンドプロンプトで適当なディレクトリ(フォルダ)に進み、
以下のコードを実行すると確認できます。
また、git cloneの使い方は以下の記事を参考にしてください。
環境設定 git clone

git clone https://github.com/yusa0827/20191005_Cplus2_webcamera_with_bool

参考文献

C++ switch文のサンプル

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3