前提・実現したいこと
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ページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
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を使えばより確実ですが、現在のバージョンでもできる可能性はあると思います。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
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で質問しよう!
- ただいまの回答率 88.36%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
Chironian
2016/05/11 15:32
「下記サイト」の記載が漏れているようですよ。また、問題が再現する最小のソースを記載頂いくと回答が付きやすいと思います。