トップ «前の日記(2010-07-24) 最新 次の日記(2010-07-31)» 編集

AOISAKURA 日記

2003|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|04|05|06|07|08|09|12|
2013|02|03|05|06|08|09|10|11|
2015|11|
2016|12|
2017|03|08|
2018|01|03|06|
2019|05|07|09|10|
2020|01|02|03|
2021|03|07|
2022|06|
2023|11|

pixiv / twitter

bluesky / misskey / pawoo

※発信する情報は、個人の見解・意見であり、所属する会社の見解・意見ではありません。


2010-07-25 至福 [長年日記]

_ [programming][computer] v4l で UVC のカメラ同時表示

作ったプログラムは OpenCV の highgui を使うプログラムなんだけども、これは V4L2 を通して USB カメラの動画を表示させます。つかほんと楽だよ OpenCV。

#include "highgui.h"
int main( int args, char** argv ) {
    cvNamedWindow( "Example2-0", CV_WINDOW_AUTOSIZE );
    cvNamedWindow( "Example2-1", CV_WINDOW_AUTOSIZE );
    CvCapture* capture = cvCreateCameraCapture(1);
    CvCapture* capture1 = cvCreateCameraCapture(0);
    cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH, 320);
    cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT, 240);
    cvSetCaptureProperty(capture1, CV_CAP_PROP_FRAME_WIDTH, 320);
    cvSetCaptureProperty(capture1, CV_CAP_PROP_FRAME_HEIGHT, 240);
    IplImage* frame;
    IplImage* frame1;
    while(1) {
        frame = cvQueryFrame( capture );
        frame1 = cvQueryFrame( capture1 );
        if ( !frame ) break;
        if ( !frame1 ) break;
        cvShowImage( "Example2-0", frame );
        cvShowImage( "Example2-1", frame1 );
        char c = cvWaitKey(33);
        //if ( c == 27 ) break;
    }
    cvReleaseCapture( &capture );
    cvReleaseCapture( &capture1 );
    cvDestroyWindow( "Example2-0" );
    cvDestroyWindow( "Example2-1" );
    return 0;
}

これで二つのカメラの動画を同時に表示できる。...はずだったんだけど、実際に動かそうとすると、二つ目のカメラの Initialize 時に、以下のようなエラーが発生する。おかげで一枚目だけ表示されて、もう一枚は真っ黒。

HIGHGUI ERROR: V4L: Could not SYNC to video stream.
no space left on device

最初はどこでエラーを起こしているのかわからなかったけど、v4l のレベルでエラーが起こっていて、調べてみると gentoo wiki で「USB の帯域を使いきっている場合に発生するので、繋ぐ先を変えればうまくいくかも」と書かれていた。

というわけでつなぎ場所をコロコロ変えても変わらず、最終的に余っていた USB2.0 の PCI ボードを差してそこにカメラを片方接続した。結果、うまく両方とも写った。