OpenCV (9) --- HSV, обозначающий цвет кожи и реализующий художественный эффект

OpenCV
OpenCV (9) --- HSV, обозначающий цвет кожи и реализующий художественный эффект

отметить оттенок кожи

Ранее мы выделяли красную эффективную область на изображении, выделяя красный цвет на канале H. Затем таким же образом мы можем ограничить диапазон цвета кожи и извлечь лицо, чтобы добиться эффекта матирования.

Прежде всего, цвет кожи должен обращать внимание не только на H-канал, но и на S-канал. Итак, сначала нам нужно ввести функцию: split(), которая определяется следующим образом:

img = cv2.imread("4.jpg")
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
h, s, v = cv2.split(hsv)

Как показано в приведенном выше коде, мы можем получить значения всех каналов на изображении HSV с помощью функции cv2.splite().

Во-первых, мы предполагаем приблизительный диапазон тонов кожи человека с оттенком между [5, 170] и насыщенностью между [25, 166]. Таким образом, мы можем получить изображение в ограниченном диапазоне в соответствии с содержанием предыдущего раздела, код выглядит следующим образом:

import cv2

img = cv2.imread("4.jpg")
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
h, s, v = cv2.split(hsv)
hmask=cv2.inRange(h,5,170)
smask=cv2.inRange(s,25,166)
mask=hmask & smask
result=cv2.bitwise_and(img,img,mask=mask)
cv2.imshow("img",img)
cv2.imshow("result", result)
cv2.waitKey()
cv2.destroyAllWindows()

После запуска, если изображение похоже на цвет кожи, оно будет извлечено, а другие части станут черными.1

добиться художественного эффекта

Ранее мы вводили применение различных каналов ГС, но не выделяли и не подчеркивали важность В. Здесь давайте воспользуемся значением канала V, чтобы добиться некоторых интересных художественных эффектов.

import cv2

img = cv2.imread("9.jpg")
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
h, s, v = cv2.split(hsv)
v[:,:]=255
newHSV=cv2.merge([h,s,v])
result=cv2.cvtColor(newHSV,cv2.COLOR_HSV2BGR)
cv2.imshow("img",img)
cv2.imshow("result", result)
cv2.waitKey()
cv2.destroyAllWindows()

После запуска он кажется немного не мейнстримным.非主流