Help us understand the problem. What is going on with this article?

OpenCVでWebカメラのモードを選択できるようにする(Windows限定).

More than 1 year has passed since last update.

概要

Webカメラのモード(解像度やfps)を選択し,OpenCVのcv::Matで画像をキャプチャする.

モチベーション

OpenCVでWebカメラを使うとき,デフォルトのカメラモードが選択されており,モードを変更する際にはいちいちset関数を使ってモードを設定するのが面倒.
また,使っているWebカメラがどんな解像度,fpsで画像を取得できるのかわからない.
なんとか工夫して,プログラム側からWebカメラのモード(解像度やfpsなど)を簡単に選択したい.

ソースコード

ソースコードはここにあります.

使い方

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

#include "web_camera.h"

int main()
{
    WebCamera webcam(0);      //使うwebカメラの番号を入力
                              //プログラムを起動後モード選択をする

    //WebCamera webcam(0, 0); //使うwebカメラの番号を入力
                              //二つ目の引数はモード選択                  

    while(1){
        cv::Mat frame;
        webcam.GetImage(&frame); //画像の読み込み
        if (frame.empty()){
            break;
        }
        cv::imshow("web camera", frame);
        int k = cv::waitKey(1);
        if (k == 'q') {
            break;
        }
    }
    return EXIT_SUCCESS;
}

実行

実行環境

  • Windows10
  • Visual C++ 12.0
  • Visual C++ 14.0

上記の環境で試しました.

実行例

DirectShow VideoCapture  cameraID 0
------------------------
0 : 640 x 480, 30 fps RGB24
1 : 160 x 90, 15 fps RGB24
2 : 160 x 100, 15 fps RGB24
3 : 160 x 120, 15 fps RGB24
4 : 176 x 144, 15 fps RGB24
5 : 320 x 180, 15 fps RGB24
6 : 320 x 200, 15 fps RGB24
7 : 320 x 240, 15 fps RGB24
8 : 352 x 288, 15 fps RGB24
9 : 640 x 360, 15 fps RGB24
10 : 640 x 400, 15 fps RGB24
11 : 864 x 480, 15 fps RGB24
12 : 768 x 480, 15 fps RGB24
13 : 800 x 450, 15 fps RGB24
14 : 800 x 500, 15 fps RGB24
15 : 800 x 600, 15 fps RGB24
16 : 960 x 720, 15 fps RGB24
17 : 1280 x 720, 5 fps RGB24
18 : 1280 x 800, 5 fps RGB24
19 : 1280 x 1024, 5 fps RGB24
------------------------

Input format No. ->

使いたいWebカメラのモードを選択します.

まとめと注意点

OpenCVでWebカメラを使う際,容易にカメラの解像度とfpsを選択できるようになりました.
windowsのみで実行できます.Ubuntuなど,Linux環境では実行できません.

KeiOishi
そろそろ終了しそうな大学院生. コンピュータビジョンを専攻.
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away