我想弄清楚我所在地区的绿化区域。我从谷歌地图以50米的缩放级别拍摄了图像,并尝试从图像中分离出绿色。
这些仅用于测试目的。如果事情显示出良好的效果,将在高分辨率图像上执行。
原始图片:
注意:我需要减少上传的尺寸,因为最大尺寸限制为2 MB。
https://support.google.com/docs/answer/3093480?hl=en
在绘制轮廓后的图像:
以下是我的代码:
import numpy as np
import cv2
image = cv2.imread('map.png')
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
# lower and upper range of green color in HSV color format
mask = cv2.inRange(hsv, np.array([75, 50, 0]), np.array([120, 100, 100]))
mask, contours, hierarchy = cv2.findContours(mask, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE)
# print cv2.contourArea(contours)
image_with_contours = cv2.drawContours(image, contours, -1, (0,255,0), 3)
cv2.imshow('CHAIN_APPROX_NONE', image_with_contours)
cv2.waitKey(0)
cv2.destroyAllWindows()
我的问题:
答案 0 :(得分:1)
一般来说,对于遥感,他们使用多光谱,超光谱图像来计算植被。在rgb / hsv中运行不会那么准确。试试,如果你能找到一个。
无论如何,对于第一部分,你最好制作一个opencv轨道栏来找到合适的hsv值。这里可以找到rgb的示例。至于第二部分,轮廓是所有轮廓的列表。所以使用 -
for i in range len(contours):
print cv2.contourArea(contours[i])