LoginSignup
0
4

More than 3 years have passed since last update.

【Visual Studio】OpenCVでカメラ画像取得

Last updated at Posted at 2020-06-23

はじめに

※これは、VC++ Visual Studioを利用する初心者向けの学習用記事です。

今回はVisual Studioを利用し、画像処理ライブラリOpenCVを用いてカメラ画像取得を利用する方法説明する。
OpenCV 4.0.0を利用しているが、本記事で説明する関数は、2.4.xx~4.xまで含まれているので利用できると思います。

OpenCVでのカメラ画像取得の関数

OpenCVで簡単にカメラ画像を取得する方法は、以下の関数を利用する。

cv::VideoCapture::VideoCapture();
カメラ映像の取得
cv::VideoCapture capture(0);    //宣言時にカメラ番号0を指定して起動。

cv::VideoCapture capture;       //先に変数のみの宣言を行う。
capture.open(0);                //後から、カメラ番号0を指定してカメラを起動することも可能。

カメラ番号は、int型の数値を引数で与えることで、複数台カメラが接続されているPCで利用したいカメラを選択することができる。
0から順番にカメラ番号は設定されるため、番号を0から順に入れていくことで確認できる。

カメラ映像取得のテストプログラム

Camera_Test1.cpp
#include <opencv2/opencv.hpp>

#ifdef _DEBUG
#pragma comment(lib, "opencv_world400d.lib")
#else
#pragma comment(lib, "opencv_world400.lib")
#endif

using namespace std;
using namespace cv;

int main()
{
    VideoCapture capture(1);                    //カメラ番号1を起動
    Mat frame;

    while (1) {
        capture >> frame;                       //カメラ画像の取得。frameに格納
        imshow("カメラ画像", frame);             //frameに格納されている画像を表示
        if (waitKey(1) == 27) break;            //ESCキーが入力されるまで実行
    }

    return 0;
}

カメラ映像の情報取得・設定変更

カメラを起動したのち、正しく起動ができているか確認を行う関数がある。

カメラの起動確認
bool cv::VideoCapture::isOpened();

isOpened()は、返戻値がbool型であり、Trueであれば起動状態。Falseでは起動できなかったと確認することが可能である。
画像が取得できない状態でのOpenCVの処理はAssertion failedの原因となるため、必ず起動確認を行ったほうが無難である。

カメラ情報の取得
double cv::VideoCapture::get(int propID);

getでは、引数のpropIDを渡すことに様々なカメラ情報を取得することが可能である。propIDの一部抜粋を以下に表にします。

propID 機能
CAP_PROP_FRAME_WIDTH カメラのフレームの横幅
CAP_PROP_FRAME_HEIGHT カメラのフレームの縦幅
CAP_PROP_FPS カメラのフレームレート

※このpropIDはOpenCVのversionで変わっている可能性があります。各versionのリファレンスで確認することをお勧めします。

カメラ起動確認及びカメラ情報のテストプログラム

Camera_Test2.cpp
#include <iostream>
#include <opencv2/opencv.hpp>

#ifdef _DEBUG
#pragma comment(lib, "opencv_world400d.lib")
#else
#pragma comment(lib, "opencv_world400.lib")
#endif

using namespace std;
using namespace cv;

int main()
{
    VideoCapture capture(1);                                            //カメラ番号1を起動

    if (!capture.isOpened()) {                                          //カメラ起動の確認
        cout << "Camera Not Opened!" << endl;                           //起動できてない場合はエラー
        return -1;                                                      //プログラム終了
    }

    int width = static_cast<int>(capture.get(CAP_PROP_FRAME_WIDTH));    //画像の幅を取得。幅は整数なのでキャスト。
    int height = static_cast<int>(capture.get(CAP_PROP_FRAME_HEIGHT));  //画像の高さを取得。高さは整数なのでキャスト。
    double fps = capture.get(CAP_PROP_FPS);                             //fps(フレームレート)を取得

    cout << "width:" << width << " height:" << height << " fps:" << fps << endl;

    return 0;
}
出力結果
width:640 height:480 fps:30

さいごに

今回はVisual Studioを利用し、画像処理ライブラリOpenCVを用いてカメラ画像取得する方法の説明を行った。
ちょっとした監視カメラやアプリのような顔認識して顔を弄るようなプログラムを自作できるようになるので、
写真の入力以上に利用できる内容が広がると思われる。

0
4
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
0
4