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

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

ただいまの
回答率

90.76%

  • C

    3452questions

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

  • C++

    3245questions

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

  • OpenCV

    969questions

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

Opencvの顔を追尾するプログラムを最後に作りたいのですがエラーが出ます。

解決済

回答 4

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,064

carnage0216

score 120

標準ライブラリ関数を学ぶことも重要なのですが、一度トラッキングが行ってみたいと思い投稿しました。
わがままを言っているのは百も承知です。どうかトラッキングの解決に力を貸してください。

環境

  •  Windows10 64bit
  •  Opencv3.4.0
  •  VS2017
  • 参考にしたサイトリンク内容

プログラムはこちらです。カメラに映った顔を検出して追尾するプログラムです。

#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/videoio.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/tracking/tracker.hpp>
#include <opencv2/tracking/tldDataset.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>

int tracker_init(cv::Ptr<cv::TrackerMedianFlow> &tracker, cv::Rect2d &rect)
{
    cv::VideoCapture cap(0);
    if (!cap.isOpened())
    {
        std::cout << "CAN'T OPEN CAMERA." << std::endl;
        return -1;
    }

    cv::Mat frame;
    cv::namedWindow("Select face");

    while (true)
    {
        cap >> frame;
        if (frame.empty())
        {
            std::cout << "FAILD TO READ A FRAME" << std::endl;
            cv::destroyAllWindows();
            break;
        }

        cv::imshow("Select face", frame);

        switch (cv::waitKey(1))
        {
        case 'q':
            return -1;
        case 't':
            rect = cv::selectROI("tracker", frame);
            tracker->init(frame, rect);
            cv::destroyAllWindows();
            return 1;
        default:
            break;
        }
    }

    return -1;
}

int main(int argc, char **argv)
{
    cv::Ptr<cv::TrackerMedianFlow> tracker = cv::TrackerMedianFlow::create();
    cv::Rect2d roi;

    if (tracker_init(tracker, roi) == -1)
    {
        /*
        * 初期化に失敗
        */
        return -1;
    }

    cv::Scalar color = cv::Scalar(0, 255, 0);
    cv::Mat frame;
    cv::VideoCapture cap(0);
    if (!cap.isOpened())
    {
        std::cout << "CAN'T OPEN CAMERA." << std::endl;
        return -1;
    }

    while (cv::waitKey(1) != 'q')
    {
        cap >> frame;
        if (frame.empty())
        {
            break;
        }

        //更新
        tracker->update(frame, roi);

        //結果表示
        cv::rectangle(frame, roi, color, 1, 1);

        cv::imshow("tracker", frame);
    }

    return 0;
}


ヘッダファイルを指定したあと依存ファイルとしてopencv_world.340を指定してのですがエラーが出ます。(すいません。文字数の問題でこちらに置かせていただきます。)

https://pastebin.com/XZfRsbZN

編集4/19
Cmakeでビルドしようとしているのですが以下のエラーが出ます。
頑張って和訳してみたのですが、少ししかわかりませんでした。

CMake Error: Could not find CMAKE_ROOT !!!
CMake has most likely not been installed correctly.
Modules directory not found in
C:/Users/Daito/Desktop/cmake-3.11.1-win64-x64/share/cmake-3.11
CMake Error: Could not find cmake module file: CMakeSystemSpecificInitialize.cmake
CMake Error: Could not find cmake module file: CMakeDetermineCCompiler.cmake
CMake Error: Could not find cmake module file: C:/opencv_contrib-3.4.1/modules/tracking/build/CMakeFiles/3.11.1/CMakeCCompiler.cmake
CMake Error: Could not find cmake module file: CMakeDetermineCXXCompiler.cmake
CMake Error: Could not find cmake module file: C:/opencv_contrib-3.4.1/modules/tracking/build/CMakeFiles/3.11.1/CMakeCXXCompiler.cmake
CMake Error: Could not find cmake module file: CMakeSystemSpecificInformation.cmake
CMake Error in CMakeLists.txt:
  No CMAKE_C_COMPILER could be found.



CMake Error: Could not find cmake module file: CMakeCInformation.cmake
CMake Error in CMakeLists.txt:
  No CMAKE_CXX_COMPILER could be found.



CMake Error: Could not find cmake module file: CMakeCXXInformation.cmake
CMake Warning (dev) in CMakeLists.txt:
  No cmake_minimum_required command is present.  A line of code such as

    cmake_minimum_required(VERSION 3.11)

  should be added at the top of the file.  The version specified may be lower
  if you wish to support older CMake versions for this project.  For more
  information run "cmake --help-policy CMP0000".
This warning is for project developers.  Use -Wno-dev to suppress it.

Configuring incomplete, errors occurred!

イメージ説明
イメージ説明

編集2
なぜ、ただのソースコードではいけないのでしょうか?
vsが出力してくれた実行ファイルが得られればよいのでは?
cmakeがビルドするものや、ライブラリがないといけない事はわかったのですが、ただのソースコードをコンパイルして、ライブラリをくっつけて実行ファイルを作るのではいけないのでしょうか?
決してCmakeが嫌いなわけではございません。ただちゃんと理解していないで使うことに抵抗があります。公式やサイトを見てみましたが以上の疑問が解決できずにいます。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • carnage0216

    2018/04/20 23:19

    はい、成功しました。リリースとデバッグともにライブラリがあります。ただリリースに関してopencv_tracking320.libはないのですが大丈夫でしょうか?opencv_tracking320.dllはあります。

    キャンセル

  • raccy

    2018/04/21 10:03

    最初の目的がうまくいったのであれば解決済みにしてください。質問に追加している内容では最初の質問とは全く異なっています。異なる内容を質問したいのであれば、この質問をリンクをつけて、新規の質問としてあげてください。

    キャンセル

  • carnage0216

    2018/04/21 13:58

    すいませんでした。改めて質問いたします。

    キャンセル

回答 4

checkベストアンサー

+5

opencv_contrib GitHubレポジトリのClone or Downloadからzipファイルをダウンロードしてただ展開しただけのように見えます。ただ展開するだけでは動きません。注意点は2点有ります。

1. releaseにあるOpenCVのバージョンと同じものを使う必要がある。

opencv_contribはOpevCVのバージョン毎に用意されており、異なるバージョンではうまくいかない場合があります。また、masterの最新はテスト等が不十分で環境によっては全く動かないというバグが残ったままの場合もあります。releaseからOpenCVのバージョンと同じバージョンをダウンロードして下さい。

2. OpenCVをcontrib有りでビルドする必要がある。

README.mdにも書いていますが、OpenCVと一緒にビルドしなおす必要があります。ただ、展開しただけでは使えません。cmake実行後、Visual Stuidoで正しくINSTALLプロジェクトをビルドすれば、ビルドディレクトリの"install"配下にEXEファイル、ライブラリ、ヘッダファイルが作成されます。そちらを使う必要があります。


正しい手順でビルドし直しが終わっており、正しくパスを設定できるているのであれば、エラーに出ているヘッダファイルは"(OpenCVを展開したフォルダー)\build\include\opencv2\tracking\feature.hpp"等となります。他のプロジェクトからopencv_contribを展開したフォルダーを見に行く必要はありませんし、見に行ってはいけません。そこを見に行っている時点でopencv_contribの入れ方が間違っているということです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/04/17 13:11

    どうもありがとうございます。
    あの、質問とは異なるのですが、cmakeはなにをしてくれるのですか?
    必要なプログラムを持ってきてくれるだけでしょうか?
    あるいは必要に応じてプログラムの中身を書き換えて使えるようにしてくれるなどでしょうか?
    申し訳ありませんがどうかよろしくお願い致します。

    キャンセル

  • 2018/04/17 13:13

    簡単な優しい言葉で説明していただけると助かります。

    キャンセル

  • 2018/04/17 14:02

    ↑なぜ本家 cmake.org の解説/チュートリアルを読もうとしないのだろう... 横文字アレルギーか?

    キャンセル

  • 2018/04/17 19:12

    cmakeが何をするものなのかを簡易な言葉で全てを説明するにはコメント欄は狭すぎます。cmakeがわからないなら、自分で調べた後に、別の質問として立てて下さい。

    キャンセル

+2

https://qiita.com/tomochiii/items/fa26404ebc5fcd4481b9

VS2017でOpenCVを使うための準備を再度確認してみてください。


「画像中の顔の座標を知りたい! 顔面検出器編」はお貼りになったリンクのトラッキングのコードの直前にあります。


OpenCVをインクルードするためのパスを確認してください。
パスのどこかにopencv、include、libなどがあることをせめて期待していますが、Windows事情は詳しくないので、なくてもコンパイルできるのかもしれません。


決してCmakeが嫌いなわけではございません。ただちゃんと理解していないで使うことに抵抗があります。公式やサイトを見てみましたが以上の疑問が解決できずにいます。

ソースコードだけであって、直接g++ fild.cpp -o file.oみたいにコンパイルしていくのが面倒くさい。

makefileに記述しておけばmake allとかだけで、一連のソースをコンパイルできる様になった。
がソースファイルの依存関係に変更があるとmakefileを書き換えないといけないので面倒くさい。

configure/cmakeが出てきて、まずmakefileを作ってからmake allする。
makefileを書く時代から人間が書くべき量が激減した。みんなハッピー。

OpenCVには大量のモジュールがあります。
trackingを行うのに、他のどのモジュールが必要であるのか、自分で調べるのが面倒ではないですか、製作者でもないのに。
そもそも、trackingの中の関数を使うことが目的です。
ならば、OpenCVの中の依存性解決問題はOpenCVの製作者たちに解決してもらうことにして、我々ユーザーはcmake .. && makeだけで使えるようにする仕組みがほしいな、と思うのが自然です。

また、今度trackingではない別のモジュールを使用することになりました。
OpenCVの一部だけをコンパイルし直すのは面倒じゃないですか。
なので、OpenCVだけの部分全体をライブラリとして先にコンパイルしておいて、次回以降使用するときにはリンクするだけで使えるようにしておくと、無駄な作業をいろいろ減らせるので採用、と。

やらねばならなかった単純作業から人を解放して、もっと建設的な活動に時間を割けるようにすることが目的です。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/04/17 07:58 編集

    c:\opencv_contrib-master\modules\tracking\include なんてとこに include-path 通してる時点でアウトだろなー...
    # トリセツ読まずに手当たり次第ボタンを押すタイプか?

    キャンセル

  • 2018/04/17 08:20

    確かに。

    macやlinuxと比べるとやはりWindowsは少し大変ですね。
    opencvをインストーラー1つでよしなにしてくれるようにはなっていないのですか?
    素朴な疑問。

    キャンセル

  • 2018/04/17 08:45 編集

    CUDAもcontribも使わない"素"のOpenCVならbuild済バイナリ・パッケージがあるんですけどね。
    そいつだったらどこぞに置いて include/lib path 通せばイッパツです。

    contrib使ってるから CMake で configure/generate ののち Visual Studio で buildして云々せんならんですが、質問者がこいつをきっちり(できて/やって)なかったらそもそもスタート地点に立ってません。

    キャンセル

  • 2018/04/17 13:16

    >>c:\opencv_contrib-master\modules\tracking\時点でアウトだろなー...
    えっと、c:\opencv_contrib-master\modules\tracking\include に include-path 通してましたか!?
    すいませんでした。

    キャンセル

  • 2018/04/17 13:34

    通ってなきゃそんなメッセージ出るわけないじゃん。
    エラー・メッセージからその意味/理由を読み取れない? だからことあるごとに質問?
    # プログラマの基本スキルです。できないと"詰む"からね。

    キャンセル

  • 2018/04/20 17:29

    Cmakeでビルドが成功してリリースのライブラリが作れ指定できたのですが
    1>------ ビルド開始: プロジェクト: Project7, 構成: Release x64 ------
    1>OPencvtest.cpp
    1>c:\users\daito\desktop\opencvtest.cpp(53): error C2660: 'cv::Tracker::create': 関数に 0 個の引数を指定できません。
    1>プロジェクト "Project7.vcxproj" のビルドが終了しました -- 失敗。
    ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
    というエラーが出ます。プログラムは何もいじっていません。

    キャンセル

  • 2018/04/20 17:30

    とりあえず調べて解決してみます。少しお待ちください。

    キャンセル

  • 2018/04/20 17:34 編集

    YomogiKOBOさんから紹介して頂いたサイトに書いてあるプログラムは成功しました。

    キャンセル

  • 2018/04/20 18:37

    opencvtest.cppとは、何でしょうか?
    質問文のコードのことですか?

    キャンセル

  • 2018/04/20 18:54

    そうです。ソースコードの名前をopencvtest.cppとしました。

    キャンセル

  • 2018/04/20 19:21

    エラーメッセージをもっと表示させる方法はわかりませんが、'cv::Tracker::create'なんてコードにありましたっけ。

    キャンセル

  • 2018/04/20 21:25

    文字列検索をかけましたがありませんでした。調べます。

    キャンセル

+2

1つの手段としてvcpkgというものがある

インストール
適当な(パスに半角英数以外を含まない)フォルダにてコマンドプロンプトから

git clone git@github.com:Microsoft/vcpkg.git
cd vcpkg
bootstrap-vcpkg.bat
vcpkg install opencv[contrib]:x64-windows

管理者権限でプロンプトを開き直してvcpkg integrate install

あとは、VisualStudio2017で構成マネージャーからプラットフォームをx64にするだけ
これでとりあえずビルドできる事は確認しました。
ウェブカメラ持ってないのでトラッキングできてるかは知りません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/04/17 18:17

    パスが通っていないとかではないですよね。
    後に環境変数とvsで指定したヘッダファイル などを載せます。

    キャンセル

  • 2018/04/17 18:28

    asmさんの実装のおかげで原因がわかりそうです。
    多分、vs2017のパスか、opencvのパスがうまく通っていない可能性があります。

    キャンセル

0

バージョンは違いますが、https://qiita.com/tomochiii/items/fa26404ebc5fcd4481b9
に提示されている手順にて動作させる事ができました。
実行画面

cmakeもそのあとのライブラリビルドも問題なくたどりつけましたよ。

カメラ持っていないのでカメラに関するサンプルソースのビルド、実行は試せていません。

ライブラリ、サンプル構築環境情報
Win10 pro
Visual Studio 2017 Community
CMake 3.11.0
OpenCV 3.4.1
opencv contrib-3.4.1
グラボ:AMD RADEONシリーズ

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

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

関連した質問

  • 解決済

    opencvのcvConvertScaleAbs関数エラーを直したい

    こんにちは。 どうしても解決できず、ずっと悩んでいるのでご助力いただけないかと思い投稿しました。 前提・実現したいこと XcodeでC++、opencvを用いて行列操作を

  • 解決済

    動画から静止画切り出し

    動画から静止画の切り出しをしたいと考えています。 しかし、参考になるサイトを探していても見つかりません。 opencvで動画から静止画を切り出すことは不可能なのでしょうか?

  • 解決済

    wxPythonにおいて、USBカメラの画像表示をしたい

    前提・実現したいこと ここ一週間くらい、teratailの皆様の力を借りながら、python上で動く動画や画像を表示できるGUIを作っています。画像は何とか表示でき、画像とパネル

  • 解決済

    opencv 動画 再生

    #include <stdio.h> #include <cv.h> #include <highgui.h> int main(int argc, char* argv[])

  • 受付中

    カメラで青い円を検出

    #include <stdio.h> #include <stdlib.h> #include <highgui.h> #include <cv.h> #include <cxco

  • 解決済

    OpenCVを用いた物体検出

    現在OpenCV2.1を用いた上で顔検出にチャレンジしています。 学習等については問題なく行うことができ、顔の検出を行おうと思っているのですが、検出の段階で設定するパラメータの"m

  • 受付中

    PythonでOpenCVのVideoCaptureの例外が取得できない

    PythonのOpenCVでWEBカメラからビデオキャプチャーを利用しています。 OpenCVでは下記の通りに番号でWEBカメラを指定しますが、複数カメラを利用する際に、番号で指定

  • 解決済

    OpenCVを使った笑顔検出での問題

    前提・実現したいこと OpenCVで元からあるサンプルコード「smiledetect.cpp」を用いて笑顔検出のシステムを作っています。 検出機能を実装中に以下の問題が発生しました

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

  • C

    3452questions

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

  • C++

    3245questions

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

  • OpenCV

    969questions

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