OpenCV/videoInput Libraryによるビデオキャプチャ

ここでは,DirectShow?によるビデオキャプチャを簡単に行うことができるライブラリ videoInput Library
OpenCVを組み合わせたサンプルプログラムを紹介します.

[注意1]
OpenCV 1.1pre1からvideoInput LibraryがOpenCVに組み込まれるになったため,
OpenCVのcvSetCaptureProperty?関数にてキャプチャサイズ(幅,高さ)の設定が有効が有効になります.

一方,videoInput0.1995から設定が可能となっているフレームレートについては
OpenCV 1.1pre1のcvSetCaptureProperty?関数から設定できないようです.

そのため,現状,フレームレートを制御したい場合にはvideoInputを
直接扱う方が簡単かもしれません.以降のソースコードはvideoInputにより
キャプチャサイズ,フレームレートを設定してキャプチャを行う例となっています.

前準備

まず,Windows SDK,もしくはPlatform SDKをインストールしましょう(※OpenCV/VS 2005でCVCAMを使う参照).
OpenCVのインストールはOpenCV@Chihara-Lab.を参照.

videoInput Libraryのセットアップ

videoInput Library開発サイトより,(2009/8/29時点)最新のvideoInput0.1995.zipをダウンロードし,展開します.
今回のサンプルでは以下のファイルをプロジェクトに追加しました.

[ライブラリ]

videoInput0.1995\compiledLib\compiledByVS2005\

にあるvideoInput.lib

[ヘッダ]

videoInput0.1995\compiledLib\compiledByVS2005\include

にあるvideoInput.h

ビルド時にatlthunk.lib リンカエラーが出たら

プロジェクト-プロパティ-構成プロパティ-リンカ-コマンドライン-追加のオプション に

/NODEFAULTLIB:"atlthunk"

と記述します.

サンプルプログラム

videoInput Libraryを使ったサンプルプログラムを 以下に示します.
サンプルプログラム1,サンプルプログラム2 ともに見た目の結果は同じです.

サンプルプログラム1(memcpy版)

fileCapureVI_memcpy.cpp
//----------------------------------------------------------------------
// 概要      : videoInputライブラリを用いたキャプチャサンプル
// File Name : Main.cpp
// Library   :	OpenCV for MS-Windows 1.1
//				http://sourceforge.net/projects/opencvlibrary/
//				videoInput Library 0.1995
//				http://muonics.net/school/spring05/videoInput/
// Author    : dandelion
// Date      : Aug 29, 2009; 22:10
//----------------------------------------------------------------------

#include <iostream>
#include <cstdlib>

//ヘッダインクルード(OpenCV関連)
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>

//ヘッダインクルード(videoInput Library関連)
#include "videoInput.h"

using namespace std;

//ライブラリ読み込み(OpenCV関連)
#pragma comment(lib,"cv.lib")
#pragma comment(lib,"cxcore.lib")
#pragma comment(lib,"highgui.lib")

//ライブラリ読み込み(videoInput Library関連)
#pragma comment(lib,"videoInput.lib")

//定数
#define CAPTURE_WIDTH        320    //キャプチャサイズ(幅)
#define CAPTURE_HEIGHT        240    //キャプチャサイズ(高さ)
#define CAPTURE_FRAMERATE    30    //フレームレート

int main(void)
{
    int device1 = 0;
    int key = 0;

    //キャプチャ画像
    IplImage *image = cvCreateImage(cvSize(CAPTURE_WIDTH, CAPTURE_HEIGHT), IPL_DEPTH_8U, 3);

    //ウィンドウ
    char* window_name = "Capture using videoInput Library";
    cvNamedWindow(window_name,  CV_WINDOW_AUTOSIZE);

    //videoInputオブジェクト
    videoInput VI;

    //利用可能なキャプチャデバイス数を取得
    int numDevices = VI.listDevices();

    //キャプチャデバイスが見つからなかったら終了
    if(numDevices == 0)
    {
        cerr << "[Error] Capture device not found!!" << endl;
        exit(-1);
    }

    //フレームレート設定
    VI.setIdealFramerate(device1, CAPTURE_FRAMERATE);

    //デバイス初期化(ここではデバイスID = 0,CAPTURE_WIDTH x CAPTURE_HEIGHTでキャプチャ)
    VI.setupDevice(device1, CAPTURE_WIDTH, CAPTURE_HEIGHT);

    //ESCキーが押されるまでキャプチャを続ける
    while(key != 0x1b)
    {
        //キャプチャ画像をimageDataにコピー
        memcpy(image->imageData, VI.getPixels(device1, false), image->imageSize);

        //画像表示
        cvShowImage(window_name, image);

        //キー入力
        key = cvWaitKey(1);
    }

    //後処理
    VI.stopDevice(device1);
    cvDestroyWindow(window_name);
    cvReleaseImage(&image);

    return 0;
}

VI.getPixels関数で取得した情報をmemcpy関数でImageData?にコピー.

サンプルプログラム2

fileCaptureVI.cpp
//----------------------------------------------------------------------
// 概要      : videoInputライブラリを用いたキャプチャサンプル
// File Name : Main.cpp
// Library   :	OpenCV for MS-Windows 1.1
//				http://sourceforge.net/projects/opencvlibrary/
//				videoInput Library 0.1995
//				http://muonics.net/school/spring05/videoInput/
// Author    : dandelion
// Date      : Aug 29, 2009; 22:10
//----------------------------------------------------------------------

#include <iostream>
#include <cstdlib>

//ヘッダインクルード(OpenCV関連)
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>

//ヘッダインクルード(videoInput Library関連)
#include "videoInput.h"

using namespace std;

//ライブラリ読み込み(OpenCV関連)
#pragma comment(lib,"cv.lib")
#pragma comment(lib,"cxcore.lib")
#pragma comment(lib,"highgui.lib")

//ライブラリ読み込み(videoInput Library関連)
#pragma comment(lib,"videoInput.lib")

//定数
#define CAPTURE_WIDTH        320    //キャプチャサイズ(幅)
#define CAPTURE_HEIGHT        240    //キャプチャサイズ(高さ)
#define CAPTURE_FRAMERATE    30    //フレームレート

int main(void)
{
    int device1 = 0;
    int key = 0;

    //キャプチャ画像
    IplImage *image = cvCreateImage(cvSize(CAPTURE_WIDTH, CAPTURE_HEIGHT), IPL_DEPTH_8U, 3);

    //ウィンドウ
    char* window_name = "Capture using videoInput Library";
    cvNamedWindow(window_name,  CV_WINDOW_AUTOSIZE);

    //videoInputオブジェクト
    videoInput VI;

    //利用可能なキャプチャデバイス数を取得
    int numDevices = VI.listDevices();

    //キャプチャデバイスが見つからなかったら終了
    if(numDevices == 0)
    {
        cerr << "[Error] Capture device not found!!" << endl;
        exit(-1);
    }

    //フレームレート設定
    VI.setIdealFramerate(device1, CAPTURE_FRAMERATE);

    //デバイス初期化(ここではデバイスID = 0,CAPTURE_WIDTH x CAPTURE_HEIGHTでキャプチャ)
    VI.setupDevice(device1, CAPTURE_WIDTH, CAPTURE_HEIGHT);

    //ESCキーが押されるまでキャプチャを続ける
    while(key != 0x1b)
    {
        image->imageData = (char *)VI.getPixels(device1, false, true);

        //画像表示
        cvShowImage(window_name, image);

        //キー入力
        key = cvWaitKey(1);
    }

    //後処理
    VI.stopDevice(device1);
    cvDestroyWindow(window_name);
    cvReleaseImage(&image);

    return 0;
}

この方法だと一見,ImageData?のアドレスを上書きしていてcvReleaseImage?で正しく解放できなくなるように見えますが,実は大丈夫です.
詳細が知りたい方はdandelion's log » cvReleaseImageの挙動についてに 説明を書いたので参照ください.

Visual Studio2005プロジェクトファイル

キャプチャ画像をウィンドウに表示するプログラムです.
※間違い・御指摘等ありましたら,Contactより連絡ください.

fileCaptureVI.zip

補足

videoInput.h にサンプルプログラムやvideoInputクラスの
各種メンバ関数について説明が記述されており参考になります. google01 google02 google03 google04 google05 google06 google07 google08 google09 google10 google11 google12 google13 google14 google15 google16 google17 google18 google19 google20 google21 google22 google23 google24 google25 google26 google27 google28 google29 google30 google31 google32 google33 google34 google35 google36 google37 google38 google39 google40 google41 google42 google43 google44 google45 google46 google47 google48 google49 google50 google51 google52 google53 google54 google55 google56 google57 google58 google59 google60 google61 google62 google63 google64 google65 google66 google67 google68 google69 google70 google71 google72 google73 google74 google75 google76 google77 google78 google79 google80 google81 google82 google83 google84 google85 google86 google87 google88 google89 google90 google91 google92 google93 google94 google95 google96 google97 google98 google99 google100 google101 google102 google103 google104 google105 google106 google107 google108 google109 google110 google111 google112 google113 google114 google115 google116 google117 google118 google119 google120 google121 google122 google123 google124 google125 google126 google127 google128 google129 google130 google131 google132 google133 google134 google135 google136 google137 google138 google139 google140 google141 google142 google143 google144 google145 google146 google147 google148 google149 google150 google151 google152 google153 google154 google155 google156 google157 google158 google159 google160 google161 google162 google163 google164 google165 google166 google167 google168 google169 google170 google171 google172 google173 google174 google175 google176 google177 google178 google179 google180 google181 google182 google183 google184 google185 google186 google187 google188 google189 google190 google191 google192 google193 google194 google195 google196 google197 google198 google199 google200 google201 google202 google203 google204 google205 google206 google207 google208 google209 google210 google211 google212 google213 google214 google215 google216 google217 google218 google219 google220 google221 google222 google223 google224 google225 google226 google227 google228 google229 google230 google231 google232 google233 google234 google235 google236 google237 google238 google239 google240 google241 google242 google243 google244 google245 google246 google247 google248 google249 google250 google251 google252 google253 google254 google255 google256 google257 google258 google259 google260 google261 google262 google263 google264 google265 google266 google267 google268 google269 google270 google271 google272 google273 google274 google275 google276 google277 google278 google279 google280 google281 google282 google283 google284 google285 google286 google287 google288 google289 google290 google291 google292 google293 google294 google295 google296 google297 google298 google299 google300 google301 google302 google303 google304 google305 google306 google307 google308 google309 google310 google311 google312 google313 google314 google315 google316 google317 google318 google319 google320 google321 google322 google323 google324 google325 google326 google327 google328 google329 google330 google331 google332 google333 google334 google335 google336 google337 google338 google339 google340 google341 google342 google343 google344 google345 google346 google347 google348 google349 google350 google351 google352 google353 google354 google355 google356 google357 google358 google359 google360 google361 google362 google363 google364 google365 google366 google367 google368 google369 google370 google371 google372 google373 google374 google375 google376 google377 google378 google379 google380 google381 google382 google383 google384 google385 google386 google387 google388 google389 google390 google391 google392 google393 google394 google395 google396 google397 google398 google399 google400 google401 google402 google403 google404 google405 google406 google407 google408 google409 google410 google411 google412 google413 google414 google415 google416 google417 google418 google419 google420 google421 google422 google423 google424 google425 google426 google427 google428 google429 google430 google431 google432 google433 google434 google435 google436 google437 google438 google439 google440 google441 google442 google443 google444 google445 google446 google447 google448 google449 google450 google451 google452 google453 google454 google455 google456 google457 google458 google459 google460 google461 google462 google463 google464 google465 google466 google467 google468 google469 google470 google471 google472 google473 google474 google475 google476 google477 google478 google479 google480 google481 google482 google483 google484 google485 google486 google487 google488 google489 google490 google491 google492 google493 google494 google495 google496 google497 google498 google499 google500 google501 google502 google503 google504 google505 google506 google507 google508 google509 google510 google511 google512 google513 google514 google515 google516 google517 google518 google519 google520 google521 google522 google523 google524 google525 google526 google527 google528 google529 google530 google531 google532 google533 google534 google535 google536 google537 google538 google539 google540 google541 google542 google543 google544 google545 google546 google547 google548 google549 google550 google551 google552 google553 google554 google555 google556 google557 google558 google559 google560 google561 google562 google563 google564 google565 google566 google567 google568 google569 google570 google571 google572 google573 google574 google575 google576 google577 google578 google579 google580 google581 google582 google583 google584 google585 google586 google587 google588 google589 google590 google591 google592 google593 google594 google595 google596 google597 google598 google599 google600 google601 google602 google603 google604 google605 google606 google607 google608 google609 google610 google611 google612 google613 google614 google615 google616 google617 google618 google619 google620 google621 google622 google623 google624 google625 google626 google627 google628 google629 google630 google631 google632 google633 google634 google635 google636 google637 google638 google639 google640 google641 google642 google643 google644 google645 google646 google647 google648 google649 google650 google651 google652 google653 google654 google655 google656 google657 google658 google659 google660 google661 google662 google663 google664 google665 google666 google667 google668 google669 google670 google671 google672 google673 google674 google675 google676 google677 google678 google679 google680 google681 google682 google683 google684 google685 google686 google687 google688 google689 google690 google691 google692 google693 google694 google695 google696 google697 google698 google699 google700 google701 google702 google703 google704 google705 google706 google707 google708 google709 google710 google711 google712 google713 google714 google715 google716 google717 google718 google719 google720 google721 google722 google723 google724 google725 google726 google727 google728 google729 google730 google731 google732 google733 google734 google735 google736 google737 google738 google739 google740 google741 google742 google743 google744 google745 google746 google747 google748 google749 google750 google751 google752 google753 google754 google755 google756 google757 google758 google759 google760 google761 google762 google763 google764 google765 google766 google767 google768 google769 google770 google771 google772 google773 google774 google775 google776 google777 google778 google779 google780 google781 google782 google783 google784 google785 google786 google787 google788 google789 google790 google791 google792 google793 google794 google795 google796 google797 google798 google799 google800 google801 google802 google803 google804 google805 google806 google807 google808 google809 google810 google811 google812 google813 google814 google815 google816 google817 google818 google819 google820 google821 google822 google823 google824 google825 google826 google827 google828 google829 google830 google831 google832 google833 google834 google835 google836 google837 google838 google839 google840 google841 google842 google843 google844 google845 google846 google847 google848 google849 google850 google851 google852 google853 google854 google855 google856 google857 google858 google859 google860 google861 google862 google863 google864 google865 google866 google867 google868 google869 google870 google871 google872 google873 google874 google875 google876 google877 google878 google879 google880 google881 google882 google883 google884 google885 google886 google887 google888 google889 google890 google891 google892 google893 google894 google895 google896 google897 google898 google899 google900 google901 google902 google903 google904 google905 google906 google907 google908 google909 google910 google911 google912 google913 google914 google915 google916 google917 google918 google919 google920 google921 google922 google923 google924 google925 google926 google927 google928 google929 google930


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS