因此,我正在尝试在下一帧中使用OpenCV查找白色群集的中心:

*使用OpenCV imshow()制作的屏幕截图*

我已经尝试过HoughGradient函数,但是结果不一致,因为这些簇在所有帧中都不都是圆形。 还有其他建议吗?

===============>>#1 票数:1 已采纳

我认为您有两种选择。

  1. 使用连接的组件查找斑点,因为您知道它们是圆形的,所以需要对其中心进行一些估计。 OpenCV文档上的drawcontours函数提供了一个很好的示例,说明了如何使用轮廓查找连接的组件: http : //docs.opencv.org/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html#drawcontours

  2. 如果您知道斑点为白色/白色,则可以找到颜色接近白色/白色的所有像素的索引,然后将每组索引手动重建为连接的组件。

(可能相关的文章: OpenCV对象检测-中心点

===============>>#2 票数:0

正如@berak所指出的,您可以使用矩来查找斑点的质心

#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

using namespace cv;

Point getCentroid( InputArray Points )
{
    Point Coord;
    Moments mm = moments( Points, false );
    double moment10 = mm.m10;
    double moment01 = mm.m01;
    double moment00 = mm.m00;
    Coord.x = int(moment10 / moment00);
    Coord.y = int(moment01 / moment00);
    return Coord;
}

int main( int argc, char* argv[] )
{
    Mat src = imread( argv[1] );

    Mat gray;
    cvtColor( src, gray, CV_BGR2GRAY );
    gray = gray > 127;

    Mat nonzeropixels;
    findNonZero( gray, nonzeropixels );

    Point pt = getCentroid( nonzeropixels );
    rectangle(src, pt,pt, Scalar(0, 255, 0), 2);

    imshow("result",src);
    waitKey();

    return 0;
}

测试图像和结果:(绿点是白色斑点的质心)

在此处输入图片说明 在此处输入图片说明

在此处输入图片说明 在此处输入图片说明

  ask by Jasper Weyne translate from so

未解决问题?本站智能推荐: