質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

0回答

1999閲覧

CvdroneとArtoolkitのパターンファイルの認識について

gnuplot

総合スコア8

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2016/06/14 06:38

###前提・実現したいこと
ArtoolkitをCVdroneとARtoolkitを使用してパターンイメージファイルを認識させようと思っています

###発生している問題・エラーメッセージ

パターンファイルの認識ができないです パターンを印刷したものをカメラの前にもっていってもmarker_numの値が変わりません プログラムに問題はあるでしょうか ない場合はたぶん環境が整ってないのだと思うのですが。

###該当のソースコード

C++

1#include <AR/ar.h> 2#include <AR/gsub.h> 3#include <AR/param.h> 4#include <AR/video.h> 5#include <AR/config.h> 6#include "ardrone/ardrone.h" 7// -------------------------------------------------------------------------- 8// main(引数の数、引数リスト) 9// メイン関数です 10// 戻り値 正常終了:0 エラー:-1 11// -------------------------------------------------------------------------- 12int main(int argc, char **argv) 13{ 14 15 16 17 // ARDrone 18 ARDrone ardrone("192.168.1.1"); 19 20 //文字列表示のためフォントの初期化 21 int font_face = CV_FONT_HERSHEY_SIMPLEX; 22 CvFont font; 23 cvInitFont(&font, font_face, 0.5, 1.0); 24 //画面の情報表示のための変数宣言 25 double pitch; 26 double roll; 27 double way; 28 double velocity; 29 double battery; 30 double altitude; 31 char str[100] = { 0 }; 32 ARUint8 *dataPtr; 33 IplImage *image; 34 ARMarkerInfo *marker_info; // 検出されたマーカの情報 35 int marker_num; // 検出されたマーカの数 36 int j, k; 37 int xsize; // ウィンドウサイズ 38 int ysize; // ウィンドウサイズ 39 int patt_id = -1; 40 char* patt_name = "C:\patt.hiro"; 41 int thresh = 100; 42 43 44 if ((patt_id = arLoadPatt(patt_name)) < 0) { // パターンファイルをロードする 45 printf("pattern load error !!\n"); 46 std::cout << "pattern load error !!" << std::endl; 47 return(0); 48 } 49 50 51 // メインループ 52 while (1) { 53 54 55 56 // 更新 57 if (!ardrone.update()) break; 58 int key = cvWaitKey(1); 59 60 // 画像の取得 61 image = ardrone.getImage(); 62 dataPtr = reinterpret_cast<ARUint8*>(image->imageData); 63 if (arDetectMarker(dataPtr, thresh, &marker_info, &marker_num) < 0){ 64 std::cout << "みつかりません !!" << std::endl; 65 return 0; 66 } 67 //arImage 68 printf("%d\n", marker_num); // 一致するマーカが見つからなかったら 69 70 k = -1; 71 for (j = 0; j < marker_num; j++) { 72 if (patt_id == marker_info[j].id) { 73 if (k == -1) k = j; 74 else if (marker_info[k].cf < marker_info[j].cf) k = j; 75 } 76 } 77 if (k == -1) { 78 79 } 80 //現在の値の取得 81 pitch = ardrone.getPitch(); 82 roll = ardrone.getRoll(); 83 way = ardrone.getYaw(); 84 velocity = ardrone.getVelocity(); 85 battery = ardrone.getBatteryPercentage(); 86 altitude = ardrone.getAltitude(); 87 //文字列化と表示 88 sprintf(str, "Roll Axis %f", roll); 89 cvPutText(image, str, cvPoint(30, 90), &font, cvScalar(255, 0, 0, 255)); 90 sprintf(str, "Pitch Axis %f", pitch); 91 cvPutText(image, str, cvPoint(30, 110), &font, cvScalar(255, 0, 0, 255)); 92 sprintf(str, "Yaw Axis %f", way); 93 cvPutText(image, str, cvPoint(30, 130), &font, cvScalar(255, 0, 0, 255)); 94 sprintf(str, "Velocity%f", velocity); 95 cvPutText(image, str, cvPoint(30, 150), &font, cvScalar(255, 0, 0, 255)); 96 sprintf(str, "Battery %f", battery); 97 cvPutText(image, str, cvPoint(30, 170), &font, cvScalar(255, 0, 0, 255)); 98 sprintf(str, "Altitude %f", altitude); 99 cvPutText(image, str, cvPoint(30, 190), &font, cvScalar(255, 0, 0, 255)); 100 101 102 cvShowImage("camera", image); 103 // Escで終了 104 if (key == 0x1b) break; 105 static int mode = 0; 106 if (key == 'c') ardrone.setCamera(++mode % 2); 107 else if (key == 's') cvSaveImage("test.jpg", image); 108 } 109 110 return 0; 111} 112

###試したこと
カメラの前に出す画像を変えたり、パターンファイルを変えたりしました

###補足情報(言語/FW/ツール等のバージョンなど)
VS2013

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問