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

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

ただいまの
回答率

90.47%

  • Linux

    3896questions

    Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

  • C

    3809questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

  • C++

    3585questions

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

  • OpenCV

    1149questions

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

OPENCVでカメラキャリブレーション時にエラーが出る

受付中

回答 4

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 3,354

ttmaji

score 1

前提・実現したいこと

OPENCVにてカメラキャリブレーションを行おうとしています。
下記サイトを参考にソースを作成しコンパイル、実行しました。
http://opencv.jp/sample/camera_calibration.html

実行時にcvCalibrateCamera2関数を呼び出す箇所で下記のようなエラーが出てしまします。
このエラーに対応するにはどのようにすればよいでしょうか?

ご回答の程宜しくお願い致します。

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

発生しているエラーメッセージは下記の通りです。

Assertion failed (_dst.fixedType()) in convertPointsHomogeneous, file /オープンCVインストールパス/modules/calib3d/src/fundam.cpp, line 1034
terminate called after throwing an instance of 'cv::Exception'
  what():  /オープンCVインストールパス/modules/calib3d/src/fundam.cpp:1034: error: (-215) _dst.fixedType() in function convertPointsHomogeneous

ソースコード

上記記載のサイトから変更箇所は以下のみです

include <cv.h>include <cv.hpp>


エラー発生箇所は以下です。

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

試したこと

以下2ファイルを確認したのですが、原因がわかりません。

/オープンCVインストールパス/modules/calib3d/src/fundam.cpp(エラーが発生しているファイル)
/オープンCVインストールパス/modules/calib3d/src/calibration.cpp(cvCalibrateCamera2のソースコード)

また、python にて同様のことが可能かも試してみました。
下記サイトのコードを参考に実行してみました。
http://russeng.hatenablog.jp/entry/2015/06/16/004704

実行すると,C++同様にキャリブレーションを行う関数の箇所で
エラーが発生します。
File "calibrate.py", line 42, in main
 rms,K,d,r,t = cv2.calibrateCamera(obj_points,img_points,(im.shape[1],im.shape[0]))
TypeError:Required argument 'cameramatrix' (pos 4) not found

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

***環境***
debian8.3
opencv3.1
********

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • Chironian

    2016/05/11 15:32

    「下記サイト」の記載が漏れているようですよ。また、問題が再現する最小のソースを記載頂いくと回答が付きやすいと思います。

    キャンセル

回答 4

0

メッセージを素直に読めば:
「cv::Exception例外がthrowされたにもかかわらず、terminateされた」
cv::Exception例外がthrowされちまったが最後、その後の処理をやらせちゃいかんのでしょう。
となると、直接の原因はcv::Exception例外をthrowしたヤツでfundam.cppの当該箇所は無罪。
例外が飛んでるんだろうけど、お心当たりはありませんか? 例外を握りつぶしてはいませんか?

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

0

こんにちは。

OpenCVのバージョンがサンプルとお使いのもので異なる点は気になりますが、それ以前に適切な画像を与えているかどうかが問題と思います。

チャッカー・ポードはサンプルと同等のものを撮影してますか?
下記でスペックを定義しているようです。

#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)       /* パターン1マスの1辺サイズ[mm] */

画像のスペックはサンプルと同じものを使っていますか?
cvCalibrateCamera2にサイズ(640, 480)を与えてます。このサイズでないとうまく動作しないかも知れません。ピクセルの方はcvLoadImage(buf, CV_LOAD_IMAGE_COLOR)で「強制的に3チャンネルカラー画像として読み込まれます」ということなので、たぶん大丈夫でしょう。

また、「// (3)チェスボード(キャリブレーションパターン)のコーナー検出」には成功してますか?

以上のような部分を1つ1つチェックしていけば、動作するようにできる筈です。
できればサンプルと同じバージョンのOpenCVを使えばより確実ですが、現在のバージョンでもできる可能性はあると思います。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2016/05/11 17:30

    回答ありがとうございます。
    チェッカーボードはサンプルと同様のものを使用しております。
    画像のスペックも(640,480)でサンプルと同様のスペックのものを使用しています。

    // (3)チェスボード(キャリブレーションパターン)のコーナー検出
    には成功していることを確認しています。表示された画像上での確認を行いました。

    cvCalibrateCamera2関数に与える引数(例えばobject_points)を宣言する際にCV_32FC1をCV_64FC1にするなども行ってみましたが、同様のエラーでした。

    「OpenCVのバージョンがサンプルと違う」というのは確かに気になるのですが、opencv3.0でキャリブレーションをしている例が他に見つからず、上記サイトを参考にしています。

    キャンセル

  • 2016/05/11 18:05

    なるほど。そこまで追求されているのでしたら、後はOpenCVのバージョン違いを追いかけるしかないような気がします。(もしくは、OpenCVのソース・コードを追いかけることですが、何もヒントがないと厳しいと思います。)

    https://teratail.com/questions/18512
    ↑の質問で「解読しているサンプル 」が同様にカメラ・キャリブレーションでOpenCV 2.3Xで動作しているものだったようです。つい最近まで公開されていたのですが、4月で閉鎖しているようです。

    確か上記ソースは、ttmajiさんが参考にされているソースとかなり近いものだった記憶が有ります。
    OpenCV 2.3や2.4で一度トライされてみては如何でしょうか?
    動作する方法がわかれば動作したOpeCVとOpenCV 3.0のソースを比較して、問題を見つけやすくなると思います。

    OpenCV 2.4→OpenCV 3.0へ変更する時のガイドがあるのですが、サイトがダウンしているのかアクセスできないようです。
    http://docs.opencv.org/master/db/dfa/tutorial_transition_guide.html

    キャンセル

0

同様のエラーが nuget をインストールした場合に確認できました。
nuget opencv3.1 で同じ箇所 nuget opencv2.4.11では違う箇所で発生しましたので

「nugetが怪しい」と、当たりをつけて

nugetを使わないで 以下のサイトの
「Visual Studioによる新規プロジェクト作成」を参考に
opencv2.4.11 を設定しました。
http://www.buildinsider.net/small/opencv/004

エラーが出ずに camera.xml を生成できました。

nugetは インストールが簡単で 動くサンプルも有りましたので
今までは使っていましたが こういうこともあるんですね。

勉強になりました。

このページを見つけるのに5日 原因解明に2日...
見事にハマりましたです。

c++ opencv をし始めて 2ヶ月目の超初心者です。
いい勉強になりました。

//---
...cvWaitKey(0); もなかなかでした。
止まったまんま 動かないのですね。(T_T)

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

-1

include <cv.h> → include <cv.hpp>

インクルードするファイルが違うのではないでしょうか。ヘッダー検索パスにはincludeまでを設定し、

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


#include <opencv2/opencv.hpp>


に置き換えるのが正しいと思います。
Linuxではいじったことがないのでよく判りませんが、リンクするライブラリーも対応するものに置き換える必要があるかもしれません。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

関連した質問

  • 受付中

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

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

  • 受付中

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

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

  • 解決済

    opencvのcvConvertScaleAbs関数エラーを直したい

    こんにちは。 どうしても解決できず、ずっと悩んでいるのでご助力いただけないかと思い投稿しました。 前提・実現したいこと XcodeでC++、opencvを用いて行列操作を

  • 受付中

    Opencvのサンプルコードが動かない

    http://kivantium.hateblo.jp/entry/20120822/p1 こちらにあるサイトのソースコードをコンパイルしたのですが、kinectに移りません。

  • 解決済

    opencvでの画像の読み込み

    opencvで画像の読み込みを行い、テンプレートマッチングを行いたいと考えています。 外部のソフト(IC Imaging Contorol)というアルゴ社のカメラソフトを使い

  • 解決済

    opencv 動画 再生

    #include <stdio.h> #include <cv.h> #include <highgui.h> int main(int argc, char* argv[])

  • 解決済

    OpenCVを用いた物体検出

    現在OpenCV2.1を用いた上で顔検出にチャレンジしています。 学習等については問題なく行うことができ、顔の検出を行おうと思っているのですが、検出の段階で設定するパラメータの"m

  • 解決済

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

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

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

  • Linux

    3896questions

    Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

  • C

    3809questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

  • C++

    3585questions

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

  • OpenCV

    1149questions

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