Handson opencv!...
-
Upload
saya-katafuchi -
Category
Education
-
view
724 -
download
5
Transcript of Handson opencv!...
画像処理ライブラリを使って面白いプログラムを作ろう!
長崎県立大学 国際情報学部 情報メディア学科 吉村ゼミ
先週やったこと
• 黄色を抽出するプログラムを作る
今週やること
• 黄色を認識したらブラウザでWebページを表示する
色抽出プログラムの解説
• カメラの映像を取得するだけならば,ウィンドウサイズの指定は特にしなくても良い
• これからは色情報→画素値を扱っていくので,ウィンドウサイズが明確に決まっていないとプログラムは動いてくれない
Mat src_video; // サイズを特に指定しない行列を作る
Mat src_video(Size(640,480),CV_8UC1,Scalar::all(255));
// サイズが640×480のカラー画像で,行列の全ての画素を255で埋める(真っ白の画像を作る)
RGB色空間→HSV色空間への変換
• 通常OpenCVはRGB色空間で画像を扱うが,HSV色空間へ変換することも可能
• cvtColor(smooth_video, hsv_video, CV_BGR2HSV);
• 引数は左から,変換元の画像,変換後の画像,変換タイプ
• CV_BGR2HSVを指定すると,RGB色空間からHSV色空間へ変換してくれる
色の抽出
• http://www.color-sample.com/colors/3559/
• この黄色を認識するには, • Hue:55°
• Saturation:100%
• Value(Brightness):95%
を指定すればよい
OpenCVでのHSV色情報の取得
• OpenCVでは, • Hue:0~180度(つまり2分の1)
• Satulation:0~255
• Value:0~255
で表現されるので,各値を変換しなければならない…つまり • Hue:55/2=22.5
• Saturation:255.0*1.0=255.0
• Value:255.0*0.95=242.25
のように変換するとよい
OpenCVでのHSV色情報の取得
このような式を使えば,HSVの各値が取れる
hue = hsv_video.at<Vec3b>(y, x)[0];
sat = hsv_video.at<Vec3b>(y, x)[1];
val = hsv_video.at<Vec3b>(y, x)[2];
OpenCVでのHSV色情報の取得
OpenCVでのHSV色情報の取得 • Hue:55/2=22.5
• Saturation:255.0*1.0=255.0
• Value:255.0*0.95=242.25
以上の値を含むような条件式を作る(条件は緩めに!)
if ((hue < 35 && hue > 20) && sat > 127) {
dst_img.at<uchar>(y, x) = 255;
}else {
dst_img.at<uchar>(y, x) = 0;
}
黄色の条件に一致する画素は白,一致しないものは黒として,結果画像(dst_img)を作成する
色を認識してWebページを開く
条件
• 黄色の画素を1000個以上発見したら,プログラムを止めてWebブラウザを起動し,指定したWebページへアクセスする
ヘッダファイルの追加
#include <iostream>
#include <windows.h>
#include <shellapi.h>
#include <opencv2/opencv.hpp>
#include <opencv2/opencv_lib.hpp>
#include <opencv2/highgui/highgui.hpp>
#pragma comment(lib, "shell32.lib")
変数の追加
bool browser_flag = false; // プログラムを止めるための変数
int y_aria = 0; // 黄色の画素をカウントする変数
条件式の変更(1)
while (browser_flag != true){
dst_img = Scalar::all(0);
y_aria = 0;
・
・
・ browser_flagがtrueではないとき,カメラでのキャプチャを行うように
条件式を変更する.さらに,黄色の画素をカウントする変数を入れる
条件式の変更(2)
if ((hue < 35 && hue > 20) && sat > 127){
dst_img.at<uchar>(y, x) = 255;
y_aria++;
} else {
dst_img.at<uchar>(y, x) = 0;
}
黄色の画素を発見したら、随時加算し黄色の画素の総数を計算する
条件式の変更(3)
imshow("認識結果",dst_img);
if (y_aria >1000) browser_flag = true;
黄色の画素が1000個以上見つかったら,browser_flagの値をtrueにする
→While文が止まり,カメラキャプチャが終了する
Webブラウザの起動とURLの指定
指定したURLをWebブラウザで開いてくれる関数
ShellExecute(0, 0, L"http://www.saruku.info/course/Y139.html", 0, 0, SW_SHOW);
ShellExecute()関数はWindowsで決められたソフトウェア(ブラウザ,メモ帳,Office,…)を起動し,指定したファイルを開いてくれる関数
引数の中にはURLが指定されている
エラーが出る!
• OKボタンを押して終了してください… • 「 VisualStudio2015 再頒布用」で検索→一番上のリンクをクリック