3

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

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

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

4

2 回答 2

2

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

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

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

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

于 2015-04-25T01:26:33.467 回答
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 数组类型。

于 2017-07-26T18:16:55.103 回答