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

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

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

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

OpenCV

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

例外

例外(exception)とは、プログラムの処理実行中に発生する、通常の処理の続行を妨げる特殊な事象のことを呼びます。この「例外」が発生した場合に、現在の処理を中断し、変わりに別の処理を実行させる事を「例外処理」と呼びます。

Q&A

0回答

1096閲覧

特徴点抽出 ハンドルされない例外

gamabunta709

総合スコア0

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

OpenCV

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

例外

例外(exception)とは、プログラムの処理実行中に発生する、通常の処理の続行を妨げる特殊な事象のことを呼びます。この「例外」が発生した場合に、現在の処理を中断し、変わりに別の処理を実行させる事を「例外処理」と呼びます。

0グッド

0クリップ

投稿2021/09/06 15:12

前提・実現したいこと

特徴点抽出プログラムをvisualstdio2017 c++で実装したところ
detectでエラーになってしまいます。
解決方法お願いします。

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

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

該当のソースコード

#include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/features2d/features2d.hpp> #include <opencv2/calib3d/calib3d.hpp> #include <opencv2/xfeatures2d/nonfree.hpp> #include <vector> #include <iostream> #include <opencv2/core/mat.hpp> #include <opencv2/core/types.hpp> using namespace cv; using namespace std; int main(void) { // 画像の読み込み Mat im = imread("画像"); // Variables to store keypoints and descriptors // Detect ORB features and compute descriptors. Ptr<Feature2D> orb = ORB::create(); vector<KeyPoint> keypoint; orb->detect(im, keypoint); Mat descriptor; orb->compute(im, keypoint, descriptor); }

試したこと

画像表示が可能かどうか
画像の正規化

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

opencv3.4.1
visualstdio2017

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

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

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

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

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

fana

2021/09/07 01:38

> cv::Exception とのことですが,コンソールウィンドウあたりに何かエラーメッセージが出ていませんか?
gamabunta709

2021/09/07 08:56

返信ありがとうございます。 確認したところ、下文のエラーメッセージが表示されていました。 OpenCV(3.4.1) Error: Assertion failed (TlsSetValue(tlsKey, pData) == 1) in cv::TlsAbstraction::SetData, file C:\build\master_winpack-build-win64-vc15\opencv\modules\core\src\system.cpp, line 1245
fana

2021/09/07 09:34

(それが何なのかはわからんですが) > TlsSetValue(tlsKey, pData) == 1 となるべきところが,そうならなかったので例外なげちゃいました,という話ですね. で,場所も出ているので,OpenCVのソースを辿っていけば何かがわかるかもしれません.大変そうですが. ちなみに,質問文に提示されたコードを実行してみても同じ現象は起きない様子でした. (試した OpenCVは 3.2.0 ですが) 画像が空でも例外が出ることもない様子.
gamabunta709

2021/09/07 09:41

それは私の実行環境に問題があるという認識でよろしかったでしょうか。 ちなみにfanaさんが使われるvisual stdioのバージョンも2017年版なのでしょうか。
fana

2021/09/07 09:47

> それは私の実行環境に問題があるという認識でよろしかったでしょうか。 こちらでたまたま用いたOpenCVのバージョンの方がより古い物なので,バージョンアップによって「まともなチェックが入った」のかもしれません. Visual Studio は 2017 です.
gamabunta709

2021/09/07 09:52

わかりました。 opencvのバージョンを変えて試してみます。 ありがとうございます。
fana

2021/09/07 09:55

たまたまディスク内にあった 4.1.1 でも試してみましたが,やはり同じ(cv::Exception は出ない)ですね.
fana

2021/09/08 01:42

> OpenCV(3.4.1) Error: Assertion failed (TlsSetValue(tlsKey, pData) == 1) ……(以下略) の TlsSetValue というのが,↓のURLのAPIだとしたら,戻り値に関しては If the function succeeds, the return value is nonzero. とだけ書かれているので,==1 というチェック自体がバグなんじゃないのか?という気もします. TlsSetValue()が成功時にどんな値を返してくるのか?(←何によって定まるのか?も謎ですが)次第では,成功しているのにCVが失敗としてしまいそうです. (手元の4.1.1 のソースを見ても ==TRUE と書かれていますが…) https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-tlssetvalue
gamabunta709

2021/09/08 03:58

おはようございます。 昨日、色々なバージョンのOpenCVを導入してみたのですが、どれも同じ場所で止まってしまいます… visual stdio側でopencvのパスなどを登録する以外に特別な操作などしてますでしょうか?
gamabunta709

2021/09/08 03:59

もちろん本体のシステム環境にもパスは通してあります。
fana

2021/09/08 04:21

特に変わったことはしてないです. OpenCVを使う際は, プロジェクト作って,プロジェクトのプロパティで ・C/C++ → 追加のインクルードディレクトリ ・リンカー → 追加のライブラリディレクトリ にパスを追加して, リンカー → 追加の依存ファイル にOpenCVのlibのファイル名を追加するだけですね. あと,私はOpenCVのdllのある場所にシステムではパスを通してないので,Visual Studio から実行できるようにするために デバッグ → 環境 のところでdllのありかにパスを通してますが,それだけですね. (昔,OpenCVの複数のバージョンが同じdllファイル名だったときに面倒を起こした経験があるので)
fana

2021/09/08 04:36

あ,一応,差異としては > #include <opencv2/xfeatures2d/nonfree.hpp> これが私の環境には存在してないので,このincludeだけは外してましたね. OpenCV3.2.0を使ったReleaseビルドの設定では 追加の依存ファイル に書いてるlibは opencv_core320.lib opencv_highgui320.lib opencv_imgproc320.lib opencv_imgcodecs320.lib opencv_features2d320.lib になってます.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問