2013-07-03 62 views
0

我正在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); 
+0

我在這裏沒有看到問題。您應該更具體地瞭解您期望代碼執行的內容,以及爲什麼它沒有達到您的期望。 – Aurelius

+0

我正在嘗試創建一條線,該線將跟蹤正在跟蹤的顏色。我的代碼是一條直線,它將遵循所選的顏色,所以我很難正確地存儲斑點位置,以便代替直線,可以有一條曲線。希望這更清楚。 –

+0

你可以顯示你的整個draw()方法嗎?它可能就像每幀不清除畫布一樣簡單......? –

回答

1

的你想達到什麼樣的一個完整的例子可以在這裏找到:

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

它採用ofxCv,一個插件,讓你以清晰的方式將openframework與openCv集成在一起。此外,您可以使用本機OpenCV調用,而不需要任何類型的包裝器。互聯網上充滿了類似的例子,使用純OpenCV代碼,通過這些附加功能,您可以直接使用這些代碼片段,而不會出現任何問題,並且它提供了一些從OpenCV數據結構到Openframeworks數據結構的簡單方法,反之亦然。太好了!