我们随手拍摄的照片,很难达到摄影师的水准,因此不管是手机上还是电脑内,都有一些软件可以添加特效让照片更好看,手机拍摄时也有即时的美化效果。不过我比较好奇漫画特效,但是一直在网上看到别人的成品而找不到针对性的软件,因此只有自己实现一下,虽然跟专业的还有差距,但效果还不错。

本次使用 OpenCV,采用 Python 实现。


对比现实中的画画,一般是先画出边缘轮廓使整体规划好,再填充颜色使其完整,因此在这里我们也采用这种方式。不过对图片直接操作与从零开始着笔不一样,要将原始图片进行两次不同的处理,再将处理后的两个图片叠加。

边缘轮廓

漫画中不管是人物还是风景,刻画的细节有限,因此需要把重要以及有特色的部分体现出来,数量要适当。

轮廓通过四步操作:

import cv2img = 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

最后结果:

OpenCV图片漫画效果相关推荐

  1. python漫画滤镜怎么实现的_OpenCV图片漫画效果的实现示例

    我们随手拍摄的照片,很难达到摄影师的水准,因此不管是手机上还是电脑内,都有一些软件可以添加特效让照片更好看,手机拍摄时也有即时的美化效果.不过我比较好奇漫画特效,但是一直在网上看到别人的成品而找不到针 ...

  2. c语言 图片漫画效果,picsart怎么把图片变成漫画效果

    现在的人们在拍完照片之外都习惯性的会用到图片编辑软件修图,picsart就是其中一个,他能够剪切.拼贴图片,还有很多有趣的文字特效和紧跟时尚潮流的贴纸,在使用的过程中如果想让图片变成漫画的效果应该如何 ...

  3. c语言 图片漫画效果,OpenCV实现图像转换为漫画效果

    本文实例为大家分享了OpenCV实现图像转换为漫画的具体代码,供大家参考,具体内容如下 From <OpenCV By Example> 1.先canny提取图像的边缘并强化,翻转边缘为黑 ...

  4. matlab 双边沿滤波,图片漫画效果(DoG算子和双边滤波)

    对比下面两张图(从 http://hi.baidu.com/cwyalpha/blog/item/647745a9f33570f61e17a235.html 里翻出来的..),漫画有3个特点: 1.边 ...

  5. c语言 图片漫画效果,【教程】教你用手机修出动漫风格人像照片

    昨天上海的天气美到爆!恰逢好友来上海游玩,作为东道主,首先想到的是带朋友去外滩逛逛. 游玩当然少不了拍照,由于之前有在朋友圈发过漫画风格系列的风景相片,我便想到给朋友拍的人像,能不能也处理成漫画风格的 ...

  6. 搭建Android+QT+OpenCV环境,实现“单色图片着色”效果

    OpenCV是我们大家非常熟悉的图像处理开源类库:在其新版本将原本在Contrib分库中的DNN模块融合到了主库中,并且更新了相应文档.这样我们就能够非常方便地利用OpenCV实现一些属于DeepLe ...

  7. Ps教程:Photoshop快速把人物图片转为手绘漫画效果

    本篇转载于https://user.qzone.qq.com/907218922/blog/1556084094用于记录学习. Photoshop快速把人物图片转为手绘漫画效果 最终效果 1.打开我们 ...

  8. 怎么把图片变漫画效果呢?这个小妙招轻松完成

    怎么把一张图片变成漫画的效果呢?在现实生活中,很多小伙伴喜欢看动漫,对一些二次元的人物以及场景都很感兴趣,有时我们自己拍摄的照片,也想把照片中的自己变成漫画中的人物效果,来用作自己的社交软件头像或者是 ...

  9. 干货 | 抖音漫画效果解密

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:AI算法与图像处理 抖音漫画效果 要说最近抖音最火的效果 ...

最新文章

  1. SAP WM LPK1 不能把 cross-material control cycles定义成release order parts
  2. linux docker 与 iptables 的关系
  3. Dockerfile命令
  4. cf13C Sequence(DP)
  5. pandas学习笔记三之处理丢失数据
  6. (41)FPGA面试题FPGA详细设计流程
  7. jquery mysql jsp_jsp+jquery+mysql实现的一个简单的学生管理系统
  8. C#.NET开源反编译工具ILSpy下载
  9. UE4开发游戏的流程
  10. 需求管理搞不定?这4招帮你解决项目需求管理
  11. 基于SSM房屋租赁管理系统
  12. 迅雷离线下载脚本 — LinuxTOY
  13. 软件工程师应该如何吵架?
  14. 华为IT“智”存高远,普“慧”于民
  15. Mendix基于腾讯云部署最佳实践
  16. html盒子在始终在左侧,div盒子在一行方法(左中右结构 CSS布局)
  17. 如何裁剪图片中不要的部分?这个裁剪方法很好用
  18. 基于NLP的互联网情感分析与预警
  19. JForum论坛添加UEditor文本编辑器
  20. vue中使用xlsx导出Excel 并设置样式,解决未完全合并单元格框线的BUG

热门文章

  1. 堡垒机定期修改服务器密码,堡垒机自动改密
  2. Kaggle Compete: Plant Pathology 2020-FGVC7
  3. 神武3服务器神武币交易中心,《神武3》装备获取指南系统与打造攻略
  4. Ubuntu18.04外接显示屏配置问题
  5. Win10鼠标拖拽移动文件
  6. Python学习26:个人所得税计算器
  7. Linux系统强制位u+s、g+s、o+t 详解
  8. 使用Photoshop为产品标记尺寸参数
  9. oracle 字符转整数,Oracle中字符串转换函数小数转法
  10. 精彩回顾:BSV区块链应用创新汇(深圳站)于上周末成功举办