代码github.com
,
中学时,我们学习了几何中的各种形状。比较容易找到圆形、正方形、三角形、椭圆形等标准形状的圆心。
但是当要找到任意形状的质心时,方法就不那么简单了。
当你在计算机视觉中工作时,寻找质心的问题也很重要——除了,你要处理的是像素而不是原子!在这篇文章中,我们将首先讨论如何找到一个任意形状的blob的中心,然后再讨论多个blob的情况。
What is a blob?
blob是图像中一组相互连接的像素,它们具有一些共同的属性(例如,灰度值)。在这篇文章中,我们的目标是使用c++中的OpenCV找到binary blob的中心。如果我们感兴趣的形状不是binary的,我们必须先将其binary。
形状的质心是什么?
形状的质心是形状中所有点的算术平均值(即平均值)。假设一个形状由n个不同的点组成,x1…x_n,则形心由
在图像处理和计算机视觉的背景下,每个形状都是由像素构成的,而形心则是构成形状的所有像素的加权平均值。
Image Moments
我们可以在OpenCV中使用矩来找到blob的中心。但首先,我们应该知道图像时刻到底是什么。图像矩是图像像素强度的一种特殊的加权平均值,它可以帮助我们发现图像的一些特定性质,如半径、面积、质心等。为了找到图像的质心,我们通常把它转换成二进制格式,然后找到它的中心。
质心由公式给出: