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

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

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

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

C++

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

Q&A

0回答

1175閲覧

OpenCV C++: calibratecamera()内でハンドルされていない例外が起こる

roritamago

総合スコア5

OpenCV

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

C++

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

0グッド

0クリップ

投稿2020/12/11 10:01

前提・実現したいこと

opencv4.4.0を用いてc++カメラの歪み補正を行いたいです.
参考にしているページはhttps://qiita.com/kazz4423/items/f173f298704bd121043dです.
またオライリー社のOpenCv3の本も参考にしています.

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

calibratecamera関数に差し掛かった時点でハンドルされていない例外のエラーが出てしまいます.

ハンドルされない例外が 0x00007FFAC6A73E49 で発生しました (OpenCV_environment.exe 内): Microsoft C++ の例外: cv::Exception (メモリの場所 0x00000032FC177420)。

該当のソースコード

C++

1#include <sstream> 2#include <iomanip> 3#include <iostream> 4#include <opencv2/opencv.hpp> 5#include <stdio.h> 6#include <opencv2/core/types.hpp> 7#include <opencv2/flann/flann.hpp> 8#include <opencv2/highgui.hpp> 9 10using namespace cv; 11using namespace std; 12 13int main() 14{ 15 //変数宣言 16 Mat src; //入力画像 17 int gazou=32; 18 vector<cv::Mat> srcImages; 19 int i, j, k; //foe文カウント用 20 int chessbord_line = 4, chessbord_column = 7; //チェスボードの行と列 21 int chess_number = chessbord_line * chessbord_column; 22 double chess_size = 100.0; //チェスボードの行(mm) 23 Size patternSize = Size(chessbord_line, chessbord_column); 24 vector<cv::Point2f> corners;//検出したチェスボードのコーナー座標(画像上での二次元座標)を格納 25 cv::Point3d objects[896]; 26 Size winsize = Size(5, 5); //探索窓のサイズの半分 27 Size zerozone = Size(-1, -1);//探索領域の中心に存在する対象外領域の半分のサイズ 28 int maxCount = 30;//高精度化のための繰り返し回数 29 double epsilon = 0.1;//高精度化のためのεの値 30 vector<vector<cv::Point2f> > image_points;//二次元座標格納用(画像平面座標) 31 vector<vector<cv::Point3f> > object_points;//三次元座標格納用(現実の座標) 32 vector<cv::Point3f> object; 33 Size image_size; 34 Mat intrinsic_matrix; 35 36 for (int i = 0; i <= 32; i++) { 37 //画像の読み込み 38 string filename_i, filename_o; 39 if (i < 10) filename_i = "output_00" + to_string(i) + ".jpg"; 40 else if (i < 100) filename_i = "output_0" + to_string(i) + ".jpg"; 41 else if (i >= 100) filename_i = "output_" + to_string(i) + ".jpg"; 42 src = imread(filename_i, CV_8UC3); 43 srcImages.push_back(src); 44 //チェスボードのコーナー検出 45 bool found = findChessboardCorners(//コーナーが見つかったらtrueを返すのでbool 46 src, //入力画像 47 patternSize, //チェスボードのサイズ 48 corners //検出したコーナーの座標 49 ); 50 if (found==true){ 51 52 //コーナー位置の高精度化 53 cornerSubPix( 54 src, //入力画像 55 corners, //検出したコーナーの座標 56 winsize, //探索窓のサイズの半分.例えば winSize=Size(5,5) の場合,(5*2+1)*(5*2+1)= 11*11 サイズの探索窓が利用される 57 zerozone, //探索領域の中心に存在する対象外領域(後述の式において総和を計算する際に含まれない)の半分のサイズ.この値は,自己相関行列において発生しうる特異点を避けるために用いられます. 値が (-1,-1) の場合は,そのようなサイズはないということを意味します. 58 TermCriteria(maxCount + epsilon, 30, 0.01) 59 ); 60 61 //チェスボードのコーナー描画 <-- 検出できてるかの確認 62 drawChessboardCorners( 63 src, //入力画像 64 patternSize, //チェスボードのサイズ 65 corners, //検出したコーナーの座標 66 found //なにこれ 67 ); 68 imshow("src", src);//画像を表示 69 waitKey(100); 70 } 71 image_points.push_back(corners);//検出したコーナーの座標をimage_pointに格納 72 //object_points.push_back(vector<cv::Point3f>());// object_poinntsを初期化 73 } 74 for (j = 0; j < chessbord_line; j++) { 75 for (k = 0; k < chessbord_column; k++) { 76 Point3f p( 77 j * chess_size, 78 k * chess_size, 79 0.0); 80 object.push_back(p); 81 } 82 } 83 for (i = 0; i < gazou; i++) 84 { 85 object_points.push_back(object); 86 } 87 int flags = 0; 88 Mat cam_mat; 89 Mat dist_cofes; 90 vector<cv::Mat>rvecs, tvecs; 91 calibrateCamera( 92 object_points, 93 image_points, 94 srcImages[0].size(), 95 cam_mat, 96 dist_cofes, 97 rvecs, 98 tvecs 99 //CALIB_ZERO_TANGENT_DIST | CALIB_FIX_PRINCIPAL_POINT 100 ); 101}

試したこと

Opencvのリファレンスのcalibratecameraの記事を参照し,引数の型や何次元ベクトルでないといけないのかなどを確認しましたが,どこが間違いなのかイマイチわかりませんでした。

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

Opencv4.4.0とvisualstudio2019でローカルwindowsデバッガーで動かしています.

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問