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

Motion Detector (OpenCV) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Задача обедающих философов при помощи событий (events) http://www.cyberforum.ru/cpp/thread370605.html
Здравствуйте. Очень нужна помощь с сабжем. Самостоятельно ничего не вышло - не пойму как это вообще выглядеть должно. Посему, кому не трудно, поделитесь кодом. Добавлено через 23 часа 43 минуты Ну пожалуйста :( Добавлено через 6 часов 36 минут Попытался реализовать так, как понимаю. Ошибок нет, но работает как-то... не так. Помогите исправить недокод, пожалуйста. #include "stdafx.h"
C++ Получить сигнал с СОМ-порта Здравствуйте.Собсно поставлена такая задача - получить по COM-порту код,преобразовать в число и вывести на экран.Тоесть например идет набор единичек "1111" - получаем ,выводим "15".Препод усиленно молчит по поводу что это за зверь-устройство.Задача получить число и вывести.Может кто имеет источники где можна про это почитить или какие разработки уже имеет? http://www.cyberforum.ru/cpp/thread369103.html
Помогите решить ошибку C++
#include <iostream.h> #include <math.h> #include <windows.h> char buf ; char *rus(char *s) {CharToOem(s,buf); return buf;} void main () { cout << ( " programma dl9 vi4esleni9 sostavnoe fynkcii " ) << endl; double s,x,fx,b,e,r; char q;
C++ помогите взломать гиппертест
вот этот гиппертест.срочно нужно.
C++ вопрос по libssh http://www.cyberforum.ru/cpp/thread367636.html
Подскажите пажалста, если кто сталкивался с библиотекой libssh. Допустим через эту либину я пересылаю архив на некое устройство линуксовое. Запускаю разархивирование. теперь вопрос: как я могу прочитать поток хода распаковки? т.е. посмотреть, какой файл вытаскивается из архива в данный момент времени!
C++ Помогите с задачей плиз очень нужно...Дана последовательность из n целых элемнтов. Удалить из нее первое и последнее вхождение минимального элемента, затем отсортировать ее по убыванию. Вывести на экран последовательность до удаления, после удаления и после сортировки. на языке С надо...сортировку желательно отдельной функцией...заранее спасибо подробнее

Показать сообщение отдельно
Drony
1 / 1 / 0
Регистрация: 22.10.2011
Сообщений: 18

Motion Detector (OpenCV) - C++

22.10.2011, 15:30. Просмотров 4391. Ответов 4
Метки (Все метки)

Всем привет! =)
Только начал разбираться с OpenCV. Хочу попробовать камеру распознавать движение. Детектор движения должен реализоваться на C++ при помощи библиотеки OpenCV.
Но возникла одна проблемка. Вот, собственно код:
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
#include "v_motion_detector.h"
 
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/video/tracking.hpp>
 
const double VMotionDetector::MOTION_THRESHOLD = 10;
const double VMotionDetector::MIN_CONTOUR_AREA = 150;
 
VMotionDetector::VMotionDetector( const cv::Size& imageSize, double cycleTime) :
        m_previousImage( cv::Mat::zeros( imageSize, CV_8UC1 ) ),
        m_motionHistoryImage( imageSize, CV_32FC1 ),
        m_openingKernel( 5, 5, CV_8UC1 ),
        m_segmask( imageSize, CV_32FC1 ),
        m_maxMotionGradient( 1.5 * cycleTime ),
        m_motionHistoryDuration( 7 * cycleTime )
{
}
 
void VMotionDetector::detectMovingRegions( const cv::Mat& currentFrame, double timestamp,
                                           std::vector<cv::Rect>& targets , cv::Mat& mask )
{
 //Сглаживаем текущий кадр (currentFrame) фильтром Гаусса, чтобы избавиться от шумов.
 
    cv::GaussianBlur( currentFrame, m_bluredImage, cv::Size( 3, 3 ), -1 );
 
//Из сглаженного текущего кадра (m_bluredImage ) вычитаем предыдущий (m_previousImage).
//Если искомые изображения были в градациях серого, то и значения пикселей
//в разности (mask) будут изменяться от нуля до 255(при восьми битной глубине цвета).
 
    cv::absdiff( m_bluredImage, m_previousImage, mask );
 
//Сравниваем значения полученной разности с некоторым пороговым
//значением (MOTION_THRESHOLD). Если значение пикселя больше порогового,
//то этот пиксель принадлежит движущемуся объекту, иначе отбрасываем его.
//Теперь мы получили бинарное изображение (mask), где ноль означает, что 
//пиксель не движется, отличное от нуля значение – пиксель движется.
 
    cv::threshold( mask, mask,  MOTION_THRESHOLD, 255, cv::THRESH_BINARY );
 
//Применяем морфологические операции закрытия и открытия,
//чтобы избавиться от движущихся регионов малого размера (шумы камеры).
//Полученное изображение (mask) и есть движущийся контур.
 
    cv::morphologyEx( mask, mask, cv::MORPH_CLOSE, cv::Mat() );
    cv::morphologyEx( mask, mask, cv::MORPH_OPEN, m_openingKernel,
                      cv::Point( -1, -1 ), 1, cv::BORDER_CONSTANT, cv::Scalar( 0 ) );
 
//Наносим бинарное изображение на так называемое изображение истории движения
//(motionHistoryImage). На нём нарисованы движущиеся контуры за последние, например,
//200 мс (m_motionHistoryDuration). Контуры были получены через постоянные промежутки
//времени. Интенсивность пикселей контура обратно пропорциональна времени, которое
//прошло от измерения контура до данного момента. Т.е. чем раньше был получен
//движущийся контур, тем он бледнее изображён на изображение истории движения.
        
    cv::updateMotionHistory( mask, m_motionHistoryImage, timestamp, m_motionHistoryDuration );
 
//Выделяем регионы (targets) с различными движениями на изображение истории движения.  
 
    cv::segmentMotion(m_motionHistoryImage, m_segmask, targets, timestamp, m_maxMotionGradient);
        
//Отбрасываем все регионы, площадь которых меньше некоторого значения (MIN_CONTOUR_AREA).
 
        std::vector<cv::Rect>::const_iterator it = targets.begin();
        
        for(it = targets.begin(); it != targets.end(); ++it) {
                if(cv::countNonZero(mask(*it)) < MIN_CONTOUR_AREA) 
                        targets.erase(it);
        }
//Сохраняем сглаженный текущий кадр как предыдущий кадр.
    m_bluredImage.copyTo( m_previousImage );
}
На этапе выполнения возникает ошибка:
"Expression: vector iterator not dereferencable."
Облазил весь интеренет, ничего не нашёл. Одна надежда на вас)) Помогите, пожалуйста!!!!!
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru