python - 西门子之星寻找中心

标签 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..

最佳答案

这是我最后做的。它不是非常健壮,但现在可能已经足够好了。只需对列和行求和即可得出峰值或谷值 - 在某个猜测位置附近找到最大值或最小值即可得出中心。

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

enter image description here

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

关于python - 西门子之星寻找中心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37742508/

相关文章:

python - BeautifulSoup 提取不带标签的条纹文本

python - 如何从 Github 工作流程访问环境 secret ?

python-具有阶跃响应的卷积

c - 如何分析/识别紧密处理循环中的缓慢步骤?

opencv - opencv cv::mat没有返回相同的结果

opencv - 用R和t计算新的PixelCoordinates点

python - Python中数据库数据的数组

python - MultiIndex 的 Pandas 元组列表

c++ - 使用 OpenCV 设置 QuickCam Pro 3000 的帧大小?

c++ - OpenCV 错误 : Null pointer (NULL array pointer is passed) in cvGetMat