【发布时间】:2014-04-01 19:34:30
【问题描述】:
在我“最疯狂的梦想”中,我想将图像传递给这样的方法(伪 C#):
string pathToOriginalImg = @"http://commons.wikimedia.org/wiki/File:Mark_Twain_by_AF_Bradley.jpg";
Image colorizedImg = new ColorizeImage(pathToOriginalImg, [array of colors]);
IOW,将要着色的图像的路径以及要在着色中使用的颜色数组传递给方法。例如,如果我想“西班牙化”马克吐温的这张照片,我可能想将西班牙和墨西哥国旗的颜色传递给它,例如:森林绿、白色、墨西哥红;西班牙红、黄。
这可能吗,还是说我还差一个小木屋,甚至希望这样?
【问题讨论】:
-
您可以轻松更改图像每个像素的颜色。一个完全不同的故事是,这些变化对你来说是“有意义的”,也就是说:最终的图像看起来就像你想要的那样。将图片视为一堆连续的正方形(数百万个):执行或多或少复杂/同步的修改可能成为一项非常困难的任务。
-
嗯 - 之前/之后的例子?
-
hmm,有趣的是,我想您可以使用标准的“posterize”函数将图像转换为多种颜色,然后使用另一个函数将这些颜色中的每一种替换为目标颜色。不知道它是否看起来不错......
-
用西班牙语教马克吐温图片的功能怎么样?如果有用,试试这个:
Image TeachSpanish(Image img) { return img; }...不要问我它是如何工作的,它就是这样 -
我怀疑您总是可以使用具有预定颜色集的抖动算法。结果不会很好,但这是一个开始。对于一个非常粗略的版本,迭代图像中的像素并将它们的距离(您可以使用通常的公式
sqrt(r^2 + g^2 + b^2))与每种颜色进行比较。替换最接近原始像素的颜色。更复杂的算法可以使用抖动来混合颜色以创建更多的渐变效果。
标签: c# image image-processing graphics colorize