找到图像中的质心

时间:2018-02-20 15:06:17

标签: python image-processing scikit-image

我是我的形象: enter image description here

我想在这张照片中找到质心。我可以通过绘制两条垂直线找到质心的大致位置,如下图所示: enter image description here

我想在python中使用图像处理工具找到它。我在python(scikit-image)的图像处理库中有一些经验,但我不确定这个库是否有助于在我的图像中找到质心。 我想知道是否有人可以帮助我这样做。如果可以使用python中的任何其他库在我的图像中找到质心,我将很高兴。 在此先感谢您的帮助!

3 个答案:

答案 0 :(得分:5)

skimage.measure.regionprops会做你想要的。这是一个例子:

_gitlab-pages-verification-code.blog.ollyfg.com

在我的计算机上,使用示例图片,我得到import imageio as iio from skimage import filters from skimage.color import rgb2gray # only needed for incorrectly saved images from skimage.measure import regionprops image = rgb2gray(iio.imread('eyeball.png')) threshold_value = filters.threshold_otsu(image) labeled_foreground = (image > threshold_value).astype(int) properties = regionprops(labeled_foreground, image) center_of_mass = properties[0].centroid weighted_center_of_mass = properties[0].weighted_centroid print(center_of_mass)

我们可以拍出漂亮的照片:

(228.48663375508113, 200.85290046969845)

这给了我这个输出:

eye center of mass

你会注意到那里有一些你可能不想要的前景,比如图片的右下角。这是一个完整的答案,但您可以查看import matplotlib.pyplot as plt from skimage.color import label2rgb colorized = label2rgb(labeled_foreground, image, colors=['black', 'red'], alpha=0.1) fig, ax = plt.subplots() ax.imshow(colorized) # Note the inverted coordinates because plt uses (x, y) while NumPy uses (row, column) ax.scatter(center_of_mass[1], center_of_mass[0], s=160, c='C0', marker='+') plt.show() scipy.ndimage.label,更常见的是skimage.morphology.remove_small_objects

答案 1 :(得分:1)

您需要了解 Image Moments

Here有一个关于如何在opencv和python中使用它的教程

答案 2 :(得分:0)

您可以使用此方法在python3中找到重心

import matplotlib.image as mpimg 

import scipy.ndimage as ndi 

img = mpimg.imread('image.jpg')

cy, cx = ndi.center_of_mass(img)

print(cy,cx)