simple 動画 テンプレートととして使えるようにフォルダを作っておこう

ビデオの基本コード
#include<stdio.h>
#include<cv.h>
#include<highgui.h>

int main(void) {
  CvCapture *capture = NULL;
  IplImage *frame = NULL;
  capture = cvCreateCameraCapture(0); //カメラを初期化 数値を変えると複数のカメラが使える。
  cvNamedWindow("Capture", CV_WINDOW_AUTOSIZE);//Windowタイトル名Captureでウィンドウを表示
  while(1) {//繰り返し
    int c;
    frame = cvQueryFrame(capture);//カメラから画像を取り込む
    cvShowImage("Capture", frame);//Windowタイトル名がCaptureのウィンドウへ画像を送る
    c = cvWaitKey(10);//0.010秒待つ
    //printf("%d",c);
    if(c>=0) break; //何かキーをwhileなどのループを抜ける
  }
  cvReleaseCapture(&capture);
  cvDestroyWindow("Capture");
  return 0;
}
以上---------------------------------------------------------------------------------

線を引く場合

「cvQueryFrame(capture);」の次に以下を追加すると線を引くことができる。
   int x,y;
   for(x=0;x<120;x++)
    for(y=50;y<60;y++)
    {
	    //グレイスケールの場合は((uchar*)(frame->imageData + frame->widthStep*y))[x]
	    ((uchar*)(frame->imageData + frame->widthStep*y))[x*3]=255;//bulue 青色
	    ((uchar*)(frame->imageData + frame->widthStep*y))[x*3+1]=255;//green 緑色
	    ((uchar*)(frame->imageData + frame->widthStep*y))[x*3+2]=255;//red 赤
    }
frame->imageData が画面左上のメモリ上の位置。ここを起点としている。
frame->widthStepは、frame->widthStep画面の横幅
yは、左上から何行目か
frame->widthStep*y として掛け算すると画面上の相対的な位置になる。
frame->imageData + frame->widthStep*yでメモリ上の位置と画面上の位置が一致する。

画像を保存する場合

「if(c>=0) break;」
の行を削除して、以下を書くとsを押すとカラー画像と濃淡画像を保存する。
   if(c=='s'){
      IplImage *img = cvCreateImage(cvGetSize(frame), frame->depth, 1);//濃淡画像用の実体imgを作る
       cvCvtColor(frame, img, CV_BGR2GRAY); //カラー画像を濃淡画像に変換
       cvSaveImage("color.jpg", frame);
      cvSaveImage("gray.jpg", img);
   }else if (c>=0) //何かのキーを押した場合(s以外)
       break; //何かキーをwhileなどのループを抜ける
最終更新:2009年12月17日 19:34
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。