Skip to content

Instantly share code, notes, and snippets.

@s-yoshiki
Created September 27, 2015 14:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save s-yoshiki/318090b116adcc72765f to your computer and use it in GitHub Desktop.
Save s-yoshiki/318090b116adcc72765f to your computer and use it in GitHub Desktop.
FlycaptureSDK and OpenCV
#include "stdafx.h"
#include <pgrflycapture.h>
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
int _tmain(int argc, _TCHAR* argv[])
{
FlyCaptureContext flycapture;
FlyCaptureError error;
char window_name[] = "Camera image";
// 初期化処理
cvNamedWindow( window_name, CV_WINDOW_AUTOSIZE); // OpenCVのウインドウを作成する。ウインドウへのアクセスにはwindow_nameで指定した名前を使います
FlyCaptureImage camera_image, rgb_image; // 画像保持用の構造体
IplImage *cv_image; // OpenCVの画像
error = flycaptureCreateContext( &flycapture); // コンテキストの作成
error = flycaptureInitialize( flycapture, 0); // IEEE-1394バス上のひとつのカメラを初期化
if ( error != FLYCAPTURE_OK) // カメラが認識されないと終了
return 0;
error = flycaptureStart( flycapture, FLYCAPTURE_VIDEOMODE_ANY, FLYCAPTURE_FRAMERATE_ANY); // カメラから画像の転送を開始する
if ( error != FLYCAPTURE_OK)
return 0;
error = flycaptureGrabImage2( flycapture, &camera_image); // 画像サイズを得るために1回キャプチャする
if ( error != FLYCAPTURE_OK)
return 0;
unsigned char *bgr_buffer = new unsigned char[ camera_image.iRows * camera_image.iCols * 3]; // キャプチャした画像のサイズと同じサイズのRGB画像を保持するバッファの確保
cv_image = cvCreateImage( cvSize( camera_image.iCols, camera_image.iRows), IPL_DEPTH_8U, 3); // OpenCV画像の作成(8ビット3チャネル)
//
// カメラから画像を取得し、表示するループ
//
while ( cvWaitKey( 10) == -1){ // キー入力があるまで繰り返す
error = flycaptureGrabImage2( flycapture, &camera_image); // 画像をひとつメモリにキャプチャする
if ( error != FLYCAPTURE_OK)
return 0;
rgb_image.pData = bgr_buffer; // バッファを画像保持する構造体にセット
rgb_image.pixelFormat = FLYCAPTURE_BGR; // RGB画像のフォーマットをWindowsで標準のBGR形式にセット
error = flycaptureConvertImage( flycapture, &camera_image, &rgb_image); // カメラからキャプチャした画像をRGB画像に変換
if ( error != FLYCAPTURE_OK)
return 0;
memcpy( cv_image->imageData, rgb_image.pData, rgb_image.iRows * rgb_image.iRowInc); // OpenCVの画像バッファにRGBバッファをコピー
cvShowImage( window_name, cv_image); // ウインドウを描画
}
//
// 終了処理
//
error = flycaptureStop( flycapture); // カメラからの画像転送を停止
error = flycaptureDestroyContext( flycapture); // コンテキストを破棄
cvReleaseImage( &cv_image); // OpenCV画像の解放
cvDestroyWindow(window_name); // OpenCVウインドウの解放
delete []bgr_buffer; // バッファの解放
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment