web-dev-qa-db-ja.com

OpenCVとGigEビジョンカメラ

GigE VisionイーサネットカメラでOpenCVを使用する必要がありますが、これを行う方法、ポインター、ドキュメント、コード例についての有用な情報が見つかりませんでしたか?

カメラからフレームを読み取る必要があります。

31

Gig-Eは、さまざまなカメラの通信規格です。 OpenCVに Prosilica Gig-E ベースのカメラのラッパーが含まれるようになりました(CV_CAP_PVAPIを参照)

ただし、一般的には、カメラのネイティブAPIを使用してデータを取得し、openCVを使用して返されたデータを画像に変換する方が適切です。openCvには、いくつかのBayerパターン-> RGBルーチンが含まれています。

CvCaptureモジュールは、カメラやファイルからシームレスに読み取ることができるため、テストには便利ですが、高速リアルタイムビジョンにはあまり適していません。

20
Martin Beckett

あなたはこれを行うことができます! GenTLコンシューマであるBaumer GAPI SDKを使用しました。 GenTLは、genIcam内のモジュールである汎用トランスポート層です。 GenTLで読むことができます [〜#〜]ここ[〜#〜] 。 BaumerのGAPIやBaslerのAPIなどのGenTLコンシューマを使用すると、物事がはるかに簡単になります。 GigEカメラで動作するはずです。

BaumerのGAPI SDKをより包括的な方法で別の回答 [〜#〜]こちら[〜#〜] で使用したので、必要なものの概要を示します。

  1. ビジュアルスタジオ
  2. openCV 3 for C++( [〜#〜]こちら[〜#〜] はYouTubeチュートリアルの方法です)
  3. Baumer GAPI SDK [〜#〜]ここ[〜#〜]
  4. (オプション)BaumerのCamera Explorerプログラムを使用して、カメラとネットワークインターフェイスカードをテストします。ジャンボパケットを有効にする必要があります。 BaumerのIPconfigプログラムを使用して、カメラと車のIPアドレスを構成する必要がある場合もあります。
  5. システム変数を設定します。 Baumer GAPI SDKのドキュメントフォルダーにあるプログラマガイドを参照してください(_C:\Program Files\Baumer\Baumer GAPI SDK\Docs\Programmers_Guide_にあるはずです)。セクション4.3.1を参照してください。
  6. Visual Studioで新しいC++プロジェクトを作成し、プロパティを構成します。セクション4.4.1を参照してください。
  7. Examplesフォルダーに移動し、005_PixelTransformationの例を探します。 (_C:\Program Files\Baumer\Baumer GAPI SDK\Components\Examples\C++\src\0_Common\005_PixelTransformation_)にある必要があります。 C++ファイルをコピーして、新しいプロジェクトのソースディレクトリに貼り付けます。
  8. ビルドおよびコンパイルできることを確認します。注:カメラのパラメータ(露出時間など)を調整するパーツに問題がある場合があります。 8つの画像について、最初の6行の最初の6ピクセルについて画面に書き込まれたピクセル値が表示されます。

これらの#includeステートメントを.cppソースファイルの先頭に追加します。

_#include <opencv2\core\core.hpp 
#include <opencv2\highgui\highgui.hpp> 
#include <opencv2\video\video.hpp>
_

これらの変数宣言をmain()関数の先頭に追加します

_// OPENCV VARIABLE DECLARATIONS
cv::VideoWriter cvVideoCreator;                 // Create OpenCV video creator
cv::Mat openCvImage;                            // create an OpenCV image
cv::String videoFileName = "openCvVideo.avi";   // Define video filename
cv::Size frameSize = cv::Size(2048, 1088);      // Define video frame size
cvVideoCreator.open(videoFileName, CV_FOURCC('D', 'I', 'V', 'X'), 20, frameSize, true); // set the codec type and frame rate
_

元の005_PixelTransformation.cppファイルでは、569行目に、8つの画像をループするforループがあり、for(int i = 0; i < 8; i++)と表示されています。これを継続的に実行するように変更したいと考えています。これをwhileループに変更することでこれを行いました

_while (pDataStream->GetIsGrabbing())
_

Whileループ内には、画像のピクセル形式をチェックするifおよびelseステートメントがあります。 elseステートメントの終了中括弧の後、pImage->Release();ステートメントの前に、次の行を追加します

_// OPEN CV STUFF
openCvImage = cv::Mat(pTransformImage->GetHeight(), pTransformImage->GetWidth(), CV_8U, (int *)pTransformImage->GetBuffer());

// create OpenCV window ----
cv::namedWindow("OpenCV window: Cam", CV_WINDOW_NORMAL);

//display the current image in the window ----
cv::imshow("OpenCV window : Cam", openCvImage);
cv::waitKey(1);
_

openCvImageオブジェクトに正しいピクセル形式を選択したことを確認してください。私のカメラはモノ8ビットなので、_CV_8U_を選択しました。

ビルドしてコンパイルすると、カメラからのライブフィードを表示するopenCVウィンドウが表示されます。

私が言ったように、私はそれをしたので、それは可能です。問題が発生した場合は、プログラマーズガイドを参照してください。

enter image description here

9
mark jay

私はOpenCVでuEye GigEカメラ(5240)を使用しています。そのままではcv :: VideoCaptureとして機能します。それにもかかわらず、APIを使用すると、カメラのパラメーターをより詳細に制御できます。

4
Herr von Wurst

カメラの種類とプラットフォームについては触れません。 Windowsでは、OpenCVのドキュメントによると:

現在、Windowsでは2つのカメラインターフェイスを使用できます:Video for Windows(VFW)とMatrox Imaging Library(MIL)

GigEカメラドライバーがVFWをサポートしている可能性は低く、MILには無料のAFAIKではないMILライブラリが必要です。

ほとんどのGigEカメラには、画像のキャプチャに使用できるAPIがあります。ほとんどの場合、APIは GenICam に基づいています。おそらくあなたの最善のアプローチは、カメラに付属のAPIを使用し、キャプチャした画像をIplImage構造(C)またはMatクラス(C++)に変換することです。

3