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

Выделение контуров объекта, который задержался в кадре на 10 секунд - C++

Восстановить пароль Регистрация
 
denistrannik
0 / 0 / 0
Регистрация: 28.04.2013
Сообщений: 25
05.11.2015, 10:21     Выделение контуров объекта, который задержался в кадре на 10 секунд #1
здравствуйте!я устал шарить по интернету, посмотрел, тут вроде всем помогают очень хорошо! вообщем есть код! запускаем, жмём на энтер для того чтобы запомнился фон! потом инородные объекты программа выделяет синим цветом! вообщем любые изменения по сравнению с фоном программа показывает синим цветом!и вот мне нужно чтобы предмет который задержался в кадре на 10 секунд к примеру выделять контуром(прямоугольником). ну и дальше думаю сделать чтобы сохранялся кадр в папку с подписью.
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
#include <iostream>
#include <opencv\cv.h>
#include <opencv\highgui.h>
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char** argv)
{
    //Необходимо подключить камеру
CvCapture* capture = 0;
capture = cvCaptureFromCAM(0);
if (!capture) return 1;
cvNamedWindow( "Motion", 1 );
IplImage* image;
CvScalar color;
CvPoint cv1;
CvFont font;
cvInitFont( &font, CV_FONT_HERSHEY_SIMPLEX, 1.3f,1.3f,0,1, 8 );
cv1.x=70; cv1.y=120;
color = CV_RGB(24,0,24);
int i,j;
for(;;)
{
IplImage* image1;
if( !cvGrabFrame( capture ))
break;
image1 = cvRetrieveFrame( capture );
 
cvPutText( image1, "Press, when you ready", cv1, &font, color );
 
cvShowImage( "Motion", image1);
if( cvWaitKey(10) >= 0 ) break;
}
 
//обучаем фон
image = cvRetrieveFrame( capture );
cvShowImage( "Motion", image);
 
 
//Теперь надо посчитать m для каждых
float *m=new float[image->height*image->width*3];
int j1;
uchar* ptr;
for(i=0;i<image->height;i++)
{
    for(j=0;j<image->width;j++)
    {
        for(j1=0;j1<3;j1++)
        {
            m[(i*image->width+j)*3+j1]=0;                
            ptr = (uchar*) (image->imageData);
            m[(i*image->width+j)*3+j1]+=ptr[j*3+i*image->widthStep+j1];                
            m[(i*image->width+j)*3+j1]=m[(i*image->width+j)*3+j1]/1;
        }
    }
}
//Раз запомнили - можно входить в цикл обработки изображений
float porog=60.0;
float k=0;
for(;;)
 {
    IplImage* image1;
    if( !cvGrabFrame( capture ))
    break;
    image1 = cvRetrieveFrame( capture );
    ptr = (uchar*) (image1->imageData);
    for(i=0;i<image->height;i++)
    {
        for(j=0;j<image->width;j++)
        {
            k=0;
                for(j1=0;j1<3;j1++)
                k+=abs(m[(i*image1->width+j)*3+j1]-ptr[j*3+i*image1->widthStep+j1]);
            if (k>=porog)
            {
                for(j1=0;j1<3;j1++)
                {
                    if (j1==0) ptr[j*3+i*image1->widthStep+j1]=255;
                    else ptr[j*3+i*image1->widthStep+j1]=100;
                }
            }
        }
    }
    cvShowImage( "Motion", image1);
    if( cvWaitKey(10) >= 0 ) break;
 }
//Удаляем все
cvReleaseCapture( &capture );
cvDestroyWindow( "Motion" );
delete m;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.11.2015, 10:21     Выделение контуров объекта, который задержался в кадре на 10 секунд
Посмотрите здесь:

Определение объекта, который вызвает конструктор. C++
динамическое выделение памяти для объекта класса C++
Как выглядит изнутри динамическое выделение объекта через new? C++
C++ В этой программе создается "матрица" из секунд.Как мне первый ряд чисел (секунд) присвоить масиву?
C++ как создать копию объекта, на который ссылается итератор?
Как изменить тип объекта, на который указывает указатель? C++
C++ Зачем нужен конструктор объекта ostringstream (строковый поток который) с двумя аргументами?
В какой момент вызывается конструктор для глобального объекта, использующего статическое выделение памяти? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 06:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru