背景
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;
}
実行結果
以下のような結果となりました
反省点
入力キーを押したときに処理する場合、
そのコードはなるべく処理範囲内の上に書いたほうがいいということ。
後ろのように乗せると、入力キーの反応が悪かったりします。
(もしかしたら、自分のPCのスペックかもしれませんが。。。)
処理時間の長さに依存するかもしれません。←こっちのほうが可能性としては高い
Gituhub
コマンドプロンプトで適当なディレクトリ(フォルダ)に進み、
以下のコードを実行すると確認できます。
また、git cloneの使い方は以下の記事を参考にしてください。
環境設定 git clone
git clone https://github.com/yusa0827/20191005_Cplus2_webcamera_with_bool