Created
September 27, 2015 14:07
-
-
Save s-yoshiki/318090b116adcc72765f to your computer and use it in GitHub Desktop.
FlycaptureSDK and OpenCV
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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