我想实现一个图像重新着色算法来产生类似于这里显示的结果:
但使用 Python。但是,我不确定从哪里开始。我一直在玩 OpenCV,但文章中提到的函数(期望最大化和 GMM)似乎在 Python API 中不可用。可以在某种程度上指出我应该使用哪些工具/库的正确方向吗?
我想实现一个图像重新着色算法来产生类似于这里显示的结果:
但使用 Python。但是,我不确定从哪里开始。我一直在玩 OpenCV,但文章中提到的函数(期望最大化和 GMM)似乎在 Python API 中不可用。可以在某种程度上指出我应该使用哪些工具/库的正确方向吗?
第一个选项是在 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 编写转换器可能是一个问题,但这里有一个简单的解决方案。
您正在寻找的关键词是“颜色转移”。我发现这个链接真的很有帮助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 数组类型。