2008年8月11日

静止画像の表示

とりあえず、[ShowImage]buttonを押すとpictureBox1に静止画像を表示してみました(fig.1)。

                 fig.1
以下がインクルードファイルです。
#include "stdio.h"
#include "highgui.h"
#include "cvaux.h"

以下がbutton event 内のソースになります。

//カメラキャプチャ用の構造体
CvCapture *capture;
//キャプチャ画像用のIplImage
IplImage *Image;

//カメラを初期化をする
if((capture = cvCreateCameraCapture(-1)) == NULL){
  //カメラが見つからなかった場合
  this->label1->ForeColor = System::Drawing::Color::Red;
  this->label1->Text = "Not Find Camera";
  return;
}else{
  this->label1->Text = "Find Camera";
}

//カメラからの入力画像1フレームをframeImageに格納する
Image = cvQueryFrame(capture);

//画像を生成する
IplImage *frameImage = cvCreateImage(cvGetSize(Image), IPL_DEPTH_8U, 3);

//画像の中心を求める
CvPoint2D32f center = cvPoint2D32f(Image->width/2.0, Image->height/2.0);

//行列を生成する
CvMat *rotationMatrix = cvCreateMat(2,3,CV_32FC1);

//変換行列を求める
cv2DRotationMatrix(center, ANGLE, SCALE, rotationMatrix);

//画像の回転を行う
cvWarpAffine(Image, frameImage, rotationMatrix, CV_INTER_LINEAR | CV_WARP_FILL_OUTLIERS, cvScalarAll(0));

//BMPCalssを用意
Bitmap^ bmp = gcnew Bitmap( frameImage->width, frameImage->height,   Imaging::PixelFormat::Format24bppRgb);

//IplImageをBitmapに変換
Imaging::BitmapData^ bmpData;
bmpData = bmp->LockBits(System::Drawing::Rectangle(0, 0, bmp->Width, bmp->Height), Imaging::ImageLockMode::ReadWrite, bmp->PixelFormat );
memcpy( bmpData->Scan0.ToPointer(), frameImage->imageData, frameImage->imageSize );
bmp->UnlockBits(bmpData);

// ピクチャボックスに表示
pictureBox1->Image = bmp;

//キャプチャを開放する
cvReleaseCapture(&capture);

以上。

0 件のコメント: