罪恶之城2演员阵容强大,谁是你最喜欢的角色?

天美租号

今天跟大家扯扯我搞的《罪恶之城2》,别想歪,不是电影,是拿代码搞个类似风格的东西,纯属自己瞎折腾,各位看官图一乐呵。

起因:

之前看《罪恶之城》,那黑白漫画风,加上一点点红色点缀,一下就戳中我。就寻思能不能自己也搞点类似的玩意儿出来,反正最近也闲得蛋疼。

罪恶之城2演员阵容强大,谁是你最喜欢的角色?

准备工作:

  • 确定方向: 不能真搞个电影出来,没那本事。就想着能不能用代码生成一些黑白图片,然后加上一些高亮元素,模仿那个感觉。
  • 技术选型: Python 肯定跑不,图像处理库肯定是 PIL (Pillow) ,简单粗暴好上手。
  • 找灵感: 把《罪恶之城》的图片翻来覆去看好几遍,分析它的色彩、构图,还有那些标志性的元素,比如雨夜、霓虹灯、血迹等等。

罪恶之城2演员阵容强大,谁是你最喜欢的角色?

开始动手:

1. 图片黑白化:

这步最简单,直接用 PIL 的 convert("L") 就搞定。

python

from PIL import Image

img = *("原图.jpg")

罪恶之城2演员阵容强大,谁是你最喜欢的角色?

img_gray = *("L")

img_*("黑白图.jpg")

2. 高亮区域:

这块儿是重点,也是最麻烦的。我的想法是,先识别出图片中的特定颜色,然后把这些颜色区域保留,其他的都变成纯黑白。

颜色识别: 一开始想用颜色范围来识别,但发现效果不噪点太多。后来改用颜色距离公式,计算每个像素和目标颜色的距离,距离小于某个阈值的就认为是目标颜色。

罪恶之城2演员阵容强大,谁是你最喜欢的角色?

区域提取: 把识别出来的颜色区域单独提取出来,保存成一个透明图层。 图层叠加: 把黑白图层和彩色图层叠加起来,搞定!

python

# 一段示例代码,具体实现比较复杂,就不全贴

def highlight_color(img, target_color, threshold):

罪恶之城2演员阵容强大,谁是你最喜欢的角色?

高亮指定颜色区域

Args:

img: PIL Image 对象

target_color: (R, G, B) 目标颜色

threshold: 颜色距离阈值

Returns:

罪恶之城2演员阵容强大,谁是你最喜欢的角色?

PIL Image 对象,高亮后的图像

# ... 颜色距离计算、区域提取、图层叠加 ...

return img_highlighted

3. 细节处理:

罪恶之城2演员阵容强大,谁是你最喜欢的角色?

光有黑白和高亮还不够,还得加点细节,才能更像《罪恶之城》。

噪点: 加点细微的噪点,让画面更有质感。可以用 PIL 的 * 来实现。 对比度: 调整对比度,让黑白更分明,高亮更突出。 自定义元素: 加一些自己喜欢的元素,比如文字、线条等等,让图片更有个性。

遇到的坑:

    罪恶之城2演员阵容强大,谁是你最喜欢的角色?

  • 颜色识别不准: 颜色距离阈值太难调,调大容易把不需要的颜色也识别出来,调小又容易漏掉。是反复尝试,才找到一个比较合适的阈值。
  • 性能问题: 处理大图的时候,速度慢得要死。后来用 PIL 的 crop 和 paste 方法,把图片分成小块处理,再拼接起来,速度才快一些。
  • 代码太乱: 一开始没规划代码写得乱七八糟,可读性很差。后来重构一遍,把代码模块化,才好一些。

最终效果:

搞出来一些图片,虽然跟电影里的效果还差很远,但至少有点那个意思。发几张给各位看看,轻点喷哈。

罪恶之城2演员阵容强大,谁是你最喜欢的角色?

这回瞎折腾,虽然没做出什么惊天动地的东西,但学到不少东西。对 PIL 库的用法更熟练,也对图像处理有更深的理解。更重要的是,体会到创造的乐趣。以后有机会,再搞点更有意思的玩意儿。

发表评论

快捷回复: 表情:
AddoilApplauseBadlaughBombCoffeeFabulousFacepalmFecesFrownHeyhaInsidiousKeepFightingNoProbPigHeadShockedSinistersmileSlapSocialSweatTolaughWatermelonWittyWowYeahYellowdog
验证码
评论列表 (暂无评论,34人围观)

还没有评论,来说两句吧...