Opencv:TypeError:contour不是一个numpy数组,也不是标量

时间:2017-09-10 08:00:50

标签: python opencv numpy

我想弄清楚我所在地区的绿化区域。我从谷歌地图以50米的缩放级别拍摄了图像,并尝试从图像中分离出绿色。

这些仅用于测试目的。如果事情显示出良好的效果,将在高分辨率图像上执行。

原始图片:

注意:我需要减少上传的尺寸,因为最大尺寸限制为2 MB。

https://support.google.com/docs/answer/3093480?hl=en

在绘制轮廓后的图像:

enter image description here

以下是我的代码:

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()

我的问题:

  1. 找到颜色的较低和较高HSV范围的有效方法是什么?我发现了一些HSV颜色选择器,但它们没有多大帮助。即使以[75,50,0]作为下限,[120,100,100]作为上限,我也可以看到第二张图像中有一些绿色部分缺失。
  2. 使用print cv2.contourArea(contours)进行面积计算会显示以下错误TypeError: contour is not a numpy array, neither a scalar
  3. 以下没有帮助我: enter image description here

    由于

1 个答案:

答案 0 :(得分:1)

一般来说,对于遥感,他们使用多光谱,超光谱图像来计算植被。在rgb / hsv中运行不会那么准确。试试,如果你能找到一个。

无论如何,对于第一部分,你最好制作一个opencv轨道栏来找到合适的hsv值。这里可以找到rgb的示例。至于第二部分,轮廓是所有轮廓的列表。所以使用 -

for i in range len(contours):
   print cv2.contourArea(contours[i])