Перейти к содержимому
Compvision.ru
destrannik

выделение объекта на видео

Recommended Posts

здравствуйте!я устал шарить по интернету, посмотрел, тут вроде всем помогают очень хорошо! вообщем есть код! запускаем, жмём на энтер для того чтобы запомнился фон! потом инородные объекты программа выделяет синим цветом! вообщем любые изменения по сравнению с фоном программа показывает синим цветом!и вот мне нужно чтобы предмет который задержался в кадре на 10 секунд к примеру выделять контуром(прямоугольником). ну и дальше думаю сделать чтобы сохранялся кадр в папку с подписью.

#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;
}

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

и вот мне нужно чтобы предмет который задержался в кадре на 10 секунд к примеру выделять контуром(прямоугольником). любая инфа будет полезной!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Посмотрите библиотеку BGSlibrary : https://www.behance.net/gallery/3943089/BGS-Library-A-Background-Subtraction-Library

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Посмотрите библиотеку BGSlibrary : https://www.behance.net/gallery/3943089/BGS-Library-A-Background-Subtraction-Library

Как вариант чего-нибудь менее увесистого, моя имплементация вайба: https://github.com/BelBES/VIBE 

Работает шустро (правда без каких либо софтварных оптимизаций) и на сценах с искуственным освещением, скорей всего, качества будет достаточно.

 

и вот мне нужно чтобы предмет который задержался в кадре на 10 секунд к примеру выделять контуром(прямоугольником). любая инфа будет полезной!

Ну так в чем конкретно у вас трудности при обобщении имеющегося кода на озвученный в ТЗ случай?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×