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

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

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

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

OpenCV

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

Linux

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

C++

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

Q&A

4回答

10499閲覧

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

ttmaji

総合スコア7

C

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

OpenCV

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

Linux

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

C++

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

0グッド

0クリップ

投稿2016/05/11 06:25

編集2016/05/24 06:37

###前提・実現したいこと
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
********

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

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

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

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

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

Chironian

2016/05/11 06:32

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

回答4

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)

投稿2017/01/24 07:38

TinoTina

総合スコア10

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

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

0

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

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

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

#include <opencv2/opencv.hpp>

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

投稿2016/05/11 10:35

catsforepaw

総合スコア5938

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

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

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 08:12

編集2016/05/11 08:13
Chironian

総合スコア23272

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

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

ttmaji

2016/05/11 08:30

回答ありがとうございます。 チェッカーボードはサンプルと同様のものを使用しております。 画像のスペックも(640,480)でサンプルと同様のスペックのものを使用しています。 // (3)チェスボード(キャリブレーションパターン)のコーナー検出 には成功していることを確認しています。表示された画像上での確認を行いました。 cvCalibrateCamera2関数に与える引数(例えばobject_points)を宣言する際にCV_32FC1をCV_64FC1にするなども行ってみましたが、同様のエラーでした。 「OpenCVのバージョンがサンプルと違う」というのは確かに気になるのですが、opencv3.0でキャリブレーションをしている例が他に見つからず、上記サイトを参考にしています。
Chironian

2016/05/11 09: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
guest

0

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

投稿2016/05/11 07:38

episteme

総合スコア16614

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問