是否可以使用Lab颜色空间来分割某些颜色?

问题描述

我知道分割某些颜色的最简单方法是使用HSV色彩空间,但是我有一个任务要在HSV,RGB和Lab中进行... 我真的很困惑如何在实验室中做到这一点。我在HSV中做到了,而且非常简单。 这是使用HSV颜色空间对人的颜色进行分割的功能

import cv2
import matplotlib.pyplot as plt
import numpy as np

def HSV_Segmentation(image):
    lowerRange= np.array([0,70,0],dtype="uint8")
    upperRange= np.array([25,255,255],dtype="uint8")
    mask = image[:].copy()

    imageHSV = cv2.cvtColor(image,cv2.COLOR_BGR2HSV)
    imageRange = cv2.inRange(imageHSV,upperRange,lowerRange)

    mask[:,:,0] = imageRange
    mask[:,1] = imageRange
    mask[:,2] = imageRange

    kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5))
    closing = cv2.morphologyEx(mask,cv2.MORPH_CLOSE,kernel)
    faceHSV = cv2.bitwise_and(image,mask)
    
    return faceHSV

现在我被困在Lab色彩空间中,我不确定从哪里开始。 我尝试了类似的上下限颜色,但是显然这不是正确的方法

解决方法

我尝试了不同的范围,但这似乎对我有用。 那并不难:)

def Lab_Segmentation(image):
    lowerRange= np.array([0,135,135],dtype="uint8")
    upperRange= np.array([255,160,195],dtype="uint8")
    mask = image[:].copy()

    imageLab = cv2.cvtColor(image,cv2.COLOR_BGR2Lab)
    imageRange = cv2.inRange(imageLab,lowerRange,upperRange)
    
    mask[:,:,0] = imageRange
    mask[:,1] = imageRange
    mask[:,2] = imageRange
    
    kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5))
    closing = cv2.morphologyEx(mask,cv2.MORPH_CLOSE,kernel)
    faceLab = cv2.bitwise_and(image,mask)

    return faceLab