问题描述
我知道分割某些颜色的最简单方法是使用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