1

我知道分割某些颜色的最简单方法是使用 HSV 颜色空间,但我有一个任务要在 HSV、RGB 和 Lab 中完成……我真的很困惑如何在 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 色彩空间中,我不确定从哪里开始。我尝试了类似于人类颜色上限和下限的方法,但显然这不是正确的方法。

4

1 回答 1

0

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

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
于 2020-11-10T23:38:19.547 回答