Enviar búsqueda
Cargar
Media Art II 2013 第6回:openFrameworks Addonを使う 2 - ofxOpenCV と ofxCv
•
28 recomendaciones
•
24,481 vistas
Atsushi Tadokoro
Seguir
Tecnología
Empresariales
Vista de diapositivas
Denunciar
Compartir
Vista de diapositivas
Denunciar
Compartir
1 de 55
Descargar ahora
Descargar para leer sin conexión
Recomendados
Media Art II 2013 第4回:openFrameworks アニメーションを極める 動きを生みだす様々なアルゴリズム
Media Art II 2013 第4回:openFrameworks アニメーションを極める 動きを生みだす様々なアルゴリズム
Atsushi Tadokoro
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 2: 構造をつくる
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 2: 構造をつくる
Atsushi Tadokoro
Media Art II 2013 第5回:openFrameworks Addonを使用する
Media Art II 2013 第5回:openFrameworks Addonを使用する
Atsushi Tadokoro
openFrameworks 動きを生みだす様々なアルゴリズム - 多摩美メディアアートII
openFrameworks 動きを生みだす様々なアルゴリズム - 多摩美メディアアートII
Atsushi Tadokoro
メディア・アートII 第2回 openFrameworks基礎 配列、くりかえし、乱数 ベクトルを使用したアニメーション
メディア・アートII 第2回 openFrameworks基礎 配列、くりかえし、乱数 ベクトルを使用したアニメーション
Atsushi Tadokoro
openFrameworks基礎 たくさんの図形を動かす 静的配列と動的配列 - 芸大グラフィックスプログラミング演習B
openFrameworks基礎 たくさんの図形を動かす 静的配列と動的配列 - 芸大グラフィックスプログラミング演習B
Atsushi Tadokoro
Media Art II openFrameworks 複数のシーンの管理・切替え
Media Art II openFrameworks 複数のシーンの管理・切替え
Atsushi Tadokoro
Deep Dive async/await in Unity with UniTask(UniRx.Async)
Deep Dive async/await in Unity with UniTask(UniRx.Async)
Yoshifumi Kawai
Recomendados
Media Art II 2013 第4回:openFrameworks アニメーションを極める 動きを生みだす様々なアルゴリズム
Media Art II 2013 第4回:openFrameworks アニメーションを極める 動きを生みだす様々なアルゴリズム
Atsushi Tadokoro
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 2: 構造をつくる
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 2: 構造をつくる
Atsushi Tadokoro
Media Art II 2013 第5回:openFrameworks Addonを使用する
Media Art II 2013 第5回:openFrameworks Addonを使用する
Atsushi Tadokoro
openFrameworks 動きを生みだす様々なアルゴリズム - 多摩美メディアアートII
openFrameworks 動きを生みだす様々なアルゴリズム - 多摩美メディアアートII
Atsushi Tadokoro
メディア・アートII 第2回 openFrameworks基礎 配列、くりかえし、乱数 ベクトルを使用したアニメーション
メディア・アートII 第2回 openFrameworks基礎 配列、くりかえし、乱数 ベクトルを使用したアニメーション
Atsushi Tadokoro
openFrameworks基礎 たくさんの図形を動かす 静的配列と動的配列 - 芸大グラフィックスプログラミング演習B
openFrameworks基礎 たくさんの図形を動かす 静的配列と動的配列 - 芸大グラフィックスプログラミング演習B
Atsushi Tadokoro
Media Art II openFrameworks 複数のシーンの管理・切替え
Media Art II openFrameworks 複数のシーンの管理・切替え
Atsushi Tadokoro
Deep Dive async/await in Unity with UniTask(UniRx.Async)
Deep Dive async/await in Unity with UniTask(UniRx.Async)
Yoshifumi Kawai
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Atsushi Tadokoro
配管流路の多目的最適化OpenFOAM+OpenMDAO(第28回オープンCAE勉強会@関西)
配管流路の多目的最適化OpenFOAM+OpenMDAO(第28回オープンCAE勉強会@関西)
TatsuyaKatayama
AI x WebAR: MediaPipeのハンドトラッキングを使ってみよう
AI x WebAR: MediaPipeのハンドトラッキングを使ってみよう
Takashi Yoshinaga
うちではこうやっています UI構築のルールとPlaymakerを使った画面遷移
うちではこうやっています UI構築のルールとPlaymakerを使った画面遷移
まべ☆てっく運営
openFrameworks – パーティクルを動かす、静的配列と動的配列 - 多摩美メディアアートII
openFrameworks – パーティクルを動かす、静的配列と動的配列 - 多摩美メディアアートII
Atsushi Tadokoro
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
UnityTechnologiesJapan002
OpenFOAM の Function Object 機能について
OpenFOAM の Function Object 機能について
Fumiya Nozaki
FreeCAD OpenFOAM Workbenchセットアップ方法と課題
FreeCAD OpenFOAM Workbenchセットアップ方法と課題
murai1972
UniTask入門
UniTask入門
torisoup
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
UnityTechnologiesJapan002
ARマーカーを利用したHoloLens同士の位置合わせ
ARマーカーを利用したHoloLens同士の位置合わせ
Takahiro Miyaura
【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説
【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説
Unity Technologies Japan K.K.
Mixer vessel by cfmesh
Mixer vessel by cfmesh
Etsuji Nomura
A-Frameで始めるWebXRとハンドトラッキング (HoloLens2/Oculus Quest対応)
A-Frameで始めるWebXRとハンドトラッキング (HoloLens2/Oculus Quest対応)
Takashi Yoshinaga
オープンソースで始めるAR/VR開発
オープンソースで始めるAR/VR開発
Takashi Yoshinaga
「輸送方程式のソース項の実装 Ver-2.1の新機能Field sources」OpenFOAM勉強会 for beginner@関東,2012年04月21日
「輸送方程式のソース項の実装 Ver-2.1の新機能Field sources」OpenFOAM勉強会 for beginner@関東,2012年04月21日
Masashi Imano
Burstを使ってSHA-256のハッシュ計算を高速に行う話
Burstを使ってSHA-256のハッシュ計算を高速に行う話
Unity Technologies Japan K.K.
シェーダーを活用した3Dライブ演出のアップデート ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スクスタ)の開発事例~
シェーダーを活用した3Dライブ演出のアップデート ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スクスタ)の開発事例~
KLab Inc. / Tech
CFD for Rotating Machinery using OpenFOAM
CFD for Rotating Machinery using OpenFOAM
Fumiya Nozaki
OpenFOAM の境界条件をまとめよう!
OpenFOAM の境界条件をまとめよう!
Fumiya Nozaki
201205016 deformablemodelfitting
201205016 deformablemodelfitting
Takuya Minagawa
メディア・アートII 第3回 openFrameworks基礎 OOoF : オブジェクト指向 oF
メディア・アートII 第3回 openFrameworks基礎 OOoF : オブジェクト指向 oF
Atsushi Tadokoro
Más contenido relacionado
La actualidad más candente
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Atsushi Tadokoro
配管流路の多目的最適化OpenFOAM+OpenMDAO(第28回オープンCAE勉強会@関西)
配管流路の多目的最適化OpenFOAM+OpenMDAO(第28回オープンCAE勉強会@関西)
TatsuyaKatayama
AI x WebAR: MediaPipeのハンドトラッキングを使ってみよう
AI x WebAR: MediaPipeのハンドトラッキングを使ってみよう
Takashi Yoshinaga
うちではこうやっています UI構築のルールとPlaymakerを使った画面遷移
うちではこうやっています UI構築のルールとPlaymakerを使った画面遷移
まべ☆てっく運営
openFrameworks – パーティクルを動かす、静的配列と動的配列 - 多摩美メディアアートII
openFrameworks – パーティクルを動かす、静的配列と動的配列 - 多摩美メディアアートII
Atsushi Tadokoro
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
UnityTechnologiesJapan002
OpenFOAM の Function Object 機能について
OpenFOAM の Function Object 機能について
Fumiya Nozaki
FreeCAD OpenFOAM Workbenchセットアップ方法と課題
FreeCAD OpenFOAM Workbenchセットアップ方法と課題
murai1972
UniTask入門
UniTask入門
torisoup
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
UnityTechnologiesJapan002
ARマーカーを利用したHoloLens同士の位置合わせ
ARマーカーを利用したHoloLens同士の位置合わせ
Takahiro Miyaura
【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説
【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説
Unity Technologies Japan K.K.
Mixer vessel by cfmesh
Mixer vessel by cfmesh
Etsuji Nomura
A-Frameで始めるWebXRとハンドトラッキング (HoloLens2/Oculus Quest対応)
A-Frameで始めるWebXRとハンドトラッキング (HoloLens2/Oculus Quest対応)
Takashi Yoshinaga
オープンソースで始めるAR/VR開発
オープンソースで始めるAR/VR開発
Takashi Yoshinaga
「輸送方程式のソース項の実装 Ver-2.1の新機能Field sources」OpenFOAM勉強会 for beginner@関東,2012年04月21日
「輸送方程式のソース項の実装 Ver-2.1の新機能Field sources」OpenFOAM勉強会 for beginner@関東,2012年04月21日
Masashi Imano
Burstを使ってSHA-256のハッシュ計算を高速に行う話
Burstを使ってSHA-256のハッシュ計算を高速に行う話
Unity Technologies Japan K.K.
シェーダーを活用した3Dライブ演出のアップデート ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スクスタ)の開発事例~
シェーダーを活用した3Dライブ演出のアップデート ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スクスタ)の開発事例~
KLab Inc. / Tech
CFD for Rotating Machinery using OpenFOAM
CFD for Rotating Machinery using OpenFOAM
Fumiya Nozaki
OpenFOAM の境界条件をまとめよう!
OpenFOAM の境界条件をまとめよう!
Fumiya Nozaki
La actualidad más candente
(20)
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
配管流路の多目的最適化OpenFOAM+OpenMDAO(第28回オープンCAE勉強会@関西)
配管流路の多目的最適化OpenFOAM+OpenMDAO(第28回オープンCAE勉強会@関西)
AI x WebAR: MediaPipeのハンドトラッキングを使ってみよう
AI x WebAR: MediaPipeのハンドトラッキングを使ってみよう
うちではこうやっています UI構築のルールとPlaymakerを使った画面遷移
うちではこうやっています UI構築のルールとPlaymakerを使った画面遷移
openFrameworks – パーティクルを動かす、静的配列と動的配列 - 多摩美メディアアートII
openFrameworks – パーティクルを動かす、静的配列と動的配列 - 多摩美メディアアートII
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
OpenFOAM の Function Object 機能について
OpenFOAM の Function Object 機能について
FreeCAD OpenFOAM Workbenchセットアップ方法と課題
FreeCAD OpenFOAM Workbenchセットアップ方法と課題
UniTask入門
UniTask入門
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
ARマーカーを利用したHoloLens同士の位置合わせ
ARマーカーを利用したHoloLens同士の位置合わせ
【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説
【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説
Mixer vessel by cfmesh
Mixer vessel by cfmesh
A-Frameで始めるWebXRとハンドトラッキング (HoloLens2/Oculus Quest対応)
A-Frameで始めるWebXRとハンドトラッキング (HoloLens2/Oculus Quest対応)
オープンソースで始めるAR/VR開発
オープンソースで始めるAR/VR開発
「輸送方程式のソース項の実装 Ver-2.1の新機能Field sources」OpenFOAM勉強会 for beginner@関東,2012年04月21日
「輸送方程式のソース項の実装 Ver-2.1の新機能Field sources」OpenFOAM勉強会 for beginner@関東,2012年04月21日
Burstを使ってSHA-256のハッシュ計算を高速に行う話
Burstを使ってSHA-256のハッシュ計算を高速に行う話
シェーダーを活用した3Dライブ演出のアップデート ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スクスタ)の開発事例~
シェーダーを活用した3Dライブ演出のアップデート ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スクスタ)の開発事例~
CFD for Rotating Machinery using OpenFOAM
CFD for Rotating Machinery using OpenFOAM
OpenFOAM の境界条件をまとめよう!
OpenFOAM の境界条件をまとめよう!
Destacado
201205016 deformablemodelfitting
201205016 deformablemodelfitting
Takuya Minagawa
メディア・アートII 第3回 openFrameworks基礎 OOoF : オブジェクト指向 oF
メディア・アートII 第3回 openFrameworks基礎 OOoF : オブジェクト指向 oF
Atsushi Tadokoro
メディア・アート II 第1回: ガイダンス openFrameworks入門
メディア・アート II 第1回: ガイダンス openFrameworks入門
Atsushi Tadokoro
コンテンツをディレクションするということ
コンテンツをディレクションするということ
Yoshihiro Kanematsu
青年海外協力隊・フィールド調査団の最終報告書
青年海外協力隊・フィールド調査団の最終報告書
Daisuke Miyazaki
インターネット広告代理店の「制作ディレクション」というお仕事
インターネット広告代理店の「制作ディレクション」というお仕事
Koki Kaku
色で失敗しない為に 〜理論に基づく配色フロー〜
色で失敗しない為に 〜理論に基づく配色フロー〜
Yuudai Tachibana
Wo! vol.23 米Coca-Colaサイトにみるコンテンツ・マーケティング
Wo! vol.23 米Coca-Colaサイトにみるコンテンツ・マーケティング
thinkjam.Inc.
カヤックコピー部のコピー講座
カヤックコピー部のコピー講座
コピーライターはせがわ てつじ
分かりやすく、使いやすいデザインを生み出す工夫 先生:池田 拓司
分かりやすく、使いやすいデザインを生み出す工夫 先生:池田 拓司
schoowebcampus
コンテンツ作りの三原則
コンテンツ作りの三原則
INFOBAHN.inc(株式会社インフォバーン)
ノンデザイナーのための配色理論
ノンデザイナーのための配色理論
tsukasa obara
【プレゼン】見やすいプレゼン資料の作り方【初心者用】
【プレゼン】見やすいプレゼン資料の作り方【初心者用】
MOCKS | Yuta Morishige
しょぼいプレゼンをパワポのせいにするな! by @jessedee
しょぼいプレゼンをパワポのせいにするな! by @jessedee
「MakeLeaps」請求書の作成、管理、郵送
色彩センスのいらない配色講座
色彩センスのいらない配色講座
Mariko Yamaguchi
見やすいプレゼン資料の作り方 - リニューアル増量版
見やすいプレゼン資料の作り方 - リニューアル増量版
MOCKS | Yuta Morishige
Destacado
(16)
201205016 deformablemodelfitting
201205016 deformablemodelfitting
メディア・アートII 第3回 openFrameworks基礎 OOoF : オブジェクト指向 oF
メディア・アートII 第3回 openFrameworks基礎 OOoF : オブジェクト指向 oF
メディア・アート II 第1回: ガイダンス openFrameworks入門
メディア・アート II 第1回: ガイダンス openFrameworks入門
コンテンツをディレクションするということ
コンテンツをディレクションするということ
青年海外協力隊・フィールド調査団の最終報告書
青年海外協力隊・フィールド調査団の最終報告書
インターネット広告代理店の「制作ディレクション」というお仕事
インターネット広告代理店の「制作ディレクション」というお仕事
色で失敗しない為に 〜理論に基づく配色フロー〜
色で失敗しない為に 〜理論に基づく配色フロー〜
Wo! vol.23 米Coca-Colaサイトにみるコンテンツ・マーケティング
Wo! vol.23 米Coca-Colaサイトにみるコンテンツ・マーケティング
カヤックコピー部のコピー講座
カヤックコピー部のコピー講座
分かりやすく、使いやすいデザインを生み出す工夫 先生:池田 拓司
分かりやすく、使いやすいデザインを生み出す工夫 先生:池田 拓司
コンテンツ作りの三原則
コンテンツ作りの三原則
ノンデザイナーのための配色理論
ノンデザイナーのための配色理論
【プレゼン】見やすいプレゼン資料の作り方【初心者用】
【プレゼン】見やすいプレゼン資料の作り方【初心者用】
しょぼいプレゼンをパワポのせいにするな! by @jessedee
しょぼいプレゼンをパワポのせいにするな! by @jessedee
色彩センスのいらない配色講座
色彩センスのいらない配色講座
見やすいプレゼン資料の作り方 - リニューアル増量版
見やすいプレゼン資料の作り方 - リニューアル増量版
Similar a Media Art II 2013 第6回:openFrameworks Addonを使う 2 - ofxOpenCV と ofxCv
OpenCVを用いた画像処理入門
OpenCVを用いた画像処理入門
uranishi
2012 kanemotolablecture1
2012 kanemotolablecture1
ytanno
2012 kanemotolablecture2
2012 kanemotolablecture2
ytanno
OpenCVの入り口
OpenCVの入り口
cct-inc
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
irgaly
OpenCVをAndroidで動かしてみた
OpenCVをAndroidで動かしてみた
徹 上野山
Xamarin で ReactiveUI を使ってみた
Xamarin で ReactiveUI を使ってみた
Hironov OKUYAMA
BNN CAMP vol.3 インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1
BNN CAMP vol.3 インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1
Atsushi Tadokoro
RoboVM
RoboVM
Satoshi Takami
cocos2d-xとネイティブ間の連携
cocos2d-xとネイティブ間の連携
Tomoaki Shimizu
How to Make Own Framework built on OWIN
How to Make Own Framework built on OWIN
Yoshifumi Kawai
Canvas勉強会
Canvas勉強会
Tsutomu Kawamura
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
Akira Inoue
WASM(WebAssembly)入門 ペアリング演算やってみた
WASM(WebAssembly)入門 ペアリング演算やってみた
MITSUNARI Shigeo
C#のコード解析ってなんだ@20160825 CenterCLR.学生 #1
C#のコード解析ってなんだ@20160825 CenterCLR.学生 #1
MasuqaT
日本Androidの会のハンズオンセミナー資料(20130315)
日本Androidの会のハンズオンセミナー資料(20130315)
eijikushida
20130315 abc firefox_os
20130315 abc firefox_os
Tomoaki Konno
Jenkins 2.0 (日本語)
Jenkins 2.0 (日本語)
Kohsuke Kawaguchi
Cocos2d xをさらにさわってみよう!
Cocos2d xをさらにさわってみよう!
Tomoaki Shimizu
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
david9142
Similar a Media Art II 2013 第6回:openFrameworks Addonを使う 2 - ofxOpenCV と ofxCv
(20)
OpenCVを用いた画像処理入門
OpenCVを用いた画像処理入門
2012 kanemotolablecture1
2012 kanemotolablecture1
2012 kanemotolablecture2
2012 kanemotolablecture2
OpenCVの入り口
OpenCVの入り口
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
OpenCVをAndroidで動かしてみた
OpenCVをAndroidで動かしてみた
Xamarin で ReactiveUI を使ってみた
Xamarin で ReactiveUI を使ってみた
BNN CAMP vol.3 インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1
BNN CAMP vol.3 インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1
RoboVM
RoboVM
cocos2d-xとネイティブ間の連携
cocos2d-xとネイティブ間の連携
How to Make Own Framework built on OWIN
How to Make Own Framework built on OWIN
Canvas勉強会
Canvas勉強会
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
WASM(WebAssembly)入門 ペアリング演算やってみた
WASM(WebAssembly)入門 ペアリング演算やってみた
C#のコード解析ってなんだ@20160825 CenterCLR.学生 #1
C#のコード解析ってなんだ@20160825 CenterCLR.学生 #1
日本Androidの会のハンズオンセミナー資料(20130315)
日本Androidの会のハンズオンセミナー資料(20130315)
20130315 abc firefox_os
20130315 abc firefox_os
Jenkins 2.0 (日本語)
Jenkins 2.0 (日本語)
Cocos2d xをさらにさわってみよう!
Cocos2d xをさらにさわってみよう!
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Más de Atsushi Tadokoro
「クリエイティブ・ミュージック・コーディング」- オーディオ・ビジュアル作品のための、オープンソースなソフトウエア・フレームワークの現状と展望
「クリエイティブ・ミュージック・コーディング」- オーディオ・ビジュアル作品のための、オープンソースなソフトウエア・フレームワークの現状と展望
Atsushi Tadokoro
プログラム初級講座 - メディア芸術をはじめよう
プログラム初級講座 - メディア芸術をはじめよう
Atsushi Tadokoro
Interactive Music II ProcessingとSuperColliderの連携 -2
Interactive Music II ProcessingとSuperColliderの連携 -2
Atsushi Tadokoro
coma Creators session vol.2
coma Creators session vol.2
Atsushi Tadokoro
Interactive Music II ProcessingとSuperColliderの連携1
Interactive Music II ProcessingとSuperColliderの連携1
Atsushi Tadokoro
Interactive Music II Processingによるアニメーション
Interactive Music II Processingによるアニメーション
Atsushi Tadokoro
Interactive Music II Processing基本
Interactive Music II Processing基本
Atsushi Tadokoro
Interactive Music II SuperCollider応用 2 - SuperColliderとPure Dataの連携
Interactive Music II SuperCollider応用 2 - SuperColliderとPure Dataの連携
Atsushi Tadokoro
Media Art II openFrameworks アプリ間の通信とタンジブルなインターフェイス
Media Art II openFrameworks アプリ間の通信とタンジブルなインターフェイス
Atsushi Tadokoro
Interactive Music II SuperCollider応用 - SuperColliderと OSC (Open Sound Control)
Interactive Music II SuperCollider応用 - SuperColliderと OSC (Open Sound Control)
Atsushi Tadokoro
iTamabi 13 ARTSAT API 実践 5 - 衛星の軌道を描く
iTamabi 13 ARTSAT API 実践 5 - 衛星の軌道を描く
Atsushi Tadokoro
メディア芸術基礎 II 第11回:HTML5実践 表現のための様々なJavaScriptライブラリ
メディア芸術基礎 II 第11回:HTML5実践 表現のための様々なJavaScriptライブラリ
Atsushi Tadokoro
芸術情報演習デザイン(Web) 第8回: CSSフレームワークを使う
芸術情報演習デザイン(Web) 第8回: CSSフレームワークを使う
Atsushi Tadokoro
Interactive Music II SuperCollider応用 JITLib - ライブコーディング 2
Interactive Music II SuperCollider応用 JITLib - ライブコーディング 2
Atsushi Tadokoro
iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得
iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得
Atsushi Tadokoro
Tamabi media131118
Tamabi media131118
Atsushi Tadokoro
Webデザイン 第10回:HTML5実践 Three.jsで3Dプログラミング
Webデザイン 第10回:HTML5実践 Three.jsで3Dプログラミング
Atsushi Tadokoro
Interactive Music II SuperCollider応用 JITLib - ライブコーディング 1
Interactive Music II SuperCollider応用 JITLib - ライブコーディング 1
Atsushi Tadokoro
iTamabi 13 第8回:ARTSAT API 実践 2 衛星アプリを企画する
iTamabi 13 第8回:ARTSAT API 実践 2 衛星アプリを企画する
Atsushi Tadokoro
Interactive Music II SuperCollider実習 オリジナルの楽器を作ろう!
Interactive Music II SuperCollider実習 オリジナルの楽器を作ろう!
Atsushi Tadokoro
Más de Atsushi Tadokoro
(20)
「クリエイティブ・ミュージック・コーディング」- オーディオ・ビジュアル作品のための、オープンソースなソフトウエア・フレームワークの現状と展望
「クリエイティブ・ミュージック・コーディング」- オーディオ・ビジュアル作品のための、オープンソースなソフトウエア・フレームワークの現状と展望
プログラム初級講座 - メディア芸術をはじめよう
プログラム初級講座 - メディア芸術をはじめよう
Interactive Music II ProcessingとSuperColliderの連携 -2
Interactive Music II ProcessingとSuperColliderの連携 -2
coma Creators session vol.2
coma Creators session vol.2
Interactive Music II ProcessingとSuperColliderの連携1
Interactive Music II ProcessingとSuperColliderの連携1
Interactive Music II Processingによるアニメーション
Interactive Music II Processingによるアニメーション
Interactive Music II Processing基本
Interactive Music II Processing基本
Interactive Music II SuperCollider応用 2 - SuperColliderとPure Dataの連携
Interactive Music II SuperCollider応用 2 - SuperColliderとPure Dataの連携
Media Art II openFrameworks アプリ間の通信とタンジブルなインターフェイス
Media Art II openFrameworks アプリ間の通信とタンジブルなインターフェイス
Interactive Music II SuperCollider応用 - SuperColliderと OSC (Open Sound Control)
Interactive Music II SuperCollider応用 - SuperColliderと OSC (Open Sound Control)
iTamabi 13 ARTSAT API 実践 5 - 衛星の軌道を描く
iTamabi 13 ARTSAT API 実践 5 - 衛星の軌道を描く
メディア芸術基礎 II 第11回:HTML5実践 表現のための様々なJavaScriptライブラリ
メディア芸術基礎 II 第11回:HTML5実践 表現のための様々なJavaScriptライブラリ
芸術情報演習デザイン(Web) 第8回: CSSフレームワークを使う
芸術情報演習デザイン(Web) 第8回: CSSフレームワークを使う
Interactive Music II SuperCollider応用 JITLib - ライブコーディング 2
Interactive Music II SuperCollider応用 JITLib - ライブコーディング 2
iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得
iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得
Tamabi media131118
Tamabi media131118
Webデザイン 第10回:HTML5実践 Three.jsで3Dプログラミング
Webデザイン 第10回:HTML5実践 Three.jsで3Dプログラミング
Interactive Music II SuperCollider応用 JITLib - ライブコーディング 1
Interactive Music II SuperCollider応用 JITLib - ライブコーディング 1
iTamabi 13 第8回:ARTSAT API 実践 2 衛星アプリを企画する
iTamabi 13 第8回:ARTSAT API 実践 2 衛星アプリを企画する
Interactive Music II SuperCollider実習 オリジナルの楽器を作ろう!
Interactive Music II SuperCollider実習 オリジナルの楽器を作ろう!
Media Art II 2013 第6回:openFrameworks Addonを使う 2 - ofxOpenCV と ofxCv
1.
Media Art II
2013 第6回:openFrameworks Addonを使う 2 - ofxOpenCV と ofxCv 2013年10月21日 多摩美術大学 情報デザイン学科 メディア芸術コース 田所 淳
2.
OpenCVとは ofxOpenCVについて
3.
OpenCVとは - ofxOpenCVについて ‣
アドオンの使用サンプルその2 ‣ ofxOpenCv
4.
OpenCVとは - ofxOpenCVについて ‣
ofxOpenCv ‣ OpenCVをアドオンとして使用できるようにしたもの ‣ OpenCVとは? ‣ OpenCV = Open Computer Vision Library ‣ 米 Intel 社で開発された画像処理・画像認識用のC言語ライ ブラリ ‣ オープンソース、商用・非商用を問わず無料 ‣ 静止画にも動画にも対応
5.
OpenCVとは - ofxOpenCVについて ‣
openFrameworksとOpenCVを組みあわせた作品は、数多く存 在する ‣ カメラの映像によるインタラクションは、市販の機材で構築可 能で、かつメンテナンスも容易 ‣ 個人制作する作品にも転用可能
6.
OpenCVを活用した作品例 ‣ YesYesNo Night
Lights ‣ http://yesyesno.com/night-lights
7.
OpenCVを活用した作品例 ‣ Graffiti Research
Lab. L.A.S.E.R. Tag ‣ http://graffitiresearchlab.com/projects/laser-tag/
8.
OpenCVを活用した作品例 ‣ The Eye
Writer ‣ http://www.eyewriter.org/
9.
OpenCVを活用した作品例 ‣ Chris O'shea
Hand from Above ‣ http://www.chrisoshea.org/hand-from-above
10.
OpenCVを活用した作品例 ‣ Chris O'shea
Audience ‣ http://www.chrisoshea.org/audience
11.
OpenCVを活用した作品例 ‣ Golan Levin
Double-Taker (Snout) ‣ http://www.flong.com/projects/snout/
12.
OpenCVを活用した作品例 ‣ boards magazine
interactive cover: Rise and Fall ‣ http://www.boardsmag.com/community/blogs/behindthescenes/ index.php?p=834
13.
OpenCV で物体を認識する ‣ これらの作品に共通する技術 ‣
カメラで撮影された映像から、動いている物体を検出し、その 位置や輪郭を抽出する ‣ 「ロボットの眼」をプログラミングしている ‣ OpenCVを活用すると、この物体の認識が簡単に可能となる
14.
OpenCV で物体を認識する ‣ 映像から物体の形態を認識するアルゴリズム カメラから映像をキャプチャー グレースケールに変換 背景画像を登録 背景画像と現在の画像の差分を計算 差分の画像を2値化 2値化した画像を解析
(輪郭抽出、重心を算出)
15.
OpenCV で物体を認識する ‣ apps
> addonsExamples > opencvExample に物体の輪郭を抽 出するまでの、わかりやすいサンプルが掲載 ‣ まずは、この基本プログラムを読み解いていきたい
16.
ofxOpenCv 基本 ‣ testApp.h #pragma
once #include "ofMain.h" #include "ofxOpenCv.h" //#define _USE_LIVE_VIDEO カメラ入力を使用する場合は ここをコメントアウト class testApp : public ofBaseApp{ public: ! void setup(); ! void update(); ! void draw(); ! void keyPressed(int key); ! ! #ifdef _USE_LIVE_VIDEO ! ofVideoGrabber vidGrabber; カメラ入力 ! #else ! ofVideoPlayer vidPlayer; 動画ファイルを再生 ! #endif ! 入力された元映像 ! ofxCvColorImage colorImg; ! ofxCvGrayscaleImage grayImage; グレースケールに変換後 ! ofxCvGrayscaleImage grayBg; キャプチャーされた背景画像 ! ofxCvGrayscaleImage grayDiff; 背景とグレースケール画像の差分 ! ofxCvContourFinder contourFinder; 輪郭を抽出するためのオブジェクト ! ! int threshold; 画像を2値化する際の閾値(しきいち) ! bool bLearnBakground; 背景を記録した際に通知 };
17.
ofxOpenCv 基本 ‣ testApp.cpp
setup() void testApp::setup(){ ! ofSetFrameRate(60); ! ! #ifdef _USE_LIVE_VIDEO カメラ入力の場合は ! vidGrabber.setVerbose(true); カメラを初期化 ! vidGrabber.initGrabber(320,240); ! #else 動画再生の場合は ! vidPlayer.loadMovie("fingers.mov"); ! vidPlayer.play(); 動画ファイルを読込 ! #endif ! ! colorImg.allocate(320,240); 必要となる画像のための ! grayImage.allocate(320,240); ! grayBg.allocate(320,240); メモリ領域を確保 ! grayDiff.allocate(320,240); ! 背景画像を記録した状態に ! bLearnBakground = true; ! threshold = 80; 2値化の閾値を設定 }
18.
ofxOpenCv 基本 ‣ testApp.cpp
update(), 1 of 2 void testApp::update(){ ! ofBackground(100,100,100); ! 新規フレームのとりこみをリセット bool bNewFrame = false; ! ! #ifdef _USE_LIVE_VIDEO ! vidGrabber.grabFrame(); カメラ入力の場合は ! bNewFrame = vidGrabber.isFrameNew(); カメラ映像を1コマ取得 ! #else ! vidPlayer.idleMovie(); 動画再生の場合は ! bNewFrame = vidPlayer.isFrameNew(); 動画ファイルから1コマ ! #endif
19.
ofxOpenCv 基本 ‣ testApp.cpp
update(), 2 of 2 ! ! ! ! ! ! ! ! if (bNewFrame){ ! ! #ifdef _USE_LIVE_VIDEO 取得した映像をキャプチャーしcolorImgに ! colorImg.setFromPixels(vidGrabber.getPixels(), 320,240); ! #else ! colorImg.setFromPixels(vidPlayer.getPixels(), 320,240); ! #endif ! グレースケールに変換 grayImage = colorImg; ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! } } if (bLearnBakground == true){ ! grayBg = grayImage; ! bLearnBakground = false; } grayDiff.absDiff(grayBg, grayImage); grayDiff.threshold(threshold); もし背景取得モードだったら 現在のグレースケール画像を 背景画像として採用 背景画像とグレー画像の 差分を計算後、 設定した閾値で2値化 contourFinder.findContours(grayDiff, 20, (340*240)/3, 10, true); 2値化した差分画像の 輪郭線を抽出
20.
ofxOpenCv 基本 ‣ testApp.cpp
draw() void testApp::draw(){ ! ! ofSetHexColor(0xffffff); ! colorImg.draw(20,20); ! grayImage.draw(360,20); ! grayBg.draw(20,280); ! grayDiff.draw(360,280); ! ! ofFill(); ! ofSetHexColor(0x333333); ! ofRect(360,540,320,240); ! ! ofSetHexColor(0xffffff); ! contourFinder.draw(360,540); } カラー画像を描画 グレースケール画像を描画 キャプチャーした背景を描画 2値化した差分画像を描画 抽出した輪郭を表示する 背景を描画 抽出した輪郭線を描画
21.
ofxOpenCv 基本 ‣ 実行結果:動いている物体の輪郭線が抽出される
22.
OpenCVもう一つの実装 ofxCv
23.
OpenCVもう一つの実装 - ofxCv ‣
openFrameworksには、ofxOpenCvの他に、OpenCVを使用す るためのアドオンがもう一つ存在する ‣ → ofxCv ‣ ‣ ‣ ‣ ofxCv https://github.com/kylemcdonald/ofxCv Kyle McDonald氏によるアドオン openFrameworksでOpenCVをより簡単に、よりパワフルに利 用できる環境を目指している ‣ OpenCVとoFのより緊密な連携
24.
OpenCVもう一つの実装 - ofxCv ‣
ofxCvのインストール ‣ GitHubからZip形式でダウンロード ‣ addonsフォルダに格納 ココ →
25.
ofxCv 新規プロジェクトの作成 ‣ ofxCvの新規プロジェクトを作成するには、ProjectGenerator でofxOpenCVとofxCvを選択して、Generateする
26.
輪郭抽出をofxCvで実装 ‣ 先程、ofxOpenCVで実現した、映像の中の輪郭を抽出するプ ログラムを、ofxCvでも作成してみる ‣ ofxCvでは、とても短いプログラムで実現可能(エレガント!)
27.
輪郭抽出をofxCvで実装 ‣ testApp.h #pragma once #include
"ofMain.h" #include "ofxCv.h" class testApp : public ofBaseApp { public: ! void setup(); ! void update(); ! void draw(); ! ! ofVideoGrabber cam; ! ofxCv::ContourFinder contourFinder; };
28.
輪郭抽出をofxCvで実装 ‣ testApp.cpp #include "testApp.h" using
namespace ofxCv; using namespace cv; void testApp::setup() { cam.initGrabber(ofGetWidth(), ofGetHeight()); contourFinder.setMinAreaRadius(10); contourFinder.setMaxAreaRadius(200); } void testApp::update() { cam.update(); if(cam.isFrameNew()) { contourFinder.setThreshold(ofMap(mouseX, 0, ofGetWidth(), 0, 255)); contourFinder.findContours(cam); } } void testApp::draw() { ofSetColor(255); cam.draw(0, 0); contourFinder.draw(); }
29.
輪郭抽出をofxCvで実装 ‣ 完成! マウスのX座標で、閾値を調整
30.
ofxCv + ofxGui ‣
プログラムをもっと実用的(作品に利用可能)なものに ‣ 先週とりあげた、ofxGuiと組合せてみる ‣ 単純にカメラの画像の輪郭抽出ではなく、背景画像を登録し て、その差分イメージの輪郭を抽出 ‣ 背景のリセットもGUIからできるように
31.
ofxCv + ofxGui ‣
まずは、ofxOpenCV、ofxCv、ofxGuiを選択してプロジェクト を生成
32.
ofxCv + ofxGui ‣
testApp.h #pragma once #include "ofMain.h" #include "ofxCv.h" #include "ofxGui.h" class testApp : public ofBaseApp { public: void setup(); void update(); void draw(); void resetBackgroundPressed(); ofVideoGrabber cam; ofxCv::ContourFinder contourFinder; ofxCv::RunningBackground background; ofImage thresholded; ofxPanel gui; ofxFloatSlider bgThresh; // 背景差分の閾値 ofxFloatSlider contourThresh; // 輪郭抽出の閾値 ofxButton resetBackgroundButton; // 背景リセットボタン };
33.
ofxCv + ofxGui ‣
testApp.cpp #include "testApp.h" using namespace ofxCv; using namespace cv; void testApp::setup() { // CV初期設定 ! cam.initGrabber(ofGetWidth(), ofGetHeight()); contourFinder.setMinAreaRadius(10); contourFinder.setMaxAreaRadius(200); background.setLearningTime(900); background.setThresholdValue(20); // GUI resetBackgroundButton.addListener(this, &testApp::resetBackgroundPressed); gui.setup(); gui.add(bgThresh.setup("background thresh", 50, 0, 100)); gui.add(contourThresh.setup("contour finder thresh", 127, 0, 255)); gui.add(resetBackgroundButton.setup("reset background")); }
34.
ofxCv + ofxGui ‣
testApp.cpp void testApp::update() { cam.update(); if(cam.isFrameNew()) { // 背景差分画像を生成 ! ! background.setThresholdValue(bgThresh); background.update(cam, thresholded); thresholded.update(); // 背景差分画像の輪郭抽出 } } contourFinder.setThreshold(contourThresh); contourFinder.findContours(thresholded); void testApp::draw() { // 差分画像を描画 ofSetColor(255); thresholded.draw(0, 0); // 輪郭抽出結果を描画 } ofSetColor(255, 0, 0); contourFinder.draw(); // GUI gui.draw();
35.
ofxCv + ofxGui ‣
testApp.cpp void testApp::resetBackgroundPressed(){ background.reset(); }
36.
ofxCv + ofxGui ‣
完成!!
37.
オプティカル・フロー (Optical Flow)
38.
オプティカル・フロー (Optical Flow) ‣
オプティカル・フロー ‣ 映像内での物体の動きを、ベクトル場で表したもの ‣ 参考: http://opencv.jp/sample/optical_flow.html
39.
オプティカル・フロー (Optical Flow) ‣
ofxCvでは、オプティカル・フローのための2種類のクラスが 用意されている ‣ ofxCv::FlowFarneback ‣ Gunnar Farneback のアルゴリズムを用いた、密なオプティカ ルフロー ‣ ofxCv::FlowPyrLK ‣ 疎な特徴集合に対するオプティカルフロー ‣ 参考: http://opencv.jp/opencv-2svn/cpp/ motion_analysis_and_object_tracking.html
40.
オプティカル・フロー (Optical Flow) ‣
testApp.h #pragma once #include "ofMain.h" #include "ofxCv.h" #include "ofxGui.h" class testApp : public ofBaseApp { public: void setup(); void update(); void draw(); ofVideoGrabber camera; ofxCv::FlowFarneback farneback; ofxCv::FlowPyrLK pyrLk; ofxCv::Flow* curFlow; ofxPanel gui; ofxFloatSlider pyrScale; ofxIntSlider levels; ofxIntSlider winsize; ofxIntSlider iterations; ofxIntSlider polyN; ofxFloatSlider polySigma; ofxIntSlider winSize; ofxIntSlider maxLevel;
41.
オプティカル・フロー (Optical Flow) ‣
testApp.h ofxFloatSlider maxFeatures; ofxFloatSlider qualityLevel; ofxFloatSlider minDistance; ofxToggle OPTFLOW_FARNEBACK_GAUSSIAN; ofxToggle useFarneback; };
42.
オプティカル・フロー (Optical Flow) ‣
testApp.cpp #include "testApp.h" using namespace ofxCv; using namespace cv; void testApp::setup() { // CV初期設定 camera.initGrabber(320, 240); // GUI gui.setup(); gui.add(pyrScale.setup("pyrScale", .5, 0, 1)); gui.add(levels.setup("levels", 4, 1, 8)); gui.add(winsize.setup("levels", 8, 4, 64)); gui.add(iterations.setup("iterations", 2, 1, 8)); gui.add(polyN.setup("polyN", 7, 5, 10)); gui.add(polySigma.setup("polySigma", 1.5, 1.1, 2)); gui.add(OPTFLOW_FARNEBACK_GAUSSIAN.setup("OPTFLOW_FARNEBACK_GAUSSIAN", false)); gui.add(useFarneback.setup("useFarneback", true)); gui.add(winSize.setup("winSize", 32, 4, 64)); gui.add(maxLevel.setup("maxLevel", 3, 0, 8)); gui.add(levels.setup("maxFeatures", 200, 1, 1000)); gui.add(qualityLevel.setup("levels", 0.01, 0.001, .02));
43.
オプティカル・フロー (Optical Flow) ‣
testApp.cpp gui.add(minDistance.setup("minDistance", 4, 1, 16)); } curFlow = &farneback; void testApp::update() { camera.update(); if(camera.isFrameNew()) { if(useFarneback) { // Farnebackの密なオプティカルフロー curFlow = &farneback; farneback.setPyramidScale(pyrScale); farneback.setNumLevels(levels); farneback.setWindowSize(winsize); farneback.setNumIterations(iterations); farneback.setPolyN(polyN); farneback.setPolySigma(polySigma); farneback.setUseGaussian(OPTFLOW_FARNEBACK_GAUSSIAN); } else { // 画像ピラミッドを利用した、疎なオプティカルフロー } curFlow = &pyrLk; pyrLk.setMaxFeatures(maxFeatures); pyrLk.setQualityLevel(qualityLevel); pyrLk.setMinDistance(minDistance); pyrLk.setWindowSize(winSize); pyrLk.setMaxLevel(maxLevel);
44.
オプティカル・フロー (Optical Flow) ‣
testApp.cpp // オプティカルフローを計算 } } curFlow->calcOpticalFlow(camera); void testApp::draw() { ofBackground(0); ofSetColor(255); camera.draw(0,0,ofGetWidth(),ofGetHeight()); curFlow->draw(0,0,ofGetWidth(),ofGetHeight()); } gui.draw();
45.
オプティカル・フロー (Optical Flow) ‣
完成!!
46.
オプティカル・フロー + パーティクル
47.
オプティカル・フロー + パーティクル ‣
オプティカル・フローで生成したベクトル場に、パーティクル を置いてみる ‣ 映像を解析して、舞い散るパーティクルが実現できるはず!! ‣ Particleクラスは、以前作成したものをそのまま再利用
48.
オプティカル・フロー + パーティクル ‣
testApp.h #pragma once #include #include #include #include "ofMain.h" "ofxCv.h" "ofxGui.h" "Particle.h" class testApp : public ofBaseApp { public: void setup(); void update(); void draw(); // Optical Flow ofVideoGrabber camera; ofxCv::FlowFarneback flow; // GUI ofxPanel gui; ofxFloatSlider pyrScale; ofxIntSlider levels; ofxIntSlider winsize; ofxIntSlider iterations; ofxIntSlider polyN; ofxFloatSlider polySigma; ofxFloatSlider flowScale;
49.
オプティカル・フロー + パーティクル ‣
testApp.h ofxToggle drawFlow; ofxToggle fullscreen; ofxButton resetParticleButton; void resetParticlePressed(); }; // Particle vector<Particle> particles; static const int NUM = 20000;
50.
オプティカル・フロー + パーティクル ‣
testApp.cpp #include "testApp.h" using namespace ofxCv; using namespace cv; void testApp::setup() { // CV初期設定 camera.initGrabber(320, 240); ofSetFrameRate(60); ofEnableBlendMode(OF_BLENDMODE_ADD); // GUI resetParticleButton.addListener(this, &testApp::resetParticlePressed); gui.setup(); gui.add(pyrScale.setup("pyrScale", .5, 0, 1)); gui.add(levels.setup("levels", 4, 1, 8)); gui.add(winsize.setup("winsize", 8, 4, 64)); gui.add(iterations.setup("iterations", 2, 1, 8)); gui.add(polyN.setup("polyN", 7, 5, 10)); gui.add(polySigma.setup("polySigma", 1.5, 1.1, 2)); gui.add(flowScale.setup("flowScale", 0.05, 0.0, 0.2)); gui.add(drawFlow.setup("draw opticalflow", true)); gui.add(fullscreen.setup("fullscreen", false)); gui.add(resetParticleButton.setup("reset particles"));
51.
オプティカル・フロー + パーティクル ‣
testApp.cpp //パーティクルを生成 ! ! for (int i = 0; i < NUM; i++){ ! Particle myParticle; myParticle.friction = 0.01; myParticle.radius = 2; ! ! myParticle.setup(ofVec2f(ofRandom(ofGetWidth()), ofRandom(ofGetHeight())), ofVec2f(0, 0)); ! ! particles.push_back(myParticle); ! } } void testApp::update() { camera.update(); if(camera.isFrameNew()) { flow.setPyramidScale(pyrScale); flow.setNumLevels(levels); flow.setWindowSize(winsize); flow.setNumIterations(iterations); flow.setPolyN(polyN); flow.setPolySigma(polySigma); // オプティカルフローを計算 } flow.calcOpticalFlow(camera);
52.
オプティカル・フロー + パーティクル ‣
testApp.cpp // Particleのアップデート ! ! for (int i = 0; i < particles.size(); i++){ ! ! //particleの力をリセット ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! } ! } particles[i].resetForce(); //オプティカルフローから、それぞれのparticleにかかる力を算出 ofVec2f force; ofVec2f pos; pos.x = particles[i].position.x * float(camera.getWidth()) / float(ofGetWidth()); pos.y = particles[i].position.y * float(camera.getHeight()) / float(ofGetHeight()); force = flow.getFlowOffset(pos.x, pos.y) * flowScale; //Particleの状態を更新 particles[i].addForce(ofVec2f(force.x, force.y)); particles[i].updateForce(); particles[i].bounceOffWalls(); particles[i].update();
53.
オプティカル・フロー + パーティクル ‣
testApp.cpp void testApp::draw() { ofSetFullscreen(fullscreen); ofBackground(0); ofSetColor(255); camera.draw(0,0,ofGetWidth(),ofGetHeight()); if (drawFlow) { ofSetColor(255, 0, 255); flow.draw(0,0,ofGetWidth(),ofGetHeight()); } ! ! } ofSetColor(0, 127, 255); for (int i = 0; i < particles.size(); i++){ ! particles[i].draw(); } gui.draw();
54.
オプティカル・フロー + パーティクル ‣
testApp.cpp void testApp::resetParticlePressed(){ particles.clear(); for (int i = 0; i < NUM; i++){ ! ! Particle myParticle; myParticle.friction = 0.01; myParticle.radius = 2; ! ! myParticle.setup(ofVec2f(ofRandom(ofGetWidth()), ofRandom(ofGetHeight())), ofVec2f(0, 0)); ! ! particles.push_back(myParticle); ! } }
55.
オプティカル・フロー + パーティクル ‣
完成!!
Descargar ahora