[英]How to efficiently detect the center of clusters in an image with OpenCV
因此,我正在尝试在下一帧中使用OpenCV查找白色群集的中心:
我已经尝试过HoughGradient函数,但是结果不一致,因为这些簇在所有帧中都不都是圆形。 还有其他建议吗?
我认为您有两种选择。
使用连接的组件查找斑点,因为您知道它们是圆形的,所以需要对其中心进行一些估计。 OpenCV文档上的drawcontours
函数提供了一个很好的示例,说明了如何使用轮廓查找连接的组件: http : //docs.opencv.org/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html#drawcontours
如果您知道斑点为白色/白色,则可以找到颜色接近白色/白色的所有像素的索引,然后将每组索引手动重建为连接的组件。
(可能相关的文章: OpenCV对象检测-中心点 )
正如@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;
}
测试图像和结果:(绿点是白色斑点的质心)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.