Openframeworks 颜色跟踪

Posted

技术标签:

【中文标题】Openframeworks 颜色跟踪【英文标题】:Openframeworks Colour Tracking 【发布时间】:2013-07-03 12:00:26 【问题描述】:

我正在 Openframeworks 中使用 OpenCV 来跟踪某种颜色。如果您不熟悉颜色跟踪代码,我的问题可能很困难,但我会尽力解释。

现在代码所做的是遵循带有红色圆圈的某种颜色,我正在努力创建一条线,它基本上做同样的事情,但每个点都将被存储,以便创建一个波浪型的绘图应用程序。现在是一条可以拉的直线。

如有必要,我会发布更多代码。任何建议都会有帮助。谢谢!

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);

【问题讨论】:

我在这里没有看到问题。您应该更具体地说明您希望代码做什么,以及为什么它没有按照您的预期进行。 我正在尝试创建一条将遵循正在跟踪的颜色的线。我的代码是一条直线,将遵循所选颜色,因此我很难正确存储 blob 位置,因此您有一个可以弯曲的而不是直线。希望这更清楚。 你能展示你的整个 draw() 方法吗?它可能就像不清除每一帧的画布一样简单......? 我将编辑我的代码。我还没有调用明确的方法,所以我会尝试。 我可以调用 contours.reset() 来清除斑点,但随后线条不断消失并重新出现 【参考方案1】:

可以在此处找到您想要实现的目标的完整示例:

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

它使用 ofxCv,一个让你以干净的方式将 openframeworks 与 openCv 集成的附加组件。此外,您可以使用本机 OpenCV 调用,而无需任何类型的包装器。互联网上到处都是使用纯 OpenCV 代码的类似示例,通过这个附加组件,您可以按原样使用这些 sn-ps,没有任何问题,它提供了一些从 OpenCV 数据结构到 Openframeworks 数据结构的简单方法,反之亦然-反之亦然。太棒了!

【讨论】:

以上是关于Openframeworks 颜色跟踪的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 openFrameworks 开发音乐可视化工具

OpenFrameWorks 第一章

在 VS2015 中使用 openFrameworks 进行 dlib 模板

Openframeworks,从两个视频采集器创建视频纹理

openFrameworks / freeimage.a 导致 ios arm 64 出错

markdown openFrameworks中的HAP链接器错误