python - 在 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
谢谢你的建议:-)
凯文
解决方案
我找到了解决方案。
我将一轮的所有像素值相加,如果在新一轮之后总和没有改变(或低于设定的阈值),则循环将被中止。到目前为止似乎工作得很好。
推荐阅读
- javascript - 通过 json 解析并在 gadget.io.makeRequest 上获取特定元素
- python - 如何在另一个函数上使用错误处理函数?
- python - 没有名为“psutil”的模块
- c# - Datagrid 填充 MySQL 数据操作数据
- binary - 如何计算给定 n 位的多余 N 的范围?
- loops - Rust:迭代 iter() 或向量本身
- vue.js - Webpack 在 head 标签而不是 body 标签中注入 bundle
- kdb - kdb - kdb 服务器和上下文管理上的持久化功能
- python - 检查列表中是否出现多个 SUBstring,而不显式定义子字符串
- android - android.database.sqlite.SQLiteException:不是错误(代码 0 SQLITE_OK)