ビデオのwhile(1){ }の繰り返しがあるコードを書くときの注意点

「ビデオのwhile(1){ }の繰り返しがあるコードを書くときの注意点」の編集履歴(バックアップ)一覧はこちら

ビデオのwhile(1){ }の繰り返しがあるコードを書くときの注意点」(2010/02/05 (金) 15:29:11) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

OpenCVのサンプルでcvLoadImageを使って画像イメージを1度だけ呼び込んで処理するコードを動画にする場合の注意点を説明する。  ビデオのように連続して画像を呼び込む場合はwhile内の繰り返しの処理に注意する必要がある。 基本的に、while内で使う変数やウィンドウの表示、メモリ領域を確保するcreate,clone,load関係の関数はwhileの前に書く。前準備といえる(一度だけの処理)。 一方、while内は実際の処理でこの時点でメモリの確保などは基本的にはしないようにする。 while内は繰り返しだ。1度だけの処理とは違います。 while内に必要な関数は、以下の3つが最低限必要だろう。 1、cvQueryFrame 随時IplImageの作成         src_img = cvQueryFrame (capture); 2、cvShowImage 確認のためのイメージの再描画    cvShowImage ("ウインドウタイトル名", src_img); 3、cvWaitKey ブレイクのために使う         int key = cvWaitKey (10); if (key >= 0) { break; } これらは必ず使うはず。 cvQueryFrame関数を使うにはwhile句の前にcvCreateCameraCaptureがいる。 CvCapture *capture;と宣言しておいて capture = cvCreateCameraCapture(0); このcapture変数を使ってIplImageを作る。 静止画でIplImage *img;を作るようになっていると思うが、さらに作る場合は、img = cvCreateImage(cvGetSize(dst_img1), IPL_DEPTH_8U, 1);カラーなら1を3に 繰り返しの中でcreate系の代わりによく使う関数がある。 画像を2値化や画像サイズや画素の変更、画像のコピーなどだ。 画像のコピーは、cvCopy(img1, img2); img1もimg2もメモリ上に存在し、同じサイズ。 グレースケールへ変更は、cvCvtColor(img1, img_gray, CV_BGR2GRAY); img1もimg_grayもメモリ上に存在し、それぞれ適切なサイズ。 この2つの関数は、mallocのように新たにメモリを確保するようなことはない。 cvReleaseCapture(&capture); //終了後に固まるのはこれがないことが多い *まとめるとこんなかんじ while(1)の前 CvCapture *capture; capture = cvCreateCameraCapture(0); cvNameWindowもこちらに移動 while(1)ブロック内 src_img = cvQueryFrame (capture); cvShowImage ("ウインドウタイトル名", src_img); int key = cvWaitKey (10); if (key >= 0) { break; } while(1)ブロック後 cvReleaseCapture(&capture); //終了後に固まるのはこれがないことが多い その他 画像のコピーは、cvCopy(img1, img2); グレースケールへ変更は、cvCvtColor(img1, img_gray, CV_BGR2GRAY); *貼付け用 CvCapture *capture; capture = cvCreateCameraCapture(0); src_img = cvQueryFrame (capture); int key = cvWaitKey (10); if (key >= 0) { break; } cvReleaseCapture(&capture); //終了後に固まるのはこれがないことが多い cvCopy(img1, img2); cvCvtColor(img1, img_gray, CV_BGR2GRAY); cvFlip(img);//上下反転 -[[動画シリーズ コーナーの検出]] 静止画のサンプルから動画に変更した手順をソース内のコメントで解説している。 -[[動画シリーズ]] -[[ヒープ領域に作られるmalloc的な関数の使用上の注意]] 「今日の訪問数:&counter(today)」 「昨日の訪問数:&counter(yesterday)」 「今までの訪問数:&counter(total)」 #comment
OpenCVのサンプルでcvLoadImageを使って画像イメージを1度だけ呼び込んで処理するコードを動画にする場合の注意点を説明する。  ビデオのように連続して画像を呼び込む場合はwhile内の繰り返しの処理に注意する必要がある。 基本的に、while内で使う変数やウィンドウの表示、メモリ領域を確保するcreate,clone,load関係の関数はwhileの前に書く。前準備といえる(一度だけの処理)。 一方、while内は実際の処理でこの時点でメモリの確保などは基本的にはしないようにする。 while内は繰り返しだ。1度だけの処理とは違います。 while内に必要な関数は、以下の3つが最低限必要だろう。 1、cvQueryFrame 随時IplImageの作成         src_img = cvQueryFrame (capture); 2、cvShowImage 確認のためのイメージの再描画    cvShowImage ("ウインドウタイトル名", src_img); 3、cvWaitKey ブレイクのために使う         int key = cvWaitKey (10); if (key >= 0) { break; } これらは必ず使うはず。 cvQueryFrame関数を使うにはwhile句の前にcvCreateCameraCaptureがいる。 CvCapture *capture;と宣言しておいて capture = cvCreateCameraCapture(0); このcapture変数を使ってIplImageを作る。 静止画でIplImage *img;を作るようになっていると思うが、さらに作る場合は、img = cvCreateImage(cvGetSize(dst_img1), IPL_DEPTH_8U, 1);カラーなら1を3に 繰り返しの中でcreate系の代わりによく使う関数がある。 画像を2値化や画像サイズや画素の変更、画像のコピーなどだ。 画像のコピーは、cvCopy(img1, img2); img1もimg2もメモリ上に存在し、同じサイズ。 グレースケールへ変更は、cvCvtColor(img1, img_gray, CV_BGR2GRAY); img1もimg_grayもメモリ上に存在し、それぞれ適切なサイズ。 この2つの関数は、mallocのように新たにメモリを確保するようなことはない。 cvReleaseCapture(&capture); //終了後に固まるのはこれがないことが多い *まとめるとこんなかんじ while(1)の前 CvCapture *capture; capture = cvCreateCameraCapture(0); cvNameWindowもこちらに移動 while(1)ブロック内 src_img = cvQueryFrame (capture); cvShowImage ("ウインドウタイトル名", src_img); int key = cvWaitKey (10); if (key >= 0) { break; } while(1)ブロック後 cvReleaseCapture(&capture); //終了後に固まるのはこれがないことが多い その他 画像のコピーは、cvCopy(img1, img2); グレースケールへ変更は、cvCvtColor(img1, img_gray, CV_BGR2GRAY); *貼付け用 CvCapture *capture; capture = cvCreateCameraCapture(0); src_img = cvQueryFrame (capture); int key = cvWaitKey (10); if (key >= 0) { break; } cvReleaseCapture(&capture); //終了後に固まるのはこれがないことが多い cvCopy(img1, img2); cvCvtColor(img1, img_gray, CV_BGR2GRAY); cvFlip(img);//上下反転 printf("%d\n",__LINE__); -[[動画シリーズ コーナーの検出]] 静止画のサンプルから動画に変更した手順をソース内のコメントで解説している。 -[[動画シリーズ]] -[[ヒープ領域に作られるmalloc的な関数の使用上の注意]] 「今日の訪問数:&counter(today)」 「昨日の訪問数:&counter(yesterday)」 「今までの訪問数:&counter(total)」 #comment

表示オプション

横に並べて表示:
変化行の前後のみ表示:
ツールボックス

下から選んでください:

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