読者です 読者をやめる 読者になる 読者になる

OpenCV 2.4 を用いた USB カメラの取り込み1

実装前にいろいろと試す用途で,EclipseOpenCV 用プロジェクトを作成する.ここはそのメモ.

EclipseC++ プロジェクトを作成する.

Eclipse を開いてからの...

  • "Project Exploer 右クリック" -> "New" -> "C/C++" を選択 -> "C++ Project" を選択.

f:id:rkoichi2001:20160522215514p:plain

  • "Project Name" を指定 -> "Location" を決定 -> "Executable" を選択 -> "Hello World C++ Project" を選択 -> "Linux GCC" を選択

f:id:rkoichi2001:20160522215949p:plain

OpenCV のインクルードパス,ライブラリパスを通す.

作成したプロジェクトを選択してからの...

  • "Project" 右クリック -> "Properties" -> "C/C++ General" を選択 -> "Paths and Symbols" を選択.

f:id:rkoichi2001:20160522223315p:plain

  • インクルードパスの追加

環境設定で構築した OpenCV の include フォルダのパスを追加.

f:id:rkoichi2001:20160522223532p:plain

  • ライブラリパスの追加

環境設定で構築した OpenCV の lib フォルダのパスを追加

f:id:rkoichi2001:20160522230051p:plain

  • ライブラリの追加

環境設定で構築した OpenCV の lib フォルダ内にあるライブラリを追加.今回はどれを使うかはっきりしなかったので,とりあえず全部追加.ここで,ライブラリ名は先頭の "lib" と末尾の ".so" を除いた形で追加する.

f:id:rkoichi2001:20160522230123p:plain

以上, "Apply" を押下して, "OK" で再ビルドが走る.

OpenCV を使っての USB カメラの取り込み.

 下記のサンプルコードを参考に作成した下記のコードをコンパイルして,カメラ画像が表示されることを確認.

Reading and Writing Images and Video — OpenCV 2.4.13.0 documentation

#include <iostream>
#include "opencv2/opencv.hpp"

using namespace std;
using namespace cv;

int main(int, char**)
{
	const string fileName = "/dev/videoLeftImgSrc";
    //VideoCapture cap(fileName); // open the default camera
	VideoCapture cap(0); // open the default camera
    if(!cap.isOpened()) {  // check if we succeeded
    	cout << "Can not open device." << endl;
    	return -1;
    }

    Mat edges;
    namedWindow("edges",1);
    for(;;)
    {
        Mat frame;
        cap >> frame; // get a new frame from camera
        cvtColor(frame, edges, CV_BGR2GRAY);
        //cvtColor(frame, edges, CV_YUV2RGB_YUYV);
        //cvtColor(frame, edges, CV_BayerBG2BGR);
        //GaussianBlur(edges, edges, Size(7,7), 1.5, 1.5);
        //Canny(edges, edges, 0, 30, 3);
        imshow("edges", edges);
        if(waitKey(30) >= 0) break;
    }
    // the camera will be deinitialized automatically in VideoCapture destructor
    return 0;
}

下記実行結果.どうやら Pixel Format がおかしいみたいなので,V4L2 の API を使って調整する必要があるみたい.とりあえず開発環境が整ってバンザイということで,それは次回に!

f:id:rkoichi2001:20160522234459p:plain