在卫星图像上使用 opencv 检测植被
Posted
技术标签:
【中文标题】在卫星图像上使用 opencv 检测植被【英文标题】:Detect vegetation using opencv on satellite images 【发布时间】:2021-10-30 04:09:33 【问题描述】:我正在尝试根据颜色估算卫星照片上的植被面积(以平方米为单位)。我没有训练数据集,因此无法进行机器学习。所以我知道结果不会很好,但我还是试试看。
为此,我通过 cv2.inRange 对颜色应用了过滤器。
import numpy as np
import cv2
img = cv2.imread('staticmap.png')
upperbound = np.array([70, 255,255])
lowerbound = np.array([40, 40,40])
mask = cv2.inRange(img, lowerbound, upperbound)
imask = mask>0
white = np.full_like(img, [255,255,255], np.uint8)
result = np.zeros_like(img, np.uint8)
result[imask] = white[imask]
cv2.imshow(winname = 'satellite image', mat = img)
cv2.imshow('vegetation detection', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
这给出了以下结果
所以看来检测还不算太差。 现在,我想从白色像素的密度中检测出有植被的区域和没有植被的区域。我想像这样的输出:
是否有任何开放的 cv 函数可以做到这一点?
【问题讨论】:
【参考方案1】:您可以考虑使用高斯模糊,然后像这样使用 Otsu 阈值:
import cv2
# Load image as greyscale
im = cv2.imread('veg.jpg', cv2.IMREAD_GRAYSCALE)
# Apply blur
blur = cv2.GaussianBlur(im,(19,19),0)
# Otsu threshold
_,thr = cv2.threshold(blur,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
【讨论】:
非常感谢!这正是我想要的以上是关于在卫星图像上使用 opencv 检测植被的主要内容,如果未能解决你的问题,请参考以下文章