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

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

ただいまの
回答率

90.52%

  • C++

    3440questions

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

  • OpenCV

    1070questions

    OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

キャリブレーション

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 395

toyadai056

score 26

キャリブレーションしようとして下のコードをビルドすると
//エラーの箇所で
warning C4244: '=' : 'double' から 'float' への変換です。データが失われる可能性があります。
と出ます。また、
: error LNK2019: 未解決の外部シンボル _cvFindExtrinsicCameraParams2 が関数 _main で参照されました。
: error LNK2019: 未解決の外部シンボル _cvCalibrateCamera2 が関数 _main で参照されました。
: error LNK2019: 未解決の外部シンボル _cvDrawChessboardCorners が関数 _main で参照されました。
: error LNK2019: 未解決の外部シンボル _cvFindChessboardCorners が関数 _main で参照されました。
と表示されます。
どうしたらエラーを消せますか。

include"OpenCV.h"

include <stdio.h>

//#include<cv.h>
//#include<highgui.h>

define IMAGE_NUM (25)

define PAT_ROW (7) 

define PAT_COL (10)

define PAT_SIZE (PAT_ROW*PAT_COL)

define ALL_POINTS (IMAGE_NUM*PAT_SIZE)

define CHESS_SIZE (24.0)

int main(int argc, char *argv[]){
int i,j,k;
int corner_count,found;
int p_count[IMAGE_NUM];
IplImage *src_img[IMAGE_NUM];
CvSize pattern_size=cvSize(PAT_COL,PAT_ROW);
CvPoint3D32f objects[ALL_POINTS];
CvPoint2D32f *corners=(CvPoint2D32f*)cvAlloc(sizeof(CvPoint2D32f)*ALL_POINTS);
CvMat object_points;
CvMat image_points;
CvMat point_counts;
CvMat *intrinsic=cvCreateMat(3,3,CV_32FC1);
CvMat *rotation=cvCreateMat(1,3,CV_32FC1);
CvMat *translation=cvCreateMat(1,3,CV_32FC1);
CvMat *distortion=cvCreateMat(1,4,CV_32FC1);

for(i=0;i<IMAGE_NUM;i++){
char buf[32];
sprintf(buf,"calib_img/%02d.png",i);
if((src_img[i]=cvLoadImage(buf,CV_LOAD_IMAGE_COLOR))==NULL){
fprintf(stderr,"cannot load image file :%s\n",buf);
}
}

for(i=0;i<IMAGE_NUM;i++){
for(j = 0; j < PAT_ROW; j++) {
for(k = 0; k < PAT_COL; k++) {
objects[i * PAT_SIZE + j * PAT_COL + k].x =(float) j * CHESS_SIZE;//エラー
objects[i * PAT_SIZE + j * PAT_COL + k].y =(float) k * CHESS_SIZE;//エラー
objects[i * PAT_SIZE + j * PAT_COL + k].z = 0.0;
}
}
}
cvInitMatHeader (&object_points, ALL_POINTS, 3, CV_32FC1, objects);

int found_num=0;
cvNamedWindow("Calibration",CV_WINDOW_AUTOSIZE);
for(i = 0; i < IMAGE_NUM; i++) {
found= cvFindChessboardCorners (src_img[i], pattern_size, &corners[i * PAT_SIZE], &corner_count);
fprintf(stderr, "%02d...", i);
if(found){
fprintf(stderr, "ok\n");
found_num++;
}
else{
fprintf(stderr, "fail\n");
}

IplImage *src_gray = cvCreateImage (cvGetSize (src_img[i]), IPL_DEPTH_8U, 1);
cvCvtColor( src_img[i], src_gray, CV_BGR2GRAY);
cvFindCornerSubPix(src_gray, &corners[i * PAT_SIZE], corner_count,cvSize (3, 3), cvSize (-1, -1), cvTermCriteria (CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, 20, 0.03));
cvDrawChessboardCorners(src_img[i], pattern_size, &corners[i * PAT_SIZE], corner_count, found);
p_count[i]=corner_count;
cvShowImage("Calibration", src_img[i]);
cvWaitKey(0);
}
cvDestroyWindow("Calibration");

if(found_num !=IMAGE_NUM){
return -1;
}
cvInitMatHeader(&image_points, ALL_POINTS, 1, CV_32FC2, corners);
cvInitMatHeader(&point_counts, IMAGE_NUM, 1, CV_32SC1, p_count);

cvCalibrateCamera2(&object_points, &image_points, &point_counts, cvSize (640, 480), intrinsic, distortion);

CvMat sub_image_points, sub_object_points;
int base=0;
cvGetRows(&image_points, &sub_image_points, base * PAT_SIZE, (base + 1) * PAT_SIZE);
cvGetRows(&object_points, &sub_object_points, base * PAT_SIZE, (base + 1) * PAT_SIZE);
cvFindExtrinsicCameraParams2(&sub_object_points, &sub_image_points, intrinsic, distortion, rotation, translation);

CvFileStorage *fs;
fs = cvOpenFileStorage ("camera.xml", 0, CV_STORAGE_WRITE);
cvWrite(fs, "intrinsic", intrinsic);
cvWrite(fs, "rotation", rotation);
cvWrite(fs, "translation", translation);(&fs);

for(i=0;i<IMAGE_NUM;i++){
cvReleaseImage(&src_img[i]);
}
return 0;
}

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

回答 1

checkベストアンサー

0

なかなか回答が付かないようですので、OpenCVを使ったことがないですが気づいた点を指摘します。

どうしたらエラーを消せますか。

エラーメッセージからは使用している関数の実体が見つからないということが判ります。外部のライブラリが上手くリンクできていないようです。libファイルが提供されている場合、プロジェクトの設定で読み込む設定が追加してあるか、指定したパスが間違っていないか確認してみてください。
dllファイルのみの場合、Win32 APIのLoadLibrary等で必要なDLLを読み込んでいるか確認してみてください。

推測で恐縮ですが、こういったライブラリの場合、ヘッダファイルなどでLoadLibraryの処理を記述してあって、ヘッダをインクルードするだけで使用できるようになっていることが多いと思いますが、コメントアウトされている

//#include<cv.h> 
//#include<highgui.h>


が気になります。これらのヘッダでライブラリ読み込みの処理をやっていないか中身を確認してみてはいかがでしょうか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 受付中

    canvasで描画したデータをtoDataURL()メソッドで<img>のsrc属性に指定後、画像の...

    canvasで描画したデータをtoDataURL()メソッドを使って、<img>のsrc属性に指定しています。 Andoroidの標準ブラウザで、その<img>を長押しして画像の

  • 解決済

    gccによる文字コード変換

    今回、C言語でファイルを読み込みそのファイルの文字コードをShift-JISに変換するプログラムを作成したのですが,変換後の文字が以下のソースコードを使用すると表示されません.どこ

  • 解決済

    エクセルのセルに入っている数字とその座標を出力するマクロ(VBA)

    シート上の指定したセルのアドレスを(1,A)→(1,1),(1,B)→(1,2)...というふうに (列番号,行番号) の形にし、さらにセルに入っている数字をその後に付け足して(列

  • 受付中

    OpenCVで動画の読み込みがうまくできません。

    以前別のプログラムで動画の読み込みができましたが、今現在取り組んでいるプログラムではうまくいきません。 言語はC++でopencv2.4.9を使用しています。 Os windo

  • 受付中

    OpenCVで動画の読み込みがうまくできません。

    以前別のプログラムで動画の読み込みができましたが、今現在取り組んでいるプログラムではうまくいきません。   言語はC++を使用しています。  ・ソースコード  ヘッダファ

  • 解決済

    C言語について

    C言語についての質問があります。 C言語で scanf()がありますが、 char buf[32]; scanf("%s", buf); 通常は上記のように作ると思

  • 解決済

    OpenCVを使った笑顔検出での問題

    前提・実現したいこと OpenCVで元からあるサンプルコード「smiledetect.cpp」を用いて笑顔検出のシステムを作っています。 検出機能を実装中に以下の問題が発生しました

  • 受付中

    c言語のif文について

    c言語のif文の条件について 最近c言語の勉強をし始めたものです 以下のようなif文の条件の書き方を教えてください。 キーボード入力(key)から 自然数を入力→ ● a を入

同じタグがついた質問を見る

  • C++

    3440questions

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

  • OpenCV

    1070questions

    OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。