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

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

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

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

OpenCV

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

C++

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

Q&A

解決済

4回答

1795閲覧

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

carnage0216

総合スコア194

C

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

OpenCV

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

C++

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

0グッド

0クリップ

投稿2018/04/16 14:24

編集2018/04/19 18:51

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

環境

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

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

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

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

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

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

mkgrei

2018/04/16 14:50

「画像中の顔の座標を知りたい! 顔面検出器編」はうまく行ったという前提でよろしいですか?
mkgrei

2018/04/16 15:00

パスさえ通せばそのままのコードで問題なく走ります。問題があるとすればVSのパスの通し方でしょうか。
carnage0216

2018/04/16 15:02

画像中の顔の座標を知りたい! 顔面検出器編とはいつのことでしょうか?
carnage0216

2018/04/16 15:03

ちなみにパスはC:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\1041でよいでしょうか?
episteme

2018/04/16 23:04 編集

CMake 上で OpenCV に contrib 追加して configure/generate、Visual Studio で build/install したんだよね? contrib抜きで configure/generate/build できた?
carnage0216

2018/04/17 04:12

行なっていなかったので、行い次第結果を報告します。
episteme

2018/04/17 04:59 編集

...やっぱり。まだスタート地点にも立ってなかった > ALL
episteme

2018/04/17 04:59

# CMake 使えるようになったのかなぁ、これまでさんざん失敗してなかったっけ?
carnage0216

2018/04/17 07:50

今回のエラーの原因はcmakeを使わなかった事ですが、trackingのソースコードのためのライブラリがなかったため、エラーがおきたのですか?
carnage0216

2018/04/17 07:52

使うopencv3.4.1がvsようにビルドされていなかったのが原因ですか?また、質問とは異なりますが、makefileを使うことでvs用のopencvは作れますか?
episteme

2018/04/17 10:09

ちゃんとライブラリを作らなかったから!
mkgrei

2018/04/19 13:22

opencv_contrib-3.4.1/buildを作って、そこでcmake .. && makeするのではないのですか?Windowsだとやり方が他にあるのでしょうか。
carnage0216

2018/04/19 14:22

参考にさせて頂きます。どうかお待ちください。
carnage0216

2018/04/19 17:54

すいません。エラーに手間取っていました。調べるとC++のエディタが入っていないと起きるそうですがVS2017には入っています。Cmakeを入れる前からVS2017があったことが原因なのでしょうか。
carnage0216

2018/04/19 17:54

こちらがエラーです。The CXX compiler identification is unknown The C compiler identification is unknown CMake Error at CMakeLists.txt:98 (project): No CMAKE_CXX_COMPILER could be found. CMake Error at CMakeLists.txt:98 (project): No CMAKE_C_COMPILER could be found. Configuring incomplete, errors occurred! See also "C:/Opencv3.2.0/opencv/build/CMakeFiles/CMakeOutput.log". See also "C:/Opencv3.2.0/opencv/build/CMakeFiles/CMakeError.log".
carnage0216

2018/04/19 17:56

もしかしたら解決できるかもしれません。少しお待ちください。
carnage0216

2018/04/19 18:03

2:54分に投稿したエラーは消えました。c++のエディタがちゃんとインストールできていなかったようです。
carnage0216

2018/04/19 18:28

WITH_CUDAのチャックを取り忘れていました。解決しました。
YomogiKOBO

2018/04/20 13:07

CMakeを使ったのち、VisualStudioにてopenCVのライブラリ作成に成功したということでしょうか?
carnage0216

2018/04/20 14:19

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

2018/04/21 01:03

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

2018/04/21 04:58

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

回答4

0

ベストアンサー

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/16 22:26

raccy

総合スコア21733

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

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

carnage0216

2018/04/17 04:11

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

2018/04/17 04:13

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

2018/04/17 05:02

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

2018/04/17 10:12

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

0

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

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

cmd

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

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

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

投稿2018/04/17 03:45

asm

総合スコア15147

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

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

carnage0216

2018/04/17 09:17

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

2018/04/17 09:28

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

0

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/16 15:04

編集2018/04/19 21:52
mkgrei

総合スコア8560

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

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

episteme

2018/04/16 23:07 編集

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

2018/04/16 23:20

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

2018/04/16 23:51 編集

CUDAもcontribも使わない"素"のOpenCVならbuild済バイナリ・パッケージがあるんですけどね。 そいつだったらどこぞに置いて include/lib path 通せばイッパツです。 contrib使ってるから CMake で configure/generate ののち Visual Studio で buildして云々せんならんですが、質問者がこいつをきっちり(できて/やって)なかったらそもそもスタート地点に立ってません。
carnage0216

2018/04/17 04:16

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

2018/04/17 04:34

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

2018/04/20 08: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 スキップ ========== というエラーが出ます。プログラムは何もいじっていません。
carnage0216

2018/04/20 08:30

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

2018/04/20 08:42 編集

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

2018/04/20 09:37

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

2018/04/20 09:54

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

2018/04/20 10:21

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

2018/04/20 12:25

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

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シリーズ

投稿2018/04/19 20:00

YomogiKOBO

総合スコア187

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問