2

我已经搜索和搜索但找不到:当我使用时,cv.InRanges我需要放置一个最小和最大 HSV 值。到目前为止,在我看到的所有示例中,它们都用于Cv.Scalar常量

我自己尝试使用它,但不知道应该有什么我尝试了一个列表、一个元组和 numpy.array 都具有三个值,但我不断收到错误。

列表的“需要浮点数”

元组“需要浮点数”

numpy.array 的“只有长度 -1 的数组可以转换为 python 标量”

虽然想起来数组和列表应该是一样的......

谁能告诉我如何正确使用它,这是许多尝试之一的示例:

def thresh(img, pixel):

    hsv_min = pixel
    hsv_min[0] = hsv_min[0] - 5
    hsv_min[1] = hsv_min[1] - 20
    hsv_min[2] = hsv_min[2] - 20
    hsv_max[0] = hsv_max[0] + 5
    hsv_max[1] = 255
    hsv_max[2] = 255
    cv.InRangeS(ingHSV, cv.Scalar(hsv_min), cv,Scalar(hsv_max), imgThreshold)
4

2 回答 2

2

所以我想通了:使用:

cv.Scalar(float(hsv_min[0]),float(hsv_min[1]),float(hsv_min[2]))

然后 Cv.InRangeS 工作正常。

于 2013-09-28T14:24:56.317 回答
1

也许这段代码可以帮助你,但它使用 numpy & opencv2,我从来没有先尝试过使用 opencv。

import cv2
import numpy

def thresh(img, pixel):
  hsv_min = pixel
  low_threshold   = numpy.array(( hsv_min[0] - 5, hsv_min[1] - 20, hsv_min[2] - 20), dtype=numpy.uint8, ndmin=1)
  high_threshold  = numpy.array(( hsv_max[0] + 5, 255, 255), dtype=numpy.uint8, ndmin=1)
  cv2.InRange(ingHSV, low_threshold, high_threshold, imgThreshold)
于 2013-09-26T16:21:13.407 回答