Я пытаюсь украсить лицо, используя opencv.Here исходное изображение
В настоящее время я делаю
Затем применялся нефотореалистичный рендеринг с использованием OpenCV. Здесь конечный результат Я хочу создать лицо с однородным цветом (также удаляю отражение света), не затрагивая глаз, рта. Как я могу достичь этого либо путем настройки моего текущего кода, либо другого возможного подхода в opencv (python)
На основании: https://www.pyimagesearch.com/2014/07/07/color-quantization-opencv-using-k-means-clustering/
Вот код, который делает то, что вы ищете:
import cv2
import numpy as np
from sklearn.cluster import MiniBatchKMeans
n = 32
# read image and convert to gray
img = cv2.imread('./obama.jpg',cv2.IMREAD_COLOR)
img = cv2.resize(img, (0,0), fx=.2, fy=.2)
img = cv2.cvtColor(img, cv2.COLOR_BGR2LAB)
(h, w) = img.shape[:2]
img =np.reshape(img, (img.shape[0]* img.shape[1], 3))
clt = MiniBatchKMeans(n_clusters=n)
labels = clt.fit_predict(img)
quant = clt.cluster_centers_.astype("uint8")[labels]
quant = np.reshape(quant, (h,w,3))
img = np.reshape(img, (h,w,3))
quant = cv2.cvtColor(quant, cv2.COLOR_LAB2BGR)
img = cv2.cvtColor(img, cv2.COLOR_LAB2BGR)
double = np.hstack([img, quant])
while True:
cv2.imshow('img', double)
k = cv2.waitKey(30) & 0xff
if k == 27:
break
Вы можете использовать этот учебник, чтобы применить квантование цвета только к ящикам, содержащим лица.