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

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

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

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

OpenCV

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

C++

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

Q&A

1回答

2822閲覧

C++ VisualStudio2017 OpenCV3.2.0で一時停止標識を検出できない

ksmiki

総合スコア8

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

OpenCV

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

C++

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

0グッド

0クリップ

投稿2017/06/20 16:20

###前提・実現したいこと
OpenCVでカメラからのとまれの一時停止標識を検出しようと思っています
VisualStudioに全く触ったことがなく、Linux上で開発していました。
初心者で分かりません。

###発生している問題・エラーメッセージ
63行目のtargets.size()で"18446743988082066159"という大きな値が出てきます。
この後のfor文で多く回ってしまうことでウィンドウが表示されないのだと思います。

###該当のソースコード

#include <iostream> // for standard I/O #include <string> // for strings #include <iomanip> // for controlling float print precision #include <sstream> // string to number conversion #include <stdlib.h> #include <vector> #include <opencv2/core/core.hpp> // Basic OpenCV structures (cv::Mat, Scalar) #include <opencv2/imgproc/imgproc.hpp> // Gaussian Blur #include <opencv2/highgui/highgui.hpp> // OpenCV window I/O #include <opencv2/objdetect/objdetect.hpp> #include <opencv2/videoio/videoio.hpp> #define _TRIANGLETESTMAIN using namespace cv; //using namespace std; static void showUsage(const char *cmd) { std::cerr << cmd << ": [-h] imageFilename trainFilename" << std::endl; std::cerr << " -n: do not open display windows" << std::endl; } int main(void) { Mat frame; VideoCapture cap(0); if (!cap.isOpened()) { std::cerr << "Cannot open camera." << std::endl; return 1; } namedWindow("Output", WINDOW_AUTOSIZE); CascadeClassifier clsf; try { clsf.load("001/cascade.xml"); } catch (Exception& e) { const char* err_msg = e.what(); std::cout << err_msg << std::endl; } if (clsf.empty()) { std::cerr << "cannot load cascade file" << std::endl; exit(-1); } std::vector<Rect> targets; while (1) { cap >> frame; clsf.detectMultiScale(frame, targets); if (clsf.empty()) { std::cerr << "cannot load cascade file" << std::endl; exit(-1); } else { std::cout << "read" << std::endl; } std::cout << targets.size() << std::endl; for (int i = 0; i < targets.size(); i++) { rectangle(frame, Rect(targets[i].x, targets[i].y, targets[i].width, targets[i].height), Scalar(255, 0, 0), 2); } imshow("Output", frame); char c = (char)waitKey(10); if (c == 'q') { break; } } endOfMovie: destroyWindow("Output"); return 0; }

###補足情報(言語/FW/ツール等のバージョンなど)
環境
CMakeでOpenCVインストールしました。
opencv3.2
visual studio2017
プロパティ
C/C++
追加のインクルードディレクトリ C:\opencv-3.2.0\build\install\include;
リンカー
追加のライブラリディレクトリ C:\opencv-3.2.0\build\install\x64\vc15\lib
追加依存ファイル 追加のライブラリディレクトリにあるものはすべて追加しました。

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

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

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

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

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

guest

回答1

0

素人意見ですが、たとえばtargets.size()が100を超えていたらループを100回までにして無理やり先に進めてみて、出てきた矩形はちゃんと標識の位置を示しているでしょうか?
使っている分類器(001/cascade.xml)は自作されたものですかね?これが狂っているとか...?カメラのキャプチャ像でなく、何か別の画像なら正しく検出できますでしょうか。

投稿2017/06/20 22:54

Bongo

総合スコア10807

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

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

ksmiki

2017/06/21 02:22

100は難しいですが、5にした場合、いろいろなところに矩形矩形ができていました。 一時停止標識を見せるとそこに集中しているような感じです。 デバッグのあと xutility internal headerに以下のようなものができていました。 0x00007FF77B474BCD で例外がスローされました (stopdetector.exe 内): 0xC0000005: 場所 0x0000005B0000005B への書き込み中にアクセス違反が発生しました また、別の画像で試したところ一時停止標識を囲む矩形ができていました。 ただ以下が表示されました。 0x00007FFF5D4D0BDD (ntdll.dll) で例外がスローされました (stopdetector.exe 内): 0xC0000005: 場所 0x0000007900000081 への書き込み中にアクセス違反が発生しました
ksmiki

2017/06/24 16:11

minNeighborsを調整してみたところ、確かに矩形の個数は変わります。 しかし、同じcascadeファイルでOpenCVがインストールされているUbuntuの場合targets.size()で表示される数はせいぜい多くても2個くらいで矩形もその個数だけできます。 同じcppファイルを用いて、ここまで違うのはおかしな気がするんです。 試しに、Windows上でcascadeファイルを作ってみても結果は同じです。 根本的な原因と解決策が見出せません...
Bongo
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問