#はじめに
######※これは、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から順に入れていくことで確認できる。
##カメラ映像取得のテストプログラム
#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のリファレンスで確認することをお勧めします。
##カメラ起動確認及びカメラ情報のテストプログラム
#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を用いてカメラ画像取得する方法の説明を行った。
ちょっとした監視カメラやアプリのような顔認識して顔を弄るようなプログラムを自作できるようになるので、
写真の入力以上に利用できる内容が広がると思われる。