SlideShare a Scribd company logo
OpenCVの入り口
1. OpenCVとは 
2. インストール 
3. 画像の読み込み 
4. 画像の加工 
5. 画像の保存 
6. 将来
OpenCVとは 
1. 画像処理を行うライブラリである。 
2. 大変多くのアルゴリズムが実装されている。 
3. BSDライセンスである。 
4. Python, Javaのインタフェースが用意されている。 
5. 一部、法的問題が起こる可能性があるものが含まれている。 
6. 現在のバージョンは2.xであり、2系以降C++インタフェースが導入された。
インストール 
ここから(http://opencv.org/) 
Windowsならインストーラをダウンロードする。 
Mac/Linuxならソースコードをダウンロードし、 
cmakeを使ってビルドする。 
! 
わたしはいつもこれをします。 
$> sudo port install opencv +python27
画像の読み込み 
9 #include <opencv2/highgui/highgui.hpp>! 
10 ! 
11 int main(int argc, const char * argv[])! 
12 {! 
13 // load a source image! 
14 const auto image = cv::imread("/Users/seiya_kumada/Pictures/lena.jpg");! 
15 ! 
16 // create a window named "name."! 
17 const auto name = "name";! 
18 cv::namedWindow(name);! 
19 ! 
20 // show the image! 
21 cv::imshow(name, image);! 
22 ! 
23 // wait until pushing any key! 
24 cv::waitKey();! 
25 ! 
26 return 0;! 
27 } 
1. imreadの第2引数にcv::IMREAD_GRAYSCALEを渡せばグレー画像になる。 
2. jpg, bmp, png, tifなどいろいろ読み込める。 
画像を読み込む。 
窓を用意する。 
表示する。 
キー入力を待つ。
画像の加工 
画素へのアクセス-1 
8 ! 
9 #include <opencv2/highgui/highgui.hpp>! 
10 ! 
11 int main(int argc, const char * argv[])! 
12 {! 
13 // load a source image! 
14 auto image = cv::imread("/Users/seiya_kumada/Pictures/lena.jpg");! 
15 ! 
16 // method (1)! 
17 for ( auto j = 0; j < image.rows; ++j ) {! 
18 auto ptr = image.ptr<cv::Vec3b>(j);! 
cv::Vec3bのポインタに変換する。 
19 for ( int i = 0; i < image.cols; ++i ) {! 
20 auto& p = ptr[i];! 
21 // auto b = p[0]; // blue! 
22 // auto g = p[1]; // green! 
23 // auto r = p[2]; // red! 
24 p[0] = 255;! 
25 }! 
26 }! 
27 ! 
28 // method (2)! 
29 for ( auto j = 0; j < image.rows; ++j ) {! 
30 auto row = image.row(j);! 
31 std::for_each(row.begin<cv::Vec3b>(), row.end<cv::Vec3b>(), [](cv::Vec3b& p){! 
32 p[0] = 255;! 
33 });! 
34 ! 
35 }! 
36 ! 
37 // method (3)! 
38 const auto& a = image.at<cv::Vec3b>(0, 0); 
イテレータも使えるので、STLと親和性がある。 
1つずつ取り出す。
画素へのアクセス-2 
9 #include <opencv2/highgui/highgui.hpp>! 
10 ! 
11 int main(int argc, const char * argv[])! 
12 {! 
13 // load a source image! 
14 auto image = cv::imread("/Users/seiya_kumada/Pictures/lena.jpg");! 
15 ! 
16 // get a region of interesting! 
17 auto roi = image(cv::Rect(100, 100, 50, 50));! 
指定した領域だけを取り出す。 
18 ! 
19 // modify only the region! 
20 std::for_each(roi.begin<cv::Vec3b>(), roi.end<cv::Vec3b>(), [](cv::Vec3b& p){! 
21 p[0] = 255;! 
22 });! 
23 
画像の加工
いろいろなアルゴリズム-1 
9 #include <opencv2/highgui/highgui.hpp>! 
10 #include <opencv2/imgproc/imgproc.hpp>! 
11 ! 
12 int main(int argc, const char * argv[])! 
13 {! 
14 auto capture = cv::VideoCapture{0};! 
15 if( !capture.isOpened() ) {! 
16 return 1;! 
17 }! 
18 ! 
19 auto frame = cv::Mat{};! 
20 auto edges = cv::Mat{};! 
21 const auto name = "edges";! 
22 cv::namedWindow(name);! 
23 ! 
24 for(;;)! 
25 {! 
26 capture >> frame;! 
27 cv::cvtColor(frame, edges, CV_BGR2GRAY);! 
28 cv::GaussianBlur(edges, edges, cv::Size(7,7), 1.5, 1.5);! 
29 cv::Canny(edges, edges, 0, 30, 3);! 
30 imshow(name, edges);! 
31 if ( cv::waitKey(30) >= 0 )! 
32 {! 
33 break;! 
34 }! 
35 }! 
36 } 
グレー画像に変換する。 
ぼかす 
エッジを拾う 
Gaussian Mixture 
http://seiya-kumada.blogspot.jp/2013/03/gaussian-mixturesem.html 
http://seiya-kumada.blogspot.jp/2013/03/em-opencv.html 
! 
K-means Clustering 
http://seiya-kumada.blogspot.jp/2013/03/k-means.html 
! 
シーン認識 
http://seiya-kumada.blogspot.jp/2012/06/blog-post.html 
! 
グラフカットによる領域分割 
http://seiya-kumada.blogspot.jp/2013/04/graphcut.html 
! 
Mean Shft Filtering 
http://seiya-kumada.blogspot.jp/2013/05/mean-shift-filtering.html 
画像の加工
いろいろなアルゴリズム-2 
9 #include <opencv2/core/core.hpp>! 
10 #include <opencv2/imgproc/imgproc.hpp>! 
11 #include <opencv2/objdetect/objdetect.hpp>! 
12 #include <opencv2/highgui/highgui.hpp>! 
13 ! 
14 // http://book.mynavi.jp/support/pc/opencv2/c3/opencv_img.html! 
15 ! 
16 int main(int argc, char *argv[])! 
17 {! 
18 const auto imagename = "/Users/seiya_kumada/Projects/face-detection/Lenna.png";! 
19 auto color_img = cv::imread(imagename);! 
20 ! 
画像の読み込み 
21 // convert it to the gray scale! 
22 auto gray_img = cv::Mat {};! 
23 cv::cvtColor(color_img, gray_img, CV_BGR2GRAY);! 
グレー画像へ変換 
24 ! 
25 // normalize the brightness and increase the contrast! 
26 cv::equalizeHist(gray_img, gray_img);! 
ヒストグラムを平滑化する。 
27 ! 
28 // load the classifier! 
29 const auto cascade_name = "/opt/local/share/OpenCV/haarcascades/haarcascade_frontalface_default.xml";! 
30 auto cascade = cv::CascadeClassifier {};! 
31 cascade.load(cascade_name);! 
識別器を読み込む。 
32 ! 
33 // detect faces! 
34 auto faces = std::vector<cv::Rect>();! 
35 cascade.detectMultiScale(gray_img, faces);! 
顔を検出する。 
36 ! 
37 // draw results! 
38 for( const auto& face : faces ) {! 
検出場所に円を描く。 
39 const auto center = cv::Point {! 
40 cv::saturate_cast<int>((face.x + face.width * 0.5)),! 
41 cv::saturate_cast<int>((face.y + face.height * 0.5))! 
42 };! 
43 const auto radius = cv::saturate_cast<int>((face.width + face.height) * 0.25);! 
44 cv::circle(color_img, center, radius, cv::Scalar(80, 80, 255), 3, 8, 0);! 
45 }! 
46 ! 
47 cv::namedWindow("result", CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO);! 
48 cv::imshow("result", color_img );! 
49 cv::waitKey(0);! 
表示する。 
50 } 
画像の加工
いろいろなアルゴリズム-3 
同じことをPythonで 
画像の加工
画像の保存 
9 ! 
10 #include <opencv2/highgui/highgui.hpp>! 
11 #include <opencv2/imgproc/imgproc.hpp>! 
12 ! 
13 int main(int argc, const char * argv[])! 
14 {! 
15 // load a source image! 
16 auto image = cv::imread("/Users/seiya_kumada/Pictures/lena.jpg");! 
17 cv::imwrite("/Users/seiya_kumada/Pictures/lena.png", image);! 
18 return 0;! 
19 } 
jpg, bmp, png, tifなどいろいろなフォーマットで保存できる。
将来 
従来のデバイスは、2次元の情報を取得するものが 
主流であった。動画であろうと2次元の枠を越える 
ものではない。 
! 
最近では、kinectなどを使うことにより容易に 
距離画像、すなわち3次元画像を取得することが 
できるようになった。 
! 
3次元画像処理を行うライブラリがPoint Cloud Libraryである。 
新規アルゴリズムの実装件数は、OpenCV より多くなっている。 
次回は、PCLを紹介したい。
One more thing…
OpenCV3リリース 
現在α版がリリースされている。 
今年秋にβ版、クリスマス頃に正式版がリリースされる。 
https://www.youtube.com/watch?v=_TTtN4frMEA
http://ja.wikipedia.org/wiki/%E3%83%AC%E3%83%8A_(%E7%94%BB%E5%83%8F 
%E3%83%87%E3%83%BC%E3%82%BF) 
おまけ

More Related Content

What's hot (10)

PDF
Media Art II openFrameworks 複数のシーンの管理・切替え
Atsushi Tadokoro
 
PDF
メディア・アート II 第1回: ガイダンス openFrameworks入門
Atsushi Tadokoro
 
PDF
プログラム初級講座 - メディア芸術をはじめよう
Atsushi Tadokoro
 
PDF
メディア・アートII 第2回 openFrameworks基礎 配列、くりかえし、乱数 ベクトルを使用したアニメーション
Atsushi Tadokoro
 
PDF
Media Art II 2013 第5回:openFrameworks Addonを使用する
Atsushi Tadokoro
 
PDF
Interactive Music II ProcessingとSuperColliderの連携1
Atsushi Tadokoro
 
PDF
メディア・アートII 第3回 openFrameworks基礎 OOoF : オブジェクト指向 oF
Atsushi Tadokoro
 
PDF
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Atsushi Tadokoro
 
PDF
Media Art II 2013 第4回:openFrameworks アニメーションを極める 動きを生みだす様々なアルゴリズム
Atsushi Tadokoro
 
PDF
JavaScript And Debug
uupaa
 
Media Art II openFrameworks 複数のシーンの管理・切替え
Atsushi Tadokoro
 
メディア・アート II 第1回: ガイダンス openFrameworks入門
Atsushi Tadokoro
 
プログラム初級講座 - メディア芸術をはじめよう
Atsushi Tadokoro
 
メディア・アートII 第2回 openFrameworks基礎 配列、くりかえし、乱数 ベクトルを使用したアニメーション
Atsushi Tadokoro
 
Media Art II 2013 第5回:openFrameworks Addonを使用する
Atsushi Tadokoro
 
Interactive Music II ProcessingとSuperColliderの連携1
Atsushi Tadokoro
 
メディア・アートII 第3回 openFrameworks基礎 OOoF : オブジェクト指向 oF
Atsushi Tadokoro
 
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Atsushi Tadokoro
 
Media Art II 2013 第4回:openFrameworks アニメーションを極める 動きを生みだす様々なアルゴリズム
Atsushi Tadokoro
 
JavaScript And Debug
uupaa
 

Viewers also liked (13)

PPTX
プログラマへ送る電子工作基礎の基礎
cct-inc
 
PDF
Deep learning実装の基礎と実践
Seiya Tokui
 
PDF
Chainer v2 alpha
Seiya Tokui
 
PDF
Escape From Hadoop: Spark One Liners for C* Ops
Russell Spitzer
 
PDF
Assessment of cyclic triaxial behavior of shiwalik sandstone
eSAT Publishing House
 
PDF
An efficient monitoring system for sports person using wi fi communication
eSAT Publishing House
 
PDF
Partial replacement of cement and fine aggregate by
eSAT Publishing House
 
PDF
Vis 1--invertebrates-vision
badsah13
 
PPTX
Presentacion Taller Web 2.0
monicaisabelgalarretavaldera
 
PPTX
Florida Virtual School Research
Michigan Virtual Learning Research Institute
 
PPTX
Seminario biologia molecular
saracardona1208
 
PDF
Allscripts Work
Kelli Wolf
 
PPT
2 bed apartment al arta 4 community view the greens 1156.36 sq ft
Property Listing Search
 
プログラマへ送る電子工作基礎の基礎
cct-inc
 
Deep learning実装の基礎と実践
Seiya Tokui
 
Chainer v2 alpha
Seiya Tokui
 
Escape From Hadoop: Spark One Liners for C* Ops
Russell Spitzer
 
Assessment of cyclic triaxial behavior of shiwalik sandstone
eSAT Publishing House
 
An efficient monitoring system for sports person using wi fi communication
eSAT Publishing House
 
Partial replacement of cement and fine aggregate by
eSAT Publishing House
 
Vis 1--invertebrates-vision
badsah13
 
Presentacion Taller Web 2.0
monicaisabelgalarretavaldera
 
Florida Virtual School Research
Michigan Virtual Learning Research Institute
 
Seminario biologia molecular
saracardona1208
 
Allscripts Work
Kelli Wolf
 
2 bed apartment al arta 4 community view the greens 1156.36 sq ft
Property Listing Search
 
Ad

Similar to OpenCVの入り口 (20)

PPTX
OpenCVを用いた画像処理入門
uranishi
 
PPTX
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
Norishige Fukushima
 
PPTX
2012 kanemotolablecture1
ytanno
 
PDF
Opencv object detection_takmin
Takuya Minagawa
 
PDF
Handson opencv! 画像処理ライブラリを使って面白いプログラムを作ろう!その2
Saya Katafuchi
 
PDF
OpenCVをAndroidで動かしてみた
徹 上野山
 
PDF
オープンソースで作るスマホ文字認識アプリ
陽平 山口
 
PDF
画像処理でのPythonの利用
Yasutomo Kawanishi
 
PPTX
2012 kanemotolablecture4
ytanno
 
PDF
OpenCV4Androidで画像処理アプリのススメ
Masaki Otsuki
 
PDF
PythonによるCVアルゴリズム実装
Hirokatsu Kataoka
 
PDF
【関東GPGPU勉強会#2】OpenCVのOpenCL実装oclMat
Yasuhiro Yoshimura
 
PDF
ロボット用Open Source Software
たけおか しょうぞう
 
PDF
vImageのススメ(改訂版)
Shuichi Tsutsumi
 
PDF
2017年05月27日 AITCシニア技術者勉強会 第6回「OpenCV入門」
aitc_jp
 
PPTX
OpenCVを使ってデータ起こしを自動化したい
MikiSaijo
 
PDF
AV 画像認識とその周辺 - UT Startup Gym 講演資料
ぱろすけ
 
PDF
【関東GPGPU勉強会#4】GTX 1080でComputer Vision アルゴリズムを色々動かしてみる
Yasuhiro Yoshimura
 
PPTX
2012 kanemotolablecture2
ytanno
 
PDF
ACRiウェビナー:岩渕様ご講演資料
直久 住川
 
OpenCVを用いた画像処理入門
uranishi
 
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
Norishige Fukushima
 
2012 kanemotolablecture1
ytanno
 
Opencv object detection_takmin
Takuya Minagawa
 
Handson opencv! 画像処理ライブラリを使って面白いプログラムを作ろう!その2
Saya Katafuchi
 
OpenCVをAndroidで動かしてみた
徹 上野山
 
オープンソースで作るスマホ文字認識アプリ
陽平 山口
 
画像処理でのPythonの利用
Yasutomo Kawanishi
 
2012 kanemotolablecture4
ytanno
 
OpenCV4Androidで画像処理アプリのススメ
Masaki Otsuki
 
PythonによるCVアルゴリズム実装
Hirokatsu Kataoka
 
【関東GPGPU勉強会#2】OpenCVのOpenCL実装oclMat
Yasuhiro Yoshimura
 
ロボット用Open Source Software
たけおか しょうぞう
 
vImageのススメ(改訂版)
Shuichi Tsutsumi
 
2017年05月27日 AITCシニア技術者勉強会 第6回「OpenCV入門」
aitc_jp
 
OpenCVを使ってデータ起こしを自動化したい
MikiSaijo
 
AV 画像認識とその周辺 - UT Startup Gym 講演資料
ぱろすけ
 
【関東GPGPU勉強会#4】GTX 1080でComputer Vision アルゴリズムを色々動かしてみる
Yasuhiro Yoshimura
 
2012 kanemotolablecture2
ytanno
 
ACRiウェビナー:岩渕様ご講演資料
直久 住川
 
Ad

More from cct-inc (10)

PPTX
帰宅部はじめました エクストリーム帰宅のすすめ
cct-inc
 
PPTX
勉強会 2015-02-04
cct-inc
 
PPT
勉強会 2014-12-11 (spain)
cct-inc
 
PPTX
レース観戦入門
cct-inc
 
PPTX
201411 141204212906-conversion-gate01
cct-inc
 
PPTX
141126 勉強会 xsdの活用
cct-inc
 
PPTX
Msを16倍出し抜くwpf開発2回目
cct-inc
 
PPTX
Msを16倍出し抜くwpf開発1回目
cct-inc
 
PPTX
「社会」から考える ~社会学?のすすめ~
cct-inc
 
PDF
Parser combinatorってなんなのさ
cct-inc
 
帰宅部はじめました エクストリーム帰宅のすすめ
cct-inc
 
勉強会 2015-02-04
cct-inc
 
勉強会 2014-12-11 (spain)
cct-inc
 
レース観戦入門
cct-inc
 
201411 141204212906-conversion-gate01
cct-inc
 
141126 勉強会 xsdの活用
cct-inc
 
Msを16倍出し抜くwpf開発2回目
cct-inc
 
Msを16倍出し抜くwpf開発1回目
cct-inc
 
「社会」から考える ~社会学?のすすめ~
cct-inc
 
Parser combinatorってなんなのさ
cct-inc
 

Recently uploaded (8)

PDF
PostgreSQL18新機能紹介(db tech showcase 2025 発表資料)
NTT DATA Technology & Innovation
 
PDF
20250711_日本IBM ミドルウエア・ユーザー研究会(JIMUC)総会_中村会長資料.pdf
ChikakoInami1
 
PDF
人気ブロックチェーン基盤「Hyperledger Fabric」最新版を動かしてみた!
LFDT Tokyo Meetup
 
PDF
プライバシ保護のためのインターネットアーキテクチャの進化 (2025-07-11)
Jun Kurihara
 
PDF
Hyperledger Fabric公式サンプル fabric-samples徹底解説
LFDT Tokyo Meetup
 
PDF
20250710_Devinで切り拓くDB革命_〜価値創出に集中せよ〜.pdf
Masaki Yamakawa
 
PDF
[Hardening Designers Confernece 2025]ランサムウェアでの見えざるログ・見えるログ
kataware
 
PDF
Hyperledger Fabric最新v3.x系での機能強化、変更点にキャッチアップ!
LFDT Tokyo Meetup
 
PostgreSQL18新機能紹介(db tech showcase 2025 発表資料)
NTT DATA Technology & Innovation
 
20250711_日本IBM ミドルウエア・ユーザー研究会(JIMUC)総会_中村会長資料.pdf
ChikakoInami1
 
人気ブロックチェーン基盤「Hyperledger Fabric」最新版を動かしてみた!
LFDT Tokyo Meetup
 
プライバシ保護のためのインターネットアーキテクチャの進化 (2025-07-11)
Jun Kurihara
 
Hyperledger Fabric公式サンプル fabric-samples徹底解説
LFDT Tokyo Meetup
 
20250710_Devinで切り拓くDB革命_〜価値創出に集中せよ〜.pdf
Masaki Yamakawa
 
[Hardening Designers Confernece 2025]ランサムウェアでの見えざるログ・見えるログ
kataware
 
Hyperledger Fabric最新v3.x系での機能強化、変更点にキャッチアップ!
LFDT Tokyo Meetup
 

OpenCVの入り口

  • 2. 1. OpenCVとは 2. インストール 3. 画像の読み込み 4. 画像の加工 5. 画像の保存 6. 将来
  • 3. OpenCVとは 1. 画像処理を行うライブラリである。 2. 大変多くのアルゴリズムが実装されている。 3. BSDライセンスである。 4. Python, Javaのインタフェースが用意されている。 5. 一部、法的問題が起こる可能性があるものが含まれている。 6. 現在のバージョンは2.xであり、2系以降C++インタフェースが導入された。
  • 4. インストール ここから(http://opencv.org/) Windowsならインストーラをダウンロードする。 Mac/Linuxならソースコードをダウンロードし、 cmakeを使ってビルドする。 ! わたしはいつもこれをします。 $> sudo port install opencv +python27
  • 5. 画像の読み込み 9 #include <opencv2/highgui/highgui.hpp>! 10 ! 11 int main(int argc, const char * argv[])! 12 {! 13 // load a source image! 14 const auto image = cv::imread("/Users/seiya_kumada/Pictures/lena.jpg");! 15 ! 16 // create a window named "name."! 17 const auto name = "name";! 18 cv::namedWindow(name);! 19 ! 20 // show the image! 21 cv::imshow(name, image);! 22 ! 23 // wait until pushing any key! 24 cv::waitKey();! 25 ! 26 return 0;! 27 } 1. imreadの第2引数にcv::IMREAD_GRAYSCALEを渡せばグレー画像になる。 2. jpg, bmp, png, tifなどいろいろ読み込める。 画像を読み込む。 窓を用意する。 表示する。 キー入力を待つ。
  • 6. 画像の加工 画素へのアクセス-1 8 ! 9 #include <opencv2/highgui/highgui.hpp>! 10 ! 11 int main(int argc, const char * argv[])! 12 {! 13 // load a source image! 14 auto image = cv::imread("/Users/seiya_kumada/Pictures/lena.jpg");! 15 ! 16 // method (1)! 17 for ( auto j = 0; j < image.rows; ++j ) {! 18 auto ptr = image.ptr<cv::Vec3b>(j);! cv::Vec3bのポインタに変換する。 19 for ( int i = 0; i < image.cols; ++i ) {! 20 auto& p = ptr[i];! 21 // auto b = p[0]; // blue! 22 // auto g = p[1]; // green! 23 // auto r = p[2]; // red! 24 p[0] = 255;! 25 }! 26 }! 27 ! 28 // method (2)! 29 for ( auto j = 0; j < image.rows; ++j ) {! 30 auto row = image.row(j);! 31 std::for_each(row.begin<cv::Vec3b>(), row.end<cv::Vec3b>(), [](cv::Vec3b& p){! 32 p[0] = 255;! 33 });! 34 ! 35 }! 36 ! 37 // method (3)! 38 const auto& a = image.at<cv::Vec3b>(0, 0); イテレータも使えるので、STLと親和性がある。 1つずつ取り出す。
  • 7. 画素へのアクセス-2 9 #include <opencv2/highgui/highgui.hpp>! 10 ! 11 int main(int argc, const char * argv[])! 12 {! 13 // load a source image! 14 auto image = cv::imread("/Users/seiya_kumada/Pictures/lena.jpg");! 15 ! 16 // get a region of interesting! 17 auto roi = image(cv::Rect(100, 100, 50, 50));! 指定した領域だけを取り出す。 18 ! 19 // modify only the region! 20 std::for_each(roi.begin<cv::Vec3b>(), roi.end<cv::Vec3b>(), [](cv::Vec3b& p){! 21 p[0] = 255;! 22 });! 23 画像の加工
  • 8. いろいろなアルゴリズム-1 9 #include <opencv2/highgui/highgui.hpp>! 10 #include <opencv2/imgproc/imgproc.hpp>! 11 ! 12 int main(int argc, const char * argv[])! 13 {! 14 auto capture = cv::VideoCapture{0};! 15 if( !capture.isOpened() ) {! 16 return 1;! 17 }! 18 ! 19 auto frame = cv::Mat{};! 20 auto edges = cv::Mat{};! 21 const auto name = "edges";! 22 cv::namedWindow(name);! 23 ! 24 for(;;)! 25 {! 26 capture >> frame;! 27 cv::cvtColor(frame, edges, CV_BGR2GRAY);! 28 cv::GaussianBlur(edges, edges, cv::Size(7,7), 1.5, 1.5);! 29 cv::Canny(edges, edges, 0, 30, 3);! 30 imshow(name, edges);! 31 if ( cv::waitKey(30) >= 0 )! 32 {! 33 break;! 34 }! 35 }! 36 } グレー画像に変換する。 ぼかす エッジを拾う Gaussian Mixture http://seiya-kumada.blogspot.jp/2013/03/gaussian-mixturesem.html http://seiya-kumada.blogspot.jp/2013/03/em-opencv.html ! K-means Clustering http://seiya-kumada.blogspot.jp/2013/03/k-means.html ! シーン認識 http://seiya-kumada.blogspot.jp/2012/06/blog-post.html ! グラフカットによる領域分割 http://seiya-kumada.blogspot.jp/2013/04/graphcut.html ! Mean Shft Filtering http://seiya-kumada.blogspot.jp/2013/05/mean-shift-filtering.html 画像の加工
  • 9. いろいろなアルゴリズム-2 9 #include <opencv2/core/core.hpp>! 10 #include <opencv2/imgproc/imgproc.hpp>! 11 #include <opencv2/objdetect/objdetect.hpp>! 12 #include <opencv2/highgui/highgui.hpp>! 13 ! 14 // http://book.mynavi.jp/support/pc/opencv2/c3/opencv_img.html! 15 ! 16 int main(int argc, char *argv[])! 17 {! 18 const auto imagename = "/Users/seiya_kumada/Projects/face-detection/Lenna.png";! 19 auto color_img = cv::imread(imagename);! 20 ! 画像の読み込み 21 // convert it to the gray scale! 22 auto gray_img = cv::Mat {};! 23 cv::cvtColor(color_img, gray_img, CV_BGR2GRAY);! グレー画像へ変換 24 ! 25 // normalize the brightness and increase the contrast! 26 cv::equalizeHist(gray_img, gray_img);! ヒストグラムを平滑化する。 27 ! 28 // load the classifier! 29 const auto cascade_name = "/opt/local/share/OpenCV/haarcascades/haarcascade_frontalface_default.xml";! 30 auto cascade = cv::CascadeClassifier {};! 31 cascade.load(cascade_name);! 識別器を読み込む。 32 ! 33 // detect faces! 34 auto faces = std::vector<cv::Rect>();! 35 cascade.detectMultiScale(gray_img, faces);! 顔を検出する。 36 ! 37 // draw results! 38 for( const auto& face : faces ) {! 検出場所に円を描く。 39 const auto center = cv::Point {! 40 cv::saturate_cast<int>((face.x + face.width * 0.5)),! 41 cv::saturate_cast<int>((face.y + face.height * 0.5))! 42 };! 43 const auto radius = cv::saturate_cast<int>((face.width + face.height) * 0.25);! 44 cv::circle(color_img, center, radius, cv::Scalar(80, 80, 255), 3, 8, 0);! 45 }! 46 ! 47 cv::namedWindow("result", CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO);! 48 cv::imshow("result", color_img );! 49 cv::waitKey(0);! 表示する。 50 } 画像の加工
  • 11. 画像の保存 9 ! 10 #include <opencv2/highgui/highgui.hpp>! 11 #include <opencv2/imgproc/imgproc.hpp>! 12 ! 13 int main(int argc, const char * argv[])! 14 {! 15 // load a source image! 16 auto image = cv::imread("/Users/seiya_kumada/Pictures/lena.jpg");! 17 cv::imwrite("/Users/seiya_kumada/Pictures/lena.png", image);! 18 return 0;! 19 } jpg, bmp, png, tifなどいろいろなフォーマットで保存できる。
  • 12. 将来 従来のデバイスは、2次元の情報を取得するものが 主流であった。動画であろうと2次元の枠を越える ものではない。 ! 最近では、kinectなどを使うことにより容易に 距離画像、すなわち3次元画像を取得することが できるようになった。 ! 3次元画像処理を行うライブラリがPoint Cloud Libraryである。 新規アルゴリズムの実装件数は、OpenCV より多くなっている。 次回は、PCLを紹介したい。
  • 14. OpenCV3リリース 現在α版がリリースされている。 今年秋にβ版、クリスマス頃に正式版がリリースされる。 https://www.youtube.com/watch?v=_TTtN4frMEA