Форум программистов, компьютерный форум CyberForum.ru

Не получается сохранить найденные координаты центров для дальнейшего оперирования ими - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Установка l символов строке s, начиная с позиции n, в значение t http://www.cyberforum.ru/cpp-beginners/thread1167683.html
Функція StrSet(s,n,l,t) Призначення: установлення l символів рядку s, починаючи с позиції n, в значение t. Розробити два варіанти заданої функції з використанням: а) індексованих масивів; б) вказівників. Спасибо Функция StrSet (s, n, l, t) Назначение: установка l символов строке s, начиная с позиции n, в значение t.
C++ Что изучать после освоения основ? Освоил основы С++, с трудом прорываю Win API по Петзольду, так же имею в запасе знания ассемблера. Что делать дальше? Что изучать, какие библиотеки? Вот если я хочу написать приложение для работы с сетью, что мне надо знать? Для начала саму сеть изучить(протоколы, принцип работы и т.д.), а потом работать с ней, или как я не пойму? Дайте дельный совет. http://www.cyberforum.ru/cpp-beginners/thread1167681.html
При заполнении матрицы _ и * появляются странные символы C++
Начал писать жизнь и наткнулся на такую проблему: при заполнении матрицы символьными элементами в ней появляются какие-то другие символы( типа b или ' ) на рандомных позициях. Можете пожалуйста подсказать выход из этой ситуации!? Вот код: #include <iostream> #include <stdlib.h> #include <stdio.h> using namespace std; const int kmax=20,mmax=20; using namespace std;
C++ Удаление комментариев из текста программы с использованием STL, ошибка при выполнении
Здравствуйте решал задачу с использованием STL из книги Страуструпа 6.22 возникла проблема программа вылетает, помогите пожалуйста разобраться в чем проблема. #include <iostream> #include <fstream> #include <string> #include <algorithm> using namespace std; int main(int argc, char **argv)//удаление коментариев из текста программы { if(argc < 3)
C++ Ввод данных в string, очистка потока ввода http://www.cyberforum.ru/cpp-beginners/thread1167653.html
Дана программа #include "stdio.h" #include "stdlib.h" #include "string.h" #include "conio.h" #include "iostream" #include "windows.h" #include <string> using namespace std;
C++ Перевести число в двоичную систему счисления Дано число N ({2}^{-31}\leq N \leq 0). Как перевести в двоичную систему счисления? подробнее

Показать сообщение отдельно
Дмитрий84
1 / 1 / 0
Регистрация: 30.04.2014
Сообщений: 19
06.05.2014, 05:50  [ТС]     Не получается сохранить найденные координаты центров для дальнейшего оперирования ими
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
#include "stdafx.h"
#include <opencv2/contrib/contrib.hpp>
#include <opencv2/contrib/detection_based_tracker.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
#include <opencv2/core/core.hpp>
#include <fstream>
#include <ctime>
#include <time.h>
#include "opencv2/video/tracking.hpp"
 
 
using namespace cv;
using namespace std;
 
#define MAX(a,B) ((a<B) ? b : a);
#define MIN(a,B) ((a<B) ? a : B);
 
 
String cascade_name = "D:/qwerty/wer/haarcascade/cascade.xml";
String window_name = "tracing face";
CascadeClassifier cascade;
int a=0;
Point pt1 = (20,360);
Point pt2 = (700,360);
 
 
 
 
 
 
void detectAndDisplay( Mat frame )
{
  vector<Rect> faces;
  Mat frame_gray;
  cv::Rect_<int> face_i;
 
  cvtColor( frame, frame_gray, CV_BGR2GRAY );
  equalizeHist( frame_gray, frame_gray );
 
  //-- Detect faces
 
  time_t t;
    tm *tk;
    
    time(&t);
    tk=localtime(&t);
 
    
  cascade.detectMultiScale( frame_gray, faces, 1.1, 9, 2|8, Size(70, 70) );
  //string str = String.Format("{0}:{1:D2}:{2:D2}", tk->tm_hour,tk->tm_min, tk->tm_sec);
 
 //cout << tk->tm_hour << tk->tm_min << tk->tm_sec << endl;
 
 
    //Create a font object.
    CvFont font;
 
    string box_text1 = format(" %d ",a);
    //Write the number of people counted at the top of the output frame.
    cvInitFont(&font, CV_FONT_HERSHEY_SIMPLEX, 0.8, 0.8, 0, 2);
    putText(frame, box_text1, cvPoint(60, 200), FONT_HERSHEY_SIMPLEX, 1.0, CV_RGB(0,255,0),2.0);
    
    string box_text2 = format("  %d:%d:%d ", tk->tm_hour , tk->tm_min , tk->tm_sec);
    //Write the number of people counted at the top of the output frame.
    cvInitFont(&font, CV_FONT_HERSHEY_SIMPLEX, 0.8, 0.8, 0, 2);
    putText(frame, box_text2, cvPoint(20, 30), FONT_HERSHEY_SIMPLEX, 1.0, CV_RGB(0,255,0),2.0);
 
    line(frame, cvPoint (0,360), cvPoint(1320,360),CV_RGB(250,0,0),1,8,0);
  
   
     
 
  for(int i = 0; i < faces.size(); i++ )
        {
            Point center( faces[i].x + faces[i].width/2, faces[i].y + faces[i].height/2 );
                    face_i = faces[i];
                        
                    
                    // Make a rectangle around the detected object
                        rectangle(frame, face_i, CV_RGB(0, 255,0), 3);
        int x0;int y0;int x1;   
        x1=x0;
 
        y0= center.y ;
        x0 = y0;
        /*for(int n=1;n<j;++n)
        {koordy[n]=center.y; n++;
 
    x1=abs(koordy[n]-koordy[n-1]);
if (x1<=350 && x1>1200) a=a; else a++;*/
                    
        
             
                        ellipse( frame, center, Size( faces[i].width/faces[i].width, faces[i].height/faces[i].height), 0, 0, 360, Scalar( 255, 0, 255 ), 2, 8, 0 );
           printf ("vremy poiska= %d:%d:%d\n", tk->tm_hour , tk->tm_min , tk->tm_sec);
                 
        double t = (double)getTickCount();  
            
 
 
 printf_s ("razmer=%d \n",x1);
printf_s ("razmer1=%d \n",y0);
        string box_text = format("PC 400 : %d\n",a);
            // And now put it into the image:
           printf ("q= %d,%d \n",center);
            putText(frame, box_text,center, FONT_HERSHEY_SIMPLEX, 1.0, CV_RGB(0,255,0), 2.0);
            
 
            printf ("a=%d \n",a);
          }
 
 
  //-- Show what you got
  imshow( window_name, frame);
 }
 
 
 
 
CvCapture *capture;
 
int main(int argc, char **argv)
{    // имя файла задается 1 параметром или “test.avi” по умолчанию
    const char *filename = argc == 2 ? argv[1]:"http://root:root@192.168.28.80/mjpg/1/video.mjpg";
    
    // создание окна
    //cvNamedWindow("Video Tracking", CV_WINDOW_AUTOSIZE);
    
    
    capture = cvCreateFileCapture(filename);
    
    
 
    cascade.load(cascade_name);
 
     
 
    while(1)
    {
        // получаем следующий кадр
        IplImage *frame = cvQueryFrame(capture);
        
            if (!frame)
            break;
 // показываем
         detectAndDisplay( frame );
 
  
       // показываем кадр
      // cvShowImage("Video Tracking",frame);
      char c = cvWaitKey(33); // выход при нажатии ESC
       if (c == 27)
           break;std::swap(prevgray, gray);
    }
    
    // освобождаем ресурсы
    cvReleaseCapture(&capture);
    cvDestroyWindow("Video Tracking");
    return 0;
}

Я знаю что очень много лишнего здесь но пока всё это в режиме отладки-подгонки-выбора методов, поэтому многое не удаляю а закоментирую.

Добавлено через 5 минут
Суть такая прога с IP-камеры берет поток и ищет объекты по заранее обученному каскаду. надо прикрутить счетчик прохода через линию. Пока прога может посчитать объекты в кадре но при 8к\сек она их считает очень много раз. хочу понять как мне сравнить центр текущий с предыдущим и ни чего не выходит.
 
Текущее время: 11:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru