teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

5

修正

2019/11/25 04:45

投稿

nggn64
nggn64

スコア9

title CHANGED
@@ -1,1 +1,1 @@
1
- カメラ画像の座標キャリブレーションをしたい
1
+ カメラ画像の座標キャリブレーション
body CHANGED
@@ -3,13 +3,10 @@
3
3
  OpenFrameworks 0.10.1を使用。
4
4
 
5
5
  ### イメージ図
6
- ![イメージ説明](4c2e0abbbe6629b80e14146683dd6594.png)
7
- (1)プロジェクター投影範囲(赤い部分)をスクリーンに投影
6
+ (1)プロジェクター投影範囲をスクリーンに投影
8
7
  (2)(1)をカメラで撮って画像処理をしてプロジェクター投影範囲の輪郭だけ取り出す
9
8
  (3)その輪郭をカメラ座標とぴったり合うように補正する。*実行ウィンドウ上で行う
10
9
 
11
- リアルタイムで画像処理をして輪郭を抽出してその輪郭の四隅を動かしたいがその方法が分からないです。
12
-
13
10
  ### 試したこと
14
11
 
15
12
  補正のためにofxBezierWarpManagerというアドオンを使ってみたがうまくいかなかった。ofxQuadWarpも使おうとしたが、エラーばかりでダメだった。

4

修正

2019/11/25 04:44

投稿

nggn64
nggn64

スコア9

title CHANGED
File without changes
body CHANGED
@@ -3,10 +3,10 @@
3
3
  OpenFrameworks 0.10.1を使用。
4
4
 
5
5
  ### イメージ図
6
- ![イメージ説明](bee41144be5f62c0ae9db52a66822c2f.png)
6
+ ![イメージ説明](4c2e0abbbe6629b80e14146683dd6594.png)
7
7
  (1)プロジェクター投影範囲(赤い部分)をスクリーンに投影
8
8
  (2)(1)をカメラで撮って画像処理をしてプロジェクター投影範囲の輪郭だけ取り出す
9
- (3)その輪郭をカメラ座標とぴったり合うように補正する
9
+ (3)その輪郭をカメラ座標とぴったり合うように補正する。*実行ウィンドウ上で行う
10
10
 
11
11
  リアルタイムで画像処理をして輪郭を抽出してその輪郭の四隅を動かしたいがその方法が分からないです。
12
12
 

3

修正

2019/11/25 03:24

投稿

nggn64
nggn64

スコア9

title CHANGED
File without changes
body CHANGED
@@ -3,10 +3,13 @@
3
3
  OpenFrameworks 0.10.1を使用。
4
4
 
5
5
  ### イメージ図
6
- ![![イメージ説明](b6bbc12c3800b5e443ffc8f2305b4a66.png)]
6
+ ![イメージ説明](bee41144be5f62c0ae9db52a66822c2f.png)
7
- ・カメラで撮ったプロジェクター投影範囲の輪郭(赤い)をスクリーンに映し出している(一つのウィンドウの中に輪郭だけが表示されている状態。背景は図と同様に白色)。
7
+ (1)プロジェクター投影範囲(赤い部分)をスクリーンに投影
8
+ (2)(1)をカメラで撮って画像処理をしてプロジェクター投影範囲の輪郭だけ取り出す
8
- れを何かアドオン使って右の図のようにカメラ画像重なるように補正する
9
+ (3)その輪郭をカメラ座標ぴったり合うように補正する
9
10
 
11
+ リアルタイムで画像処理をして輪郭を抽出してその輪郭の四隅を動かしたいがその方法が分からないです。
12
+
10
13
  ### 試したこと
11
14
 
12
15
  補正のためにofxBezierWarpManagerというアドオンを使ってみたがうまくいかなかった。ofxQuadWarpも使おうとしたが、エラーばかりでダメだった。

2

再投稿

2019/11/25 03:13

投稿

nggn64
nggn64

スコア9

title CHANGED
@@ -1,1 +1,1 @@
1
- マッピング、座標変換
1
+ カメラ画像の座標キャリブレーションをしたい
body CHANGED
@@ -1,2 +1,16 @@
1
1
  ### 前提・実現したいこと
2
- ウェブカメラで撮影し画像をofxBezierWarpManagerを使っ変形させプロジェクタ投影したい。
2
+ ウェブカメラで撮影し画像処理施し得られたプロジェクタ投影範囲の輪郭をキャリブレーションを行うことでカメラ画像と重ね合わせるということをしたい。
3
+ OpenFrameworks 0.10.1を使用。
4
+
5
+ ### イメージ図
6
+ ![![イメージ説明](b6bbc12c3800b5e443ffc8f2305b4a66.png)]
7
+ ・カメラで撮ったプロジェクター投影範囲の輪郭(赤い枠)をスクリーンに映し出している(一つのウィンドウの中に輪郭だけが表示されている状態。背景は図と同様に白色)。
8
+ ・それを何かのアドオンを使って右の図のようにカメラ画像と重なるように補正する。
9
+
10
+ ### 試したこと
11
+
12
+ 補正のためにofxBezierWarpManagerというアドオンを使ってみたがうまくいかなかった。ofxQuadWarpも使おうとしたが、エラーばかりでダメだった。
13
+
14
+ ### 補足情報(FW/ツールのバージョンなど)
15
+
16
+ OpenFrameworks 0.10.1を使用。

1

修正

2019/11/25 02:04

投稿

nggn64
nggn64

スコア9

title CHANGED
@@ -1,1 +1,1 @@
1
- ofxBezierWarpManagerのビデオ画像の出力方法について(マッピング、座標変換)
1
+ マッピング、座標変換
body CHANGED
@@ -1,182 +1,2 @@
1
1
  ### 前提・実現したいこと
2
- ウェブカメラで撮影した画像をofxBezierWarpManagerを使って変形させプロジェクタに投影したい。
2
+ ウェブカメラで撮影した画像をofxBezierWarpManagerを使って変形させプロジェクタに投影したい。
3
- [このような感じで](http://mizutanikirin.net/openframeworks-ofxbezierwarpmanager-test)動かしたい。
4
-
5
- ### 発生している問題・エラーメッセージ
6
- 以下のようにリアルタイムでウェブカメラの画像を撮ると格子の隙間からしか画像が見えない。
7
- (マウスが映っているのが辛うじて分かる)
8
- ![イメージ説明](a1c59338aeaa3e8a408be1f9db469dcc.png)
9
-
10
-
11
- ### 参考にしたソースコード
12
- [参考にしたソースコード](https://github.com/TsubokuLab/ofxBezierWarpManager)
13
-
14
- main.cpp
15
- ```C++
16
- #include "ofMain.h"
17
- #include "ofApp.h"
18
-
19
- //========================================================================
20
- int main( ){
21
- ofSetupOpenGL(1920, 1080, OF_WINDOW); // <-------- setup the GL context
22
-
23
- // this kicks off the running of my app
24
- // can be OF_WINDOW or OF_FULLSCREEN
25
- // pass in width and height too:
26
- ofRunApp(new ofApp());
27
-
28
- }
29
- ```
30
- ofApp.cpp
31
- ```C++
32
- #include "ofApp.h"
33
-
34
- //--------------------------------------------------------------
35
- void ofApp::setup() {
36
- // source movie
37
- _mov.initGrabber(640, 360);
38
-
39
- first_fbo.allocate(1920, 1080);
40
- second_fbo.allocate(1920, 1080);
41
- third_fbo.allocate(1920, 1080);
42
- fourth_fbo.allocate(1920, 1080);
43
-
44
- bezManager.setup(10); //WarpResolution
45
- bezManager.addFbo(&first_fbo);
46
- bezManager.addFbo(&second_fbo);
47
- bezManager.addFbo(&third_fbo);
48
- bezManager.addFbo(&fourth_fbo);
49
-
50
- bezManager.loadSettings();
51
- }
52
-
53
- //--------------------------------------------------------------
54
- void ofApp::update() {
55
- // movie update
56
- _mov.update();
57
- }
58
-
59
- //--------------------------------------------------------------
60
- void ofApp::draw() {
61
- ofClear(0);
62
-
63
- // update fbo //////////////////////
64
- first_fbo.begin();
65
- _mov.draw(0, 0, 1920, 1080);
66
- first_fbo.end();
67
-
68
- second_fbo.begin();
69
- _mov.draw(0, 0, 1920, 1080);
70
- second_fbo.end();
71
-
72
- third_fbo.begin();
73
- _mov.draw(0, 0, 1920, 1080);
74
- third_fbo.end();
75
-
76
- fourth_fbo.begin();
77
- _mov.draw(0, 0, 1920, 1080);
78
- fourth_fbo.end();
79
- /////////////////////////////////////
80
-
81
- // draw bezier
82
- bezManager.draw();
83
-
84
- string _help = "[ENTER] key : Toggle guide visible.\n";
85
- _help += "[S] key : Save settings.\n";
86
- _help += "[L] key : Load settings.\n";
87
- _help += "Left drag the control point : Move Corners/Anchors.\n";
88
- _help += "Right click the control point : Toggle bezier/homoglaphy mode.\n";
89
- _help += "Arrow key : Move Corners/Anchors. (selected control point)\n";
90
- ofDrawBitmapString(_help, 10, 20);
91
- }
92
-
93
- //--------------------------------------------------------------
94
- void ofApp::keyPressed(int key) {
95
- // send key event
96
- bezManager.keyPressed(key);
97
-
98
- // show / hide guide
99
- if (key == OF_KEY_RETURN) {
100
- bezManager.toggleGuideVisible();
101
- }
102
- // save settings
103
- if (key == 's') {
104
- bezManager.saveSettings();
105
- }
106
- // load settings
107
- if (key == 'l') {
108
- bezManager.loadSettings();
109
- }
110
- }
111
-
112
- //--------------------------------------------------------------
113
- void ofApp::keyReleased(int key) {
114
-
115
- }
116
-
117
- //--------------------------------------------------------------
118
- void ofApp::mouseMoved(int x, int y) {
119
-
120
- }
121
-
122
- //--------------------------------------------------------------
123
- void ofApp::mouseDragged(int x, int y, int button) {
124
- // send drag event
125
- bezManager.mouseDragged(x, y, button);
126
- }
127
-
128
- //--------------------------------------------------------------
129
- void ofApp::mousePressed(int x, int y, int button) {
130
- // send press event
131
- bezManager.mousePressed(x, y, button);
132
- }
133
-
134
- ```
135
-
136
- ofApp.h
137
- ```C++
138
- #pragma once
139
-
140
- #include "ofMain.h"
141
-
142
- #include "ofxBezierWarpManager.h"
143
-
144
- class ofApp : public ofBaseApp{
145
-
146
- public:
147
- void setup();
148
- void update();
149
- void draw();
150
-
151
- void keyPressed(int key);
152
- void keyReleased(int key);
153
- void mouseMoved(int x, int y);
154
- void mouseDragged(int x, int y, int button);
155
- void mousePressed(int x, int y, int button);
156
- void mouseReleased(int x, int y, int button);
157
- void windowResized(int w, int h);
158
- void dragEvent(ofDragInfo dragInfo);
159
- void gotMessage(ofMessage msg);
160
-
161
- ofxBezierWarpManager bezManager;
162
-
163
- // 描画したいFBO
164
- ofFbo first_fbo;
165
- ofFbo second_fbo;
166
- ofFbo third_fbo;
167
- ofFbo fourth_fbo;
168
-
169
- bool showGuide;
170
-
171
- // 描画する映像の代わり
172
- ofVideoGrabber _mov;
173
- };
174
- ```
175
-
176
- ### 試したこと
177
- ofApp.hのofVideoGrabber _mov;ははもともとカメラから入力した映像を入れたかったのでofVideoGrabber vidGrabber;を用意してそれを使っていました。
178
-
179
- ### 補足情報(FW/ツールのバージョンなど)
180
- visual studio 2017使用
181
- openframeworks0.10.1使用 アドオンはofxXmlSettingsとofxBezierWarpManagerを使用
182
- ofBox2DやofxOpencvなども使っています