我必须找到 Siemens star 的中心. (西门子星是相机校准中使用的标准图像。)
对于人类来说非常容易,但我无法弄清楚要使用哪种(最好是 OpenCV)方法。我正在使用 Python。
我试过使用边缘检测,我想我可以得到边缘轮廓,然后制作一些直线方程,然后查看这些直线相交的位置。但是我得到一些凌乱的线条,边缘凌乱,轮廓都是不相交的(或者我不理解它们......)。以下是使用此代码找到的轮廓:
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()
不管怎样,有什么技巧可以解决这样的问题吗?假设我是 n00b..
最佳答案
这是我最后做的。它不是非常健壮,但现在可能已经足够好了。只需对列和行求和即可得出峰值或谷值 - 在某个猜测位置附近找到最大值或最小值即可得出中心。
sum_cols, sum_rows = np.sum(img, axis=0), np.sum(img, axis=1)
不幸的是,在少数情况下这不起作用。随着恒星的旋转,中心的最小值或最大值从最小值疯狂地翻转到最大值。在那个翻转的中间,它既不是最小值也不是最大值,围绕猜测的图像中心的某个有限距离。如果您有任何更好的建议,请随时提供...
关于python - 西门子之星寻找中心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37742508/