寻找西门子明星

时间:2016-06-10 07:35:49

标签: python opencv

我必须找到Siemens star的中心。 (西门子星是用于相机校准的标准图像。)

人类很容易,但我无法弄清楚使用哪种(最好是OpenCV)方法。我正在使用Python。

enter image description here

我尝试过使用边缘检测,我想我可以得到边缘轮廓,然后制作一些线的方程,然后看看那些线相交的位置。但是我得到了一些凌乱的线条,边缘有杂乱,轮廓都是不相交的(或许我不理解它们......)。以下是此代码中的轮廓:

from OpenCVX import cvx2

filepath = 'img.jpg'
img = cvx2.imread(filepath, 0)

ret, thresh = cvx2.threshold(img, 127, 255, 0)
im2, contours, hierarchy = cvx2.findContours(thresh, cvx2.RETR_TREE, cvx2.CHAIN_APPROX_SIMPLE)
cvx2.drawContours(img, contours, -1, (255,255,255), 3)

plt.imshow(img)
plt.show()

enter image description here

无论如何,有什么技巧可以解决这样的问题吗?假设我是n00b ..

1 个答案:

答案 0 :(得分:0)

这是我最终做的事情。它不是非常强大,但它现在可能已经足够好了。只需取一个列和行的总和就可以得到一个峰值或一个倾斜度 - 找到一个猜测位置附近的最大值或最小值给出中心。

sum_cols, sum_rows = np.sum(img, axis=0), np.sum(img, axis=1)

enter image description here

不幸的是,有些少数情况下这种情况不起作用。当恒星旋转时,中心的最小值或最大值从最小值到最大值翻转。在该翻转的中间,对于图像的猜测​​中心周围的某个有限距离,它既不是最小值也不是最大值。如果您有任何建议,请随时提供更好的建议......