【问题标题】:How to uniform the color and texture of a face如何统一脸部的颜色和纹理
【发布时间】:2018-06-23 05:14:14
【问题描述】:

我正在尝试使用 opencv 对一张脸进行卡通化。这是原始图像

目前I'm doing

  1. 缩小图像,应用双过滤器并放大回原始图像
  2. 然后将原始图像的RGB转换为灰度并跟随 中值模糊以减少漂亮
  3. 应用自适应阈值创建边缘蒙版
  4. 将从第 1 步获得的图像与边缘蒙版相结合 位图 这是输出

然后使用 OpenCV 应用 non-photorealistic rendering。这是最终输出 我想在不影响眼睛、嘴巴的情况下生成颜色均匀的脸(同时去除光反射)。如何通过调整我当前的代码或 opencv(python) 中的其他可能方法来实现这一点

【问题讨论】:

  • 非常有趣。你能在最后一步更好地解释你想要什么。您是想要色彩平衡还是要减少颜色的总数?
  • 如果可能的话,我希望脸部有单一颜色,而不是像卡通那样混合颜色
  • 我更喜欢 akvis.com/en/artwork-tutorial/styles/comics.php 这样的东西,其中海报化设置为 70

标签: python opencv image-processing


【解决方案1】:

基于: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

您可以使用本教程将颜色量化仅应用于包含人脸的框。

https://realpython.com/face-recognition-with-python/

【讨论】:

  • 这令人印象深刻。如果你能把它只涂在脸上,那就更好了。 +1 !!
  • 希望你能用我的提示解决。让我们将此标记为已解决;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多