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

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

ただいまの
回答率

90.03%

OpenCVのArUcoを用いたマーカー位置推定の例外

受付中

回答 0

投稿

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

keni

score 6

前提・実現したいこと

VC++2017,OpenCV3.4.6でArUcoを用いてカメラからマーカーの位置推定を行いたいです。

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

エラーはないのですが例外が出ます。コマンドプロンプトには

[ INFO:0] VIDEOIO: Enabled backends(5, sorted by priority): FFMPEG(1000); MSMF(990); DSHOW(980); CV_IMAGES(970); CV_MJPEG(960)
OpenCV(3.4.6) Error: Assertion failed (CV_IS_MAT(objectPoints) && CV_IS_MAT(imagePoints) && CV_IS_MAT(A) && CV_IS_MAT(rvec) && CV_IS_MAT(tvec)) in cvFindExtrinsicCameraParams2, file C:\opencv\sources\modules\calib3d\src\calibration.cpp, line 996


がでて、出力には

0x00007FFD36F3A839 で例外がスローされました (ConsoleApplication2.exe 内): Microsoft C++ の例外: cv::Exception (メモリの場所 0x0000003DCB0FB708)。
0x00007FFD36F3A839 で例外がスローされました (ConsoleApplication2.exe 内): Microsoft C++ の例外: [rethrow] (メモリの場所 0x0000000000000000)。
0x00007FFD36F3A839 で例外がスローされました (ConsoleApplication2.exe 内): Microsoft C++ の例外: cv::Exception (メモリの場所 0x0000003DCB0FB708)。
ハンドルされない例外が 0x00007FFD36F3A839 で発生しました (ConsoleApplication2.exe 内): Microsoft C++ の例外: cv::Exception (メモリの場所 0x0000003DCB0FB708)。


がでます。
カメラは問題なく起動します。しかし用意したマーカーをカメラに移すとこの例外が出てしまいます。

該当のソースコード

#include "pch.h"
#include <opencv2/core.hpp>
#include <opencv2/aruco.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>

int main(int argc, const char* argv[])
{
    cv::VideoCapture inputVideo;
    inputVideo.open(0);
    cv::Mat cameraMatrix, distCoeffs;
    cameraMatrix = (462.71, 0, 338.630, 0, 465.97, 177.780, 0, 0, 1);
    distCoeffs = (0.133013, -0.322199, -0.001524, 0.004866, 0.0);

    // camera parameters are read from somewhere
    //readCameraParameters(cameraMatrix, distCoeffs);

    cv::Ptr<cv::aruco::Dictionary> dictionary = cv::aruco::getPredefinedDictionary(cv::aruco::DICT_6X6_250);
    cv::Mat image;
    while (inputVideo.read(image)) {
        std::vector<int> marker_ids;
        std::vector<std::vector<cv::Point2f>> marker_corners;
        cv::Ptr<cv::aruco::DetectorParameters> parameters = cv::aruco::DetectorParameters::create();
        cv::aruco::detectMarkers(image, dictionary, marker_corners, marker_ids, parameters);
        std::vector<cv::Vec3d> rvecs, tvecs;
        cv::aruco::estimatePoseSingleMarkers(marker_corners, 0.05, cameraMatrix, distCoeffs, rvecs, tvecs);

        // 検出したマーカーの描画
        cv::aruco::drawDetectedMarkers(image, marker_corners, marker_ids);
        cv::imshow("marker_detection", image);
        cv::waitKey(1);
    }
    return 0;
}

試したこと

環境構築はうまくいっており、ArUcoのサンプルプログラムは動かせます。

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

VC++2017 
OpenCV3.4.6
Opencv-contrib3.4.6

回答よろしくお願いします。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

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

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

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