外部参照のエラー

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
抹茶
記事: 15
登録日時: 8年前

外部参照のエラー

#1

投稿記事 by 抹茶 » 8年前

opencv2.4.11でSVMを使ったプログラムを作ろうとしていて、サイトにあったものをコピーしたのですが外部参照のエラーばかりでうまく使えませんでした。
どの部分を修正すればよいかわかりますか?
最終的にはエクセルのデータを使って分類したいと思っています。

コード:

#include <C:\opencv2411\build\include\opencv/cv.h>
#include <C:\opencv2411\build\include\opencv/highgui.h>
#include <C:\opencv2411\build\include\opencv/ml.h>
#include <time.h>
#include <stdio.h>


int main (int argc, char **argv)
{
  const int s = 1000;
  int size = 400;
  int i, j, sv_num;
  IplImage *img;
  CvSVM svm;
  CvSVMParams param;
  CvTermCriteria criteria;
  CvRNG rng = cvRNG (time (NULL));
  CvPoint pts[s];
  float data[s * 2];
  int res[s];
  CvMat data_mat, res_mat;
  CvScalar rcolor;
  const float *support;

  // (1)画像領域の確保と初期化
  img = cvCreateImage (cvSize (size, size), IPL_DEPTH_8U, 3);
  cvZero (img);

  // (2)学習データの生成
  for (i = 0; i < s; i++) {
     pts[i].x = cvRandInt (&rng) % size;
     pts[i].y = cvRandInt (&rng) % size;
     if (pts[i].y > 50 * cos (pts[i].x * CV_PI / 100) + 200) {
       cvLine (img, cvPoint (pts[i].x - 2, pts[i].y - 2), cvPoint (pts[i].x + 2, pts[i].y + 2), CV_RGB (255, 0, 0));
       cvLine (img, cvPoint (pts[i].x + 2, pts[i].y - 2), cvPoint (pts[i].x - 2, pts[i].y + 2), CV_RGB (255, 0, 0));
       res[i] = 1;
     }
     else {
       if (pts[i].x > 200) {
         cvLine (img, cvPoint (pts[i].x - 2, pts[i].y - 2), cvPoint (pts[i].x + 2, pts[i].y + 2), CV_RGB (0, 255, 0));
         cvLine (img, cvPoint (pts[i].x + 2, pts[i].y - 2), cvPoint (pts[i].x - 2, pts[i].y + 2), CV_RGB (0, 255, 0));
         res[i] = 2;
       }
       else {
         cvLine (img, cvPoint (pts[i].x - 2, pts[i].y - 2), cvPoint (pts[i].x + 2, pts[i].y + 2), CV_RGB (0, 0, 255));
         cvLine (img, cvPoint (pts[i].x + 2, pts[i].y - 2), cvPoint (pts[i].x - 2, pts[i].y + 2), CV_RGB (0, 0, 255));
         res[i] = 3;
       }
     }
   }

  // (3)学習データの表示
  cvNamedWindow ("SVM", CV_WINDOW_AUTOSIZE);
  cvShowImage ("SVM", img);
  cvWaitKey (0);

  // (4)学習パラメータの生成
  for (i = 0; i < s; i++) {
     data[i * 2] = float (pts[i].x) / size;
     data[i * 2 + 1] = float (pts[i].y) / size;
  }
  cvInitMatHeader (&data_mat, s, 2, CV_32FC1, data);
  cvInitMatHeader (&res_mat, s, 1, CV_32SC1, res);
  criteria = cvTermCriteria (CV_TERMCRIT_EPS, 1000, FLT_EPSILON);
  param = CvSVMParams (CvSVM::C_SVC, CvSVM::RBF, 10.0, 8.0, 1.0, 10.0, 0.5, 0.1, NULL, criteria);

  // (5)SVMの学習
  svm.train (&data_mat, &res_mat, NULL, NULL, param);

  // (6)学習結果の描画
  for (i = 0; i < size; i++) {
    for (j = 0; j < size; j++) {
      CvMat m;
      float ret = 0.0;
      float a[] = { float (j) / size, float (i) / size };
      cvInitMatHeader (&m, 1, 2, CV_32FC1, a);
      ret = svm.predict (&m);
      switch ((int) ret) {
      case 1:
        rcolor = CV_RGB (100, 0, 0);
        break;
      case 2:
        rcolor = CV_RGB (0, 100, 0);
        break;
      case 3:
        rcolor = CV_RGB (0, 0, 100);
        break;
      }
      cvSet2D (img, i, j, rcolor);
    }
  }

  // (7)トレーニングデータの再描画
  for (i = 0; i < s; i++) {
    CvScalar rcolor;
    switch (res[i]) {
    case 1:
      rcolor = CV_RGB (255, 0, 0);
      break;
    case 2:
      rcolor = CV_RGB (0, 255, 0);
      break;
    case 3:
      rcolor = CV_RGB (0, 0, 255);
      break;
    }
    cvLine (img, cvPoint (pts[i].x - 2, pts[i].y - 2), cvPoint (pts[i].x + 2, pts[i].y + 2), rcolor);
    cvLine (img, cvPoint (pts[i].x + 2, pts[i].y - 2), cvPoint (pts[i].x - 2, pts[i].y + 2), rcolor);
  }

  // (8)サポートベクターの描画
  sv_num = svm.get_support_vector_count ();
  for (i = 0; i < sv_num; i++) {
    support = svm.get_support_vector (i);
    cvCircle (img, cvPoint ((int) (support[0] * size), (int) (support[1] * size)), 5, CV_RGB (200, 200, 200));
  }

  // (9)画像の表示
  cvNamedWindow ("SVM", CV_WINDOW_AUTOSIZE);
  cvShowImage ("SVM", img);
  cvWaitKey (0);

  cvDestroyWindow ("SVM");
  cvReleaseImage (&img);

  return 0;
}



アバター
amehirune
記事: 181
登録日時: 10年前
住所: どっか
連絡を取る:

Re: 外部参照のエラー

#2

投稿記事 by amehirune » 8年前

抹茶 さんが書きました:

コード:

#include <C:\opencv2411\build\include\opencv/cv.h>
#include <C:\opencv2411\build\include\opencv/highgui.h>
#include <C:\opencv2411\build\include\opencv/ml.h>
えーっと…(汗)
ディレクトリの指定方法って、こんなんだったかな?
と、思いました。
ほら、来いよ!! 誤字や矛盾を指摘したい奴から、前に出てこいよぉおおおおおおおッ!!!
※都合により、不定期でしか現れません。即返などはできませんのでご了承ください※

閉鎖

“C言語何でも質問掲示板” へ戻る