我们随手拍摄的照片,很难达到摄影师的水准,因此不管是手机上还是电脑内,都有一些软件可以添加特效让照片更好看,手机拍摄时也有即时的美化效果。不过我比较好奇漫画特效,但是一直在网上看到别人的成品而找不到针对性的软件,因此只有自己实现一下,虽然跟专业的还有差距,但效果还不错。
本次使用 OpenCV,采用 Python 实现。
对比现实中的画画,一般是先画出边缘轮廓使整体规划好,再填充颜色使其完整,因此在这里我们也采用这种方式。不过对图片直接操作与从零开始着笔不一样,要将原始图片进行两次不同的处理,再将处理后的两个图片叠加。
边缘轮廓
漫画中不管是人物还是风景,刻画的细节有限,因此需要把重要以及有特色的部分体现出来,数量要适当。
轮廓通过四步操作:
import cv2 img = cv2.imread("example.jpg") img_copy = img # 灰度处理 img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 平滑操作,去除噪声 img_blur = cv2.medianBlur(img_gray, 5) # 通过阈值提取轮廓 img_edge = cv2.adaptiveThreshold(img_blur, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, blockSize=9, C=3) # 将灰度图片变成 3 通道,用于后续合并 img_edge = cv2.cvtColor(img_edge, cv2.COLOR_GRAY2BGR)
这里通过二值化的方式将轮廓提取出来,采用自适应阈值二值化函数,基于像素周围的小区域确定像素的阈值,可以将有区别的部分的界限提取出来,恰如漫画对象中黑色粗体轮廓,且细节得当。因阈值处理只能针对灰度图像,因此需要先将彩色图像转换为单通道的灰度图像,且为了去除描绘对象内部的冗余细节,还要对图像进行平滑处理,使颜色过度得缓慢一些,毕竟漫画中颜色的应用没有现实生活中那么复杂,这样得出的轮廓就比较好。
看一下效果:
对比原图:
将两个重要的方法介绍一下:
中值滤波:cv2.medianBlur(img, ksize)
主要是后面的参数,代表内核区域的边长,必须是大于1的奇数,如3、5、7……方法提取内核区域下所有像素的中值,并将中心元素替换为该中值
自适应阈值二值化:cv2.adaptiveThreshold(src, maxval, thresh_type, type, Block Size, C)
- src: 输入图,只能输入单通道图像,通常来说为灰度图
- dst: 输出图
- maxval: 当像素值超过了阈值(或者小于阈值,根据type来决定),所赋予的值
- thresh_type: 阈值的计算方法,包含以下2种类型:cv2.ADAPTIVE_THRESH_MEAN_C; cv2.ADAPTIVE_THRESH_GAUSSIAN_C.
- type:二值化操作的类型,与固定阈值函数相同,包含以下5种类型: cv2.THRESH_BINARY; cv2.THRESH_BINARY_INV; cv2.THRESH_TRUNC; cv2.THRESH_TOZERO;cv2.THRESH_TOZERO_INV.
- Block Size: 图片中分块的大小
- C :阈值计算方法中的常数项
颜色填充
边缘轮廓已经描绘好了,再添加颜料后就完整了。这里就比较简单了,只需要将原图片的颜色细致度降低些就行了。
代码如下:
for _ in range(2) # 降低分辨率 img_copy = cv2.pyrDown(img_copy) for _ in range(5): # 图像平滑,保留边缘 img_copy = cv2.bilateralFilter(img_copy, d=9, sigmaColor=9, sigmaSpace=7) img_copy = cv2.resize(img_copy, (img.shape[1], img.shape[0]), interpolation=cv2.INTER_CUBIC)
颜色要比较平滑,不能像现实生活中这么细致,先采用图像金字塔将分辨率降低,并采用双边滤波去除噪声,可以平滑平面区域,同时保持边缘清晰。分辨率降低后图像会变小,因此最后要将图像放大为原来的大小,虽然图像金字塔有专门的方法可以将图像放大,但是尺寸可能会有一两点变化,合并过程中要两个图像完全一样大,所以这里直接按尺寸放大。
看一下效果:
将两个重要的方法介绍一下:
分辨率降低:cv2.pyrDown(src, dst=None, dstsize=None, borderType=None)
一般只需要输入图像就行了,它会直接将图像长宽减半
双边滤波:cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace[, dst[, borderType]])
- src:输入图像
- d:过滤时周围每个像素领域的直径
- sigmaColor:在color space中过滤sigma。参数越大,临近像素将会在越远的地方mix。
- sigmaSpace:在coordinate space中过滤sigma。参数越大,那些颜色足够相近的的颜色的影响越大。
合并
img_cartoon = cv2.bitwise_and(img_copy, img_edge) cv2.imshow("cartoon", img_cartoon) cv2.waitKey(0) cv2.destroyAllWindows()
cv2.bitwise_and()
是对二进制数据进行“与”操作,即对图像(灰度图像或彩色图像均可)每个像素值进行二进制“与”操作:1&1=1,1&0=0,0&1=0,0&0=0
最后结果:
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]