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

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

What's hot (10)

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

Viewers also liked

プログラマへ送る電子工作基礎の基礎
プログラマへ送る電子工作基礎の基礎プログラマへ送る電子工作基礎の基礎
プログラマへ送る電子工作基礎の基礎cct-inc
 
Deep learning実装の基礎と実践
Deep learning実装の基礎と実践Deep learning実装の基礎と実践
Deep learning実装の基礎と実践Seiya Tokui
 
Chainer v2 alpha
Chainer v2 alphaChainer v2 alpha
Chainer v2 alphaSeiya Tokui
 
Escape From Hadoop: Spark One Liners for C* Ops
Escape From Hadoop: Spark One Liners for C* OpsEscape From Hadoop: Spark One Liners for C* Ops
Escape From Hadoop: Spark One Liners for C* OpsRussell Spitzer
 
Assessment of cyclic triaxial behavior of shiwalik sandstone
Assessment of cyclic triaxial behavior of shiwalik sandstoneAssessment of cyclic triaxial behavior of shiwalik sandstone
Assessment of cyclic triaxial behavior of shiwalik sandstoneeSAT Publishing House
 
An efficient monitoring system for sports person using wi fi communication
An efficient monitoring system for sports person using wi fi communicationAn efficient monitoring system for sports person using wi fi communication
An efficient monitoring system for sports person using wi fi communicationeSAT Publishing House
 
Partial replacement of cement and fine aggregate by
Partial replacement of cement and fine aggregate byPartial replacement of cement and fine aggregate by
Partial replacement of cement and fine aggregate byeSAT Publishing House
 
Vis 1--invertebrates-vision
Vis 1--invertebrates-visionVis 1--invertebrates-vision
Vis 1--invertebrates-visionbadsah13
 
Seminario biologia molecular
Seminario biologia molecularSeminario biologia molecular
Seminario biologia molecularsaracardona1208
 
Allscripts Work
Allscripts WorkAllscripts Work
Allscripts WorkKelli Wolf
 
2 bed apartment al arta 4 community view the greens 1156.36 sq ft
2 bed apartment al arta 4 community view the greens 1156.36 sq ft2 bed apartment al arta 4 community view the greens 1156.36 sq ft
2 bed apartment al arta 4 community view the greens 1156.36 sq ftProperty Listing Search
 

Viewers also liked (13)

プログラマへ送る電子工作基礎の基礎
プログラマへ送る電子工作基礎の基礎プログラマへ送る電子工作基礎の基礎
プログラマへ送る電子工作基礎の基礎
 
Deep learning実装の基礎と実践
Deep learning実装の基礎と実践Deep learning実装の基礎と実践
Deep learning実装の基礎と実践
 
Chainer v2 alpha
Chainer v2 alphaChainer v2 alpha
Chainer v2 alpha
 
Escape From Hadoop: Spark One Liners for C* Ops
Escape From Hadoop: Spark One Liners for C* OpsEscape From Hadoop: Spark One Liners for C* Ops
Escape From Hadoop: Spark One Liners for C* Ops
 
Assessment of cyclic triaxial behavior of shiwalik sandstone
Assessment of cyclic triaxial behavior of shiwalik sandstoneAssessment of cyclic triaxial behavior of shiwalik sandstone
Assessment of cyclic triaxial behavior of shiwalik sandstone
 
An efficient monitoring system for sports person using wi fi communication
An efficient monitoring system for sports person using wi fi communicationAn efficient monitoring system for sports person using wi fi communication
An efficient monitoring system for sports person using wi fi communication
 
Partial replacement of cement and fine aggregate by
Partial replacement of cement and fine aggregate byPartial replacement of cement and fine aggregate by
Partial replacement of cement and fine aggregate by
 
Vis 1--invertebrates-vision
Vis 1--invertebrates-visionVis 1--invertebrates-vision
Vis 1--invertebrates-vision
 
Presentacion Taller Web 2.0
Presentacion Taller Web 2.0Presentacion Taller Web 2.0
Presentacion Taller Web 2.0
 
Florida Virtual School Research
Florida Virtual School ResearchFlorida Virtual School Research
Florida Virtual School Research
 
Seminario biologia molecular
Seminario biologia molecularSeminario biologia molecular
Seminario biologia molecular
 
Allscripts Work
Allscripts WorkAllscripts Work
Allscripts Work
 
2 bed apartment al arta 4 community view the greens 1156.36 sq ft
2 bed apartment al arta 4 community view the greens 1156.36 sq ft2 bed apartment al arta 4 community view the greens 1156.36 sq ft
2 bed apartment al arta 4 community view the greens 1156.36 sq ft
 

Similar to OpenCVの入り口

OpenCVを用いた画像処理入門
OpenCVを用いた画像処理入門OpenCVを用いた画像処理入門
OpenCVを用いた画像処理入門uranishi
 
vImageのススメ(改訂版)
vImageのススメ(改訂版)vImageのススメ(改訂版)
vImageのススメ(改訂版)Shuichi Tsutsumi
 
Siv3Dで楽しむゲームとメディアアート開発
Siv3Dで楽しむゲームとメディアアート開発Siv3Dで楽しむゲームとメディアアート開発
Siv3Dで楽しむゲームとメディアアート開発Ryo Suzuki
 
情報編集(Web) HTML5 実践1 Canvas + Javascriptで図形を描く
情報編集(Web) HTML5 実践1 Canvas + Javascriptで図形を描く情報編集(Web) HTML5 実践1 Canvas + Javascriptで図形を描く
情報編集(Web) HTML5 実践1 Canvas + Javascriptで図形を描くAtsushi Tadokoro
 
2012 kanemotolablecture2
2012 kanemotolablecture22012 kanemotolablecture2
2012 kanemotolablecture2ytanno
 
アプリコンテスト
アプリコンテストアプリコンテスト
アプリコンテストTomonori Yamada
 
Zynq VIPを利用したテストベンチ
Zynq VIPを利用したテストベンチZynq VIPを利用したテストベンチ
Zynq VIPを利用したテストベンチMr. Vengineer
 
Inside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfesInside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfesTakeshi Komiya
 
【関東GPGPU勉強会#2】OpenCVのOpenCL実装oclMat
【関東GPGPU勉強会#2】OpenCVのOpenCL実装oclMat【関東GPGPU勉強会#2】OpenCVのOpenCL実装oclMat
【関東GPGPU勉強会#2】OpenCVのOpenCL実装oclMatYasuhiro Yoshimura
 
HTML5-20100626
HTML5-20100626HTML5-20100626
HTML5-20100626Taku AMANO
 
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしようYasuhiro Yoshimura
 
cocos2d-xとネイティブ間の連携
cocos2d-xとネイティブ間の連携cocos2d-xとネイティブ間の連携
cocos2d-xとネイティブ間の連携Tomoaki Shimizu
 
Azure IoT Edge で Custom Vision
Azure IoT Edge で Custom VisionAzure IoT Edge で Custom Vision
Azure IoT Edge で Custom VisionYoshitaka Seo
 
How to use animation packages in R(Japanese)
How to use animation packages in R(Japanese)How to use animation packages in R(Japanese)
How to use animation packages in R(Japanese)sleipnir002
 
Assembly Tanka on Web - Aiko Kenji
Assembly Tanka on Web - Aiko KenjiAssembly Tanka on Web - Aiko Kenji
Assembly Tanka on Web - Aiko Kenjiasmtanka
 
Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)Yuji Kubota
 
CMSI計算科学技術特論B(14) OpenACC・CUDAによるGPUコンピューティング
CMSI計算科学技術特論B(14) OpenACC・CUDAによるGPUコンピューティングCMSI計算科学技術特論B(14) OpenACC・CUDAによるGPUコンピューティング
CMSI計算科学技術特論B(14) OpenACC・CUDAによるGPUコンピューティングComputational Materials Science Initiative
 

Similar to OpenCVの入り口 (20)

OpenCVを用いた画像処理入門
OpenCVを用いた画像処理入門OpenCVを用いた画像処理入門
OpenCVを用いた画像処理入門
 
vImageのススメ(改訂版)
vImageのススメ(改訂版)vImageのススメ(改訂版)
vImageのススメ(改訂版)
 
Siv3Dで楽しむゲームとメディアアート開発
Siv3Dで楽しむゲームとメディアアート開発Siv3Dで楽しむゲームとメディアアート開発
Siv3Dで楽しむゲームとメディアアート開発
 
Canvas勉強会
Canvas勉強会Canvas勉強会
Canvas勉強会
 
VerilatorとSystemC
VerilatorとSystemCVerilatorとSystemC
VerilatorとSystemC
 
情報編集(Web) HTML5 実践1 Canvas + Javascriptで図形を描く
情報編集(Web) HTML5 実践1 Canvas + Javascriptで図形を描く情報編集(Web) HTML5 実践1 Canvas + Javascriptで図形を描く
情報編集(Web) HTML5 実践1 Canvas + Javascriptで図形を描く
 
2012 kanemotolablecture2
2012 kanemotolablecture22012 kanemotolablecture2
2012 kanemotolablecture2
 
アプリコンテスト
アプリコンテストアプリコンテスト
アプリコンテスト
 
Zynq VIPを利用したテストベンチ
Zynq VIPを利用したテストベンチZynq VIPを利用したテストベンチ
Zynq VIPを利用したテストベンチ
 
Inside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfesInside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfes
 
【関東GPGPU勉強会#2】OpenCVのOpenCL実装oclMat
【関東GPGPU勉強会#2】OpenCVのOpenCL実装oclMat【関東GPGPU勉強会#2】OpenCVのOpenCL実装oclMat
【関東GPGPU勉強会#2】OpenCVのOpenCL実装oclMat
 
HTML5-20100626
HTML5-20100626HTML5-20100626
HTML5-20100626
 
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
 
cocos2d-xとネイティブ間の連携
cocos2d-xとネイティブ間の連携cocos2d-xとネイティブ間の連携
cocos2d-xとネイティブ間の連携
 
Azure IoT Edge で Custom Vision
Azure IoT Edge で Custom VisionAzure IoT Edge で Custom Vision
Azure IoT Edge で Custom Vision
 
How to use animation packages in R(Japanese)
How to use animation packages in R(Japanese)How to use animation packages in R(Japanese)
How to use animation packages in R(Japanese)
 
Assembly Tanka on Web - Aiko Kenji
Assembly Tanka on Web - Aiko KenjiAssembly Tanka on Web - Aiko Kenji
Assembly Tanka on Web - Aiko Kenji
 
Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)
 
SocketStream入門
SocketStream入門SocketStream入門
SocketStream入門
 
CMSI計算科学技術特論B(14) OpenACC・CUDAによるGPUコンピューティング
CMSI計算科学技術特論B(14) OpenACC・CUDAによるGPUコンピューティングCMSI計算科学技術特論B(14) OpenACC・CUDAによるGPUコンピューティング
CMSI計算科学技術特論B(14) OpenACC・CUDAによるGPUコンピューティング
 

More from cct-inc

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

More from cct-inc (10)

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

Recently uploaded

Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)keikoitakurag
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルCRI Japan, Inc.
 
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...atsushi061452
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptxyassun7010
 
20240523_IoTLT_vol111_kitazaki_v1___.pdf
20240523_IoTLT_vol111_kitazaki_v1___.pdf20240523_IoTLT_vol111_kitazaki_v1___.pdf
20240523_IoTLT_vol111_kitazaki_v1___.pdfAyachika Kitazaki
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizesatsushi061452
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)NTT DATA Technology & Innovation
 
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptxssuserbefd24
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。iPride Co., Ltd.
 

Recently uploaded (10)

Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
 
20240523_IoTLT_vol111_kitazaki_v1___.pdf
20240523_IoTLT_vol111_kitazaki_v1___.pdf20240523_IoTLT_vol111_kitazaki_v1___.pdf
20240523_IoTLT_vol111_kitazaki_v1___.pdf
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
 
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
 

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を紹介したい。