合計 昨日 今日

opencv3.1によるtracking

フォーラムルール
フォーラムルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Name: syokkupan
[URL]
ぴよぴよ(991 ポイント)
Date: 2017年1月10日(火) 16:05
No: 1
(OFFLINE)

 opencv3.1によるtracking

こんにちは。syokkupanと申します。

私は今opencv3.1を用いてトラッキングに挑戦しています。
最初に領域を指定してその領域を追跡することに成功しました。
そこで次に、指定した領域が右に行き過ぎると追跡を終えて、別の領域を追跡するようにしています。

しかしうまく領域の初期化ができません。

コードの間違いやアドバイスなどがありましたら、教えていただきたいです。
よろしくお願いします。

環境
windows7
visual studio2013
opencv3.1
コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
/*
trackerの練習
 
opencv3.1
visual studio 2013
*/
 
#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/videoio.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/tracking.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>
 
#pragma comment(lib, "opencv_core310.lib")
#pragma comment(lib, "opencv_imgcodecs310.lib")
#pragma comment(lib, "opencv_videoio310.lib")
#pragma comment(lib, "opencv_highgui310.lib")
#pragma comment(lib, "opencv_tracking310.lib")
#pragma comment(lib, "opencv_imgproc310.lib")
 
using namespace cv;
using namespace std;
 
int main(void){
   
    //①Trackerの生成
    Ptr<Tracker> trackerKCF = Tracker::create("KCF");
 
    //動画の読み込み
    VideoCapture cap("001.wmv");
    if (!cap.isOpened()) {
        std::cout << "ビデオが開けません。" << std::endl;
        return -1;
    }
    Mat frame;
    cap >> frame;
 
    //②ROIの設定  (region of interest)
    int tracker_x = 0;  //xの始点
    int tracker_y = 0;  //y
    int tracker_width = 150;    //幅
    int tracker_height = 150;   //高さ
    Rect2d tracker_rect(tracker_x, tracker_y, tracker_width, tracker_height); // x(左上),y(左上),w,h
    //③追跡対象を選択
    Rect2d tracking_object = tracker_rect;
   
    //⑤trackerの初期化 (ここで追跡するROIを入れる)
    trackerKCF->init(frame, tracking_object);
 
    //⑥trackerの色指定
    cv::Scalar colorkcf = cv::Scalar(0, 255, 0);
 
    //動画保存の設定
    double fps = cap.get(CV_CAP_PROP_FPS);
    cv::Size size = cv::Size(cap.get(CV_CAP_PROP_FRAME_WIDTH), cap.get(CV_CAP_PROP_FRAME_HEIGHT));
    const int fourcc = cv::VideoWriter::fourcc('X', 'V', 'I', 'D');
    std::string filename = "output.avi";
    cv::VideoWriter writer(filename, fourcc, fps, size);
 
    while (1){
        cap >> frame;
 
        //動画の最後になったらループ抜ける
        if (frame.empty())
            break;
 
        int Min_x = 0, Min_y = 0;
        int Max_x = 0, Max_y = 0;
        double width = 0;
        double height = 0;
 
 
        if (150 < tracking_object.x){
            tracker_x = 0;
            tracker_y = 0;
            tracker_width = 100;
            tracker_height = 100;
            trackerKCF->init(frame, tracking_object);
        }
 
        //⑦trackerの更新
        trackerKCF->update(frame, tracking_object);
        cv::rectangle(frame, tracking_object, colorkcf, 1, 1);
        cv::putText(frame, "- KCF", cv::Point(5, 20), cv::FONT_HERSHEY_SIMPLEX, .5, colorkcf, 1, CV_AA);
       
        //確認用
        cout << " x " << tracking_object.x << " y " << tracking_object.y << " width " << tracking_object.width << " height " << tracking_object.height << endl;
        //cout << " x " << tracker_x << " y " << tracker_y << " width " << tracker_width << " height " << tracker_height << endl;
       
        //処理終了-----------------------------------------------------------------------------------------
       
        writer << frame;
 
        imshow("a", frame);
 
        int key = cv::waitKey(30);
        if (key == 0x1b) //ESCキー
            break;
    }
 
    cap.release();
    writer.release();
    cvDestroyAllWindows();
 
    return 0;
}

Name: ポニョ
[URL]
Date: 2017年1月11日(水) 23:42
No: 2
(OFFLINE)

 Re: opencv3.1によるtracking

http://qiita.com/hmichu/items/3615ddcc93851ad59abeなどを見ても良く分からないですね...。
<opencv2/tracking.hpp>をどのように入手されましたでしょうか。

Name: usao
[URL]
ハッカー(129,101 ポイント)
Date: 2017年1月12日(木) 14:55
No: 3
(OFFLINE)

 Re: opencv3.1によるtracking

80行目でinit()に渡しているtracking_objectの内容は,前回のトラッキング結果位置のままになっているのではないでしょうか.
(本当は,76~79行目の値を用いたinit()をしたいのでは?)

Name: syokkupan
[URL]
ぴよぴよ(991 ポイント)
Date: 2017年1月12日(木) 18:22
No: 4
(OFFLINE)

 Re: opencv3.1によるtracking

返信ありがとうございます。

ポニョさん
<opencv2/tracking.hpp>は、opencv.orgからダウンロードしました。

usaoさん
おっしゃる通り、76~79行目の値を用いたinit()を行おうとしております。

Name: Math
[URL]
Date: 2017年1月13日(金) 23:53
No: 5
(OFFLINE)

 Re: opencv3.1によるtracking

[雑談]OpenCV3.2.0をGet。調査中。
OpenCvSharp3 3.2.0はインストール完了。
コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OpenCvSharp;
using OpenCvSharp.Blob;
using OpenCvSharp.Detail;
using OpenCvSharp.Extensions;
using OpenCvSharp.Face;
using OpenCvSharp.Flann;
using OpenCvSharp.Gpu;
using OpenCvSharp.ML;
using OpenCvSharp.UserInterface;
using OpenCvSharp.Util;
using OpenCvSharp.XFeatures2D;
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
        }
    }
}

Name: Math
[URL]
Date: 2017年1月15日(日) 20:17
No: 6
(OFFLINE)

 Re: opencv3.1によるtracking

[雑談]OpenCV3.2.0も(3.1も)<opencv2/tracking.hpp> の部分がわからない。C#もC++と似ているので類推出来るのですがtrackingの部分は不明です?。
「OpenCvSharp3 3.2.0」
コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OpenCvSharp;
using OpenCvSharp.Blob;
using OpenCvSharp.Detail;
using OpenCvSharp.Extensions;
using OpenCvSharp.Face;
using OpenCvSharp.Flann;
using OpenCvSharp.Gpu;
using OpenCvSharp.ML;
using OpenCvSharp.UserInterface;
using OpenCvSharp.Util;
using OpenCvSharp.XFeatures2D;
//[003]---3rd---3rd.Sample---33333333333333333333333333333333333333333---
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Mat img=Cv2.ImRead("d:/dat/lenna.png");//画像読み込み
            Cv2.NamedWindow("img");
            Cv2.ImShow("img", img);//画像表示
            Cv2.WaitKey(0);
            Cv2.DestroyAllWindows();
        }
    }
}

Name: usao
[URL]
ハッカー(129,101 ポイント)
Date: 2017年1月16日(月) 09:49
No: 7
(OFFLINE)

 Re: opencv3.1によるtracking

>おっしゃる通り、76~79行目の値を用いたinit()を行おうとしております。

それで解決したのか否かを明確にしていただきたい.

Name: syokkupan
[URL]
ぴよぴよ(991 ポイント)
Date: 2017年1月16日(月) 14:10
No: 8
(OFFLINE)

 Re: opencv3.1によるtracking

>それで解決したのか否かを明確にしていただきたい.

まだ解決していません。


Return to C言語何でも質問掲示板

オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[9人]