Handson opencv!...

22
画像処理ライブラリを使って面白いプログラムを作ろう! 長崎県立大学 国際情報学部 情報メディア学科 吉村ゼミ

Transcript of Handson opencv!...

画像処理ライブラリを使って面白いプログラムを作ろう!

長崎県立大学 国際情報学部 情報メディア学科吉村ゼミ

先週やったこと

• どんなプログラムを作るか考える

• OpenCVをインストール・パスを通す

今日やること

1. Visual Studioを起動してみる

2. サンプルプログラムを動かしてみる

3. USBカメラ(インサイトカメラ)を使って映像を撮影するプログラムを書く

• Microsoft社が開発した統合開発環境(IDE).

• 現在の最新版はVisualStudio2015

• Windows用プログラム,スマートフォンアプリ,Webサービスなど様々なソフトウエアを開発することができます

を使ってみよう

https://reiji1020.gitbooks.io/play-opencv/content/usevs.html

ちゅうい

• 色が全然違う(白い)

• メニューバーの数が違う

• ウインドウの配置が違う

この点については私がVisual Studioの設定を弄っているだけなので

少し違いがあっても問題ありません

サンプルプログラムを動かしてみよう

https://reiji1020.gitbooks.io/play-opencv/content/sample-code.html

サンプルプログラムの動作について

1. 画像を読み込む

2. 何かキーが押されるまで画像を表示する

※ファイルパスの取得について

• 好きな画像のパスを追加してください• マイピクチャ・自分のお気に入りの写真・イラスト…

• ファイルパスの確認の仕方はhttps://reiji1020.gitbooks.io/play-opencv/content/30d5_30a1_30a4_30eb_30d1_30b9_306e_que_ren_306e_sh.html

プログラムの説明(1)

• OpenCVで提供されている関数は,関数名の頭に「cv」が付いています.• cv::imread(),cv::namedwindow(),cv::imshow(),cv::waitKey()

• プログラムの頭でopencv関連のhppファイルを読み込んでいますが、「今からOpenCVの関数使いますよ~」という合図だと思ってもらっていいです.

プログラムの説明(2)

• Cv::Matで画像を入れる変数を作ります

• コンピュータでは,画像は赤・緑・青の3つの光の強さで表現されます.

詳しくはマルチメディア演習を履修しよう!

プログラムの説明(3)

• imread():画像ファイルをプログラムに読み込むための関数.先ほど作ったsrc_imgという画像を入れるための箱に,実際に画像を入れている

• namedwindow():実際に画像を表示するためのウィンドウを用意する

• imshow():imread()で読み込んだ画像を表示する関数.表示に使用するウィンドウはnamedwindow()で用意したものを使う.

• waitkey():指定のキーが入力されるまでプログラムを停止する.

エラーが出る場合は言ってください

1. 「msvcr100d.dllが見つからなかったため~…」→http://www.microsoft.com/ja-jp/download/details.aspx?id=5555

2. いきなり500個くらいエラーが出る→残念ですがVisual Studioをインストールし直してください

3. その他OpenCV周りのエラー→環境変数を確認しましょう

カメラで映像を撮影するプログラム

USBカメラで撮影をするプログラムを作ろう

https://reiji1020.gitbooks.io/play-opencv/content/video.html

include文とmain関数を書く

#include <iostream>

#include <opencv2/opencv.hpp>

#include <opencv2/opencv_lib.hpp>

#include <opencv2/highgui/highgui.hpp>

using namespace cv;

using namespace std;

int main(void){

// このなかにプログラムを書いていきます

}

USBカメラへのアクセス

main関数の中に

VideoCapture capture(0);

// カメラが使えない場合はプログラムを止めるif(!capture.isOpened())

return -1;

VideoCaptureクラス

• コンピューターで認識されているインカメラ,USBカメラにアクセスする為に必要な機能を定義している

• ここではVideoCaptureの構造を持つ箱として,captureを宣言しました

クラスに関する詳しい説明をドキュメントの下部に書いています.

是非参考にして下さい.

取得した映像をウィンドウに表示する(1)

Mat frame, src_video;

char windowName[] = "カメラでさるくマップを撮影してね!";

namedWindow(windowName, CV_WINDOW_AUTOSIZE);

while(WaitKey(1) == -1){

capture >> frame;

src_video = capture;

imshow(windowName,src_video);

}

destroyAllWindow();

return 0;

取得した映像をウィンドウに表示する

While分の中身では,

1. captureで取得したカメラの映像をframeに入力する

2. src_videoにframeの画像をコピーする

3. src_videoの画像を,windowNameという名前のウィンドウで表示をする

4. 1~3の処理を,キーボードのキーが押されるまで繰り返す

という処理を行っています

来年やること

1. 色空間ってなんだろう?

2. 映像から特定の色を抽出してみよう

よいお年を!