OpenCV检测具有不同的色彩空间

时间:2015-06-03 00:49:32

标签: python opencv color-space

我正在使用opencv来检测具有在灰度图像上训练的级联分类器的对象,然后测试不同颜色空间(图像最初颜色)的检测并计算精度/召回/调和平均值。
我想知道为什么我得到相同的灰度和rgb结果,但在其他颜色空间不同?

      # Read the image
    image = cv2.imread(imagePath)


    # convert to grayscale (default algorithm)
    if colorspace == "gray":
        colorCVT = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    elif colorspace == "hsv":
        colorCVT = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
    elif colorspace == "hls":
        colorCVT = cv2.cvtColor(image, cv2.COLOR_BGR2HLS)
    elif colorspace == "lab":
        colorCVT = cv2.cvtColor(image, cv2.COLOR_BGR2LAB)
    elif colorspace == "luv":
        colorCVT = cv2.cvtColor(image, cv2.COLOR_BGR2LUV)
    elif colorspace == "yuv":
        colorCVT = cv2.cvtColor(image, cv2.COLOR_BGR2YUV)
    elif colorCVT --"rgb"
        colorspace = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    else:
        colorCVT = image

    print('using color mode: '+colorspace)

    with open(outputFilename, 'a') as results:
        results.write("Running detection on image:  "+imagePath +"\n")
        results.write("Detecting using trained classifier: "+cascadePath +"\n")
    # results.close()


    # training PARAMS
    SCALE_FACTOR = 1.02
    MIN_NEIGHBORS = 5
    MIN_SIZE = (10,10)
    MAX_SIZE = (128,128)

    # Detect objects in the image
    objects = trainedCascade.detectMultiScale(
        colorCVT,
        scaleFactor=SCALE_FACTOR,
        minNeighbors=MIN_NEIGHBORS,
        minSize=MIN_SIZE,
        maxSize=MAX_SIZE,
        flags = cv2.cv.CV_HAAR_SCALE_IMAGE
    )

1 个答案:

答案 0 :(得分:2)

如果查看API for detectMultiScale,您会发现它希望图像为灰度。我假设如果它遇到3通道图像(无论是BGR,HSV还是其他),它会尝试先转换为灰度。

不幸的是,当呈现3通道图像时,OpenCV无法知道该图像正在使用哪个色彩空间,因为没有元数据来指示这样的事物。即使在cvtColor调用中您必须同时指定和目标颜色空间,此限制也很明显。因此,对于detectMultiScale的3通道图像参数,它似乎总是猜测RGB(或者可能是BGR?你的BGR2RGB上的代码似乎有些错误)作为颜色空间,当然这只是正确的,如果是实际上是颜色空间。