【发布时间】:2021-06-23 05:11:07
【问题描述】:
我正在使用带有 opencv 和 numpy 的 python 来检测天文中的星星,例如这个1 图像。使用模板匹配,我可以通过在星形模板周围绘制一个矩形来检测具有阈值的星形(单击 2)2。我的下一个目标是从根本上“去除”图像中的星星。
为此,我尝试使用不同的方法(例如 cv2.blur 等)对图像进行模糊处理,但它并没有产生我想要的效果。我的下一个想法是从星星周围的像素中获取 rgb 数据,将它们平均,然后用选定的颜色在星星上着色。这是最好的选择吗?我该怎么做?
我的代码如下。
import cv2
import numpy as np
import time
start = time.time()
threshold = 0.4
image = cv2.imread('lag.jpg')
imageG = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
#cv2.imshow('original', image)
#cv2.imshow('greyscale', imageG)
template = cv2.imread('template.jpg', 0)
w, h = template.shape[::-1]
res = cv2.matchTemplate(imageG,template,cv2.TM_CCOEFF_NORMED)
loc = np.where( res >= threshold)
for pt in zip(*loc[::-1]):
a = cv2.rectangle(image, pt, (pt[0] + w, pt[1] + h), (0,0,255), 1)
cv2.imshow('lag.jpg', image)
end = time.time()
final = end - start
print(final)
cv2.waitKey(0)
cv2.destroyAllWindows()
【问题讨论】:
-
请提供输入图像,以便我们看到您在做什么?除非您有大于点的对象,否则您不需要模板匹配。你可以只是门槛。然后得到轮廓。然后过滤面积或其他度量的轮廓。