Openframeworks Color Tracking

Я работаю с 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);

1 ответ

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

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

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

Другие вопросы по тегам