ビデオの基本コード
#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