首页 > 解决方案 > 在 Python 中检测星星

问题描述

前段时间,我编写了一个 Python 脚本来使用 OpenCV 在给定坐标上检测图像中的星星。不幸的是,OpenCV 并没有像我需要的那样识别它。
我现在制作了一个函数,它试图通过对最亮像素的螺旋搜索来找到恒星的中心。通过另一个螺旋搜索,我想将每个像素着色为更大的定义值,使其变为纯白色。到目前为止,这有效。
问题是我需要使用相当大的搜索区域,因为星星的直径差异很大。我得到以下结果。现在,当从图像中读取像素值 < 1 时,我会中断循环。由于螺旋搜索是方形的,而星星是椭圆的,这并没有真正起作用,我从星星上切下了部分。
有什么方法可以检测到值 < 1 的更大间隙,比如在星星周围出现 1 轮黑色像素,然后打破循环?由于起始坐标在中心不是 100%,而且星的大小因星而异,因此在 x 黑色像素后中断是不可能的,不幸的是。

这是一个结果

中间的星是感兴趣的星。

我正在这个脚本中使用 PIL 完成所有图像工作

    for i in range(max(X, Y) ** 2):
    if (-X / 2 < x <= X / 2) and (-Y / 2 < y <= Y / 2):
        current_X = source_X + x
        current_Y = source_Y + y
        pixel_value = starfiel_gray.getpixel((current_X, current_Y))
        print(current_X, current_Y, pixel_value)
        if pixel_value > background_threshold:
            starmask.putpixel((current_X, current_Y), 255)
    if x == y or (x < 0 and x == -y) or (x > 0 and x == 1 - y):
        dx, dy = -dy, dx
    x, y = x + dx, y + dy



谢谢你的建议:-)

凯文

标签: pythonpython-imaging-library

解决方案


我找到了解决方案。
我将一轮的所有像素值相加,如果在新一轮之后总和没有改变(或低于设定的阈值),则循环将被中止。到目前为止似乎工作得很好。


推荐阅读