我正在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);
我在這裏沒有看到問題。您應該更具體地瞭解您期望代碼執行的內容,以及爲什麼它沒有達到您的期望。 – Aurelius
我正在嘗試創建一條線,該線將跟蹤正在跟蹤的顏色。我的代碼是一條直線,它將遵循所選的顏色,所以我很難正確地存儲斑點位置,以便代替直線,可以有一條曲線。希望這更清楚。 –
你可以顯示你的整個draw()方法嗎?它可能就像每幀不清除畫布一樣簡單......? –