【问题标题】:python - Recolor imagepython - 重新着色图像
【发布时间】:2015-07-02 17:51:40
【问题描述】:

我想实现一个图像重新着色算法以产生类似于此处显示的结果:

http://www.morethantechnical.com/2010/06/24/image-recoloring-using-gaussian-mixture-model-and-expectation-maximization-opencv-wcode/

但使用 Python。但是,我不确定从哪里开始。我一直在玩 OpenCV,但文章中提到的函数(期望最大化和 GMM)似乎在 Python API 中不可用。可以为我指明应该使用哪些工具/库的正确方向吗?

【问题讨论】:

  • 请求外部资源(库/工具)被视为题外话。
  • 我得到的第一个谷歌搜索是scikit-image.org
  • scikit-image 似乎没有 EM 和 GMM 功能。也许你的意思是 scikit-learn。但是,我更感兴趣的是如何解决这个问题,以获得该网页上的屏幕截图所示的结果。在另一页上,他们还描述了一种不同的方法 - 直方图匹配 - 但由于没有图像,我无法判断结果是否与使用 EM/GMM 方法一样好。

标签: python opencv image-processing expectation-maximization


【解决方案1】:

第一个选项是在 Python 中实现此代码。看起来文章中提到的所有函数都可以在 Python API 中使用。 CvEM 只是 EM(在模块 cv2 中):

>>> cv2.EM.__doc__
'EM([, nclusters[, covMatType[, termCrit]]]) -> <EM object>'

没有CvEMParams,因为EM 已经处理了它。如果您正在寻找任何其他函数/对象,请在 Python 控制台中键入 dir(cv2),您很可能会找到您要查找的内容。 Python API 中的事物通常名称略有不同,但找到它们仍然不是什么大问题。请注意,有些东西也可能在cv2.cv 模块中。

第二个选项就是使用这个 C++ 代码并从 Python 中调用它。为 Python 编写扩展并不是很容易,但如果你使用Boost.Python,它应该不会很难。编写扩展模块是 Boost.Python 非常受欢迎的任务,因此有一些很好的教程可以很好地描述这一点。开始的好点可能是this one。为 cv::Mat numpy.array 编写转换器可能是个问题,但这里很简单solution

【讨论】:

  • 非常感谢,我想我会尝试第一个选项,因为那篇文章的一些 cmets 提到了 C++ 代码中的编译错误。如果它们发生了,我不知道如何解决它们。
【解决方案2】:

您正在寻找的关键词是“颜色转移”。我发现这个链接真的很有帮助http://www.pyimagesearch.com/2014/06/30/super-fast-color-transfer-images/

对于 Python,像这样安装颜色传输库;

pip install color_transfer

使用方法:

import color_transfer

destination_image = ...  # import your destination image here
source_image = ....  # import your source image here

new_image = color_transfer.color_transfer(source_image, destination_image)

源图像和目标图像都应该是 Numpy 数组类型。

【讨论】:

    猜你喜欢
    • 2020-09-18
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    • 2022-01-09
    • 2017-12-13
    • 1970-01-01
    • 1970-01-01
    • 2015-12-28
    相关资源
    最近更新 更多