Отслеживание цвета Openframeworks

Я работаю с OpenCV в Openframeworks, чтобы отслеживать определенный цвет. Мой вопрос может показаться сложным, если вы не знакомы с кодом отслеживания цвета, но я постараюсь объяснить как можно лучше.

Теперь код следует за определенным цветом с красным кругом, и я работаю над созданием линии, которая делает в основном то же самое, но каждая точка будет сохранена, чтобы было создано приложение для рисования волнистого типа. Прямо сейчас это прямая линия, которую вы можете тянуть.

Я опубликую больше кода, если это необходимо. Любой совет действительно поможет. Спасибо!

tespApp.cpp

void testApp::draw(){

ofSetColor(255,255,255);
//draw coloured cv image
rgb.draw(0,0);
contours.draw(0,480);

// draw line that follows the blobs

    for (int i=0; i<contours.nBlobs; i++) {
        ofSetColor(0);
       ofLine( contours.blobs[i].pos.x, contours.blobs[i].pos.y, contours.blobs[i].lastpos.x, contours.blobs[i].lastpos.y );

   }


}

ofxCvContourFinder.cpp


for( int i = 0; i < MIN(nConsidered, (int)cvSeqBlobs.size()); i++ ) {
    blobs.push_back( ofxCvBlob() );
    float area = cvContourArea( cvSeqBlobs[i], CV_WHOLE_SEQ, bFindHoles ); // oriented=true for holes
    CvRect rect = cvBoundingRect( cvSeqBlobs[i], 0 );
    cvMoments( cvSeqBlobs[i], myMoments );

    blobs[i].area                     = bFindHoles ? fabs(area) : area; // only return positive areas
    blobs[i].length                   = cvArcLength(cvSeqBlobs[i]);
    blobs[i].boundingRect.x           = rect.x;
    blobs[i].boundingRect.y           = rect.y;
    blobs[i].boundingRect.width       = rect.width;
    blobs[i].boundingRect.height      = rect.height;
    blobs[i].centroid.x               = (myMoments->m10 / myMoments->m00);
    blobs[i].centroid.y               = (myMoments->m01 / myMoments->m00);
             blobs[i].pos.x                    =0;
             blobs[i].pos.y                    =0;
             blobs[i].lastpos.x                = blobs[i].pos.x;
             blobs[i].lastpos.y                = blobs[i].pos.y;
             blobs[i].pos.x                    =(myMoments->m10 / myMoments->m00);
             blobs[i].pos.y                    = (myMoments ->m01 / myMoments->m00);

person Andrea F    schedule 03.07.2013    source источник
comment
Я не вижу здесь вопроса. Вы должны быть более конкретными в отношении того, что именно вы ожидаете от кода, и почему он не делает то, что вы ожидаете.   -  person Aurelius    schedule 03.07.2013
comment
Я пытаюсь создать линию, которая будет следовать отслеживаемому цвету. Мой код представляет собой прямую линию, которая будет следовать выбранному цвету, поэтому мне трудно правильно хранить позиции BLOB-объектов, чтобы вместо прямой линии у вас была линия, которая может изгибаться. Надеюсь, так понятнее.   -  person Andrea F    schedule 03.07.2013
comment
Можете ли вы показать весь метод draw()? Это может быть так же просто, как не очищать холст в каждом кадре...?   -  person jesses.co.tt    schedule 03.07.2013
comment
Я отредактирую свой код. Я не назвал четкий метод, поэтому я попробую.   -  person Andrea F    schedule 04.07.2013
comment
Я могу вызвать контуры.reset(), который очищает капли, но затем линия продолжает исчезать и снова появляться   -  person Andrea F    schedule 04.07.2013


Ответы (1)


Полный пример того, чего вы пытаетесь достичь, можно найти здесь:

https://github.com/kylemcdonald/ofxCv/tree/master/example-contours-color

Он использует ofxCv, надстройку, которая позволяет вам легко интегрировать openframeworks с openCv. Более того, вы можете использовать собственные вызовы OpenCV без необходимости использования какой-либо оболочки. В Интернете полно подобных примеров, в которых используется чистый код OpenCV, и с помощью этих дополнений вы можете использовать эти фрагменты как есть, без каких-либо проблем, и это дает простой способ перейти от структур данных OpenCV к структурам данных Openframeworks и наоборот. . Это здорово!

person nkint    schedule 21.03.2014