目录

  • 漫画实现原理
  • 实现漫画效果的程序步骤
  • 实战实现漫画效果

漫画实现原理

在网上随便找一个漫画的图像,我们都可以清楚的看到漫画都比较粗糙,笔触夸张,也就是说色彩并不细腻,比如漫画的头发,看上去就是一个颜色,不仅如此漫画还保留了很多墨水绘制的线条,因此我们实现漫画的步骤,可以分为如下5步:

  1. 应用双边滤波器来减少图像的色彩
  2. 将彩色图像转换为灰度图像
  3. 使用边缘检测算法提取灰度图像的边缘信息
  4. 对于检测的边缘进行增强并二值化产生粗线条的特征图像
  5. 将3步骤处理的图像与原图像进行叠加,最终实现漫画效果

实现漫画效果的程序步骤

通过上面的文字,我们了解了漫画实现的原理。现在,我们将这些步骤统一转换为代码中的步骤。具体实现步骤如下:

  1. 双边滤波不仅能保留边缘信息,同时也用于减少图像的色彩。所以我们需要使用cv2.bilateralFilter()函数。同时辅助使用高斯金字塔能让图像色彩更加的减少。
  2. 彩色转灰色需要使用cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)函数
  3. 边缘信息获取需要用到cv2.adaptiveThreashold()函数,这是一个图像阈值化处理函数,可以从灰度图像中分离目标区域与背景区域。
    具体的原理如下:因为在灰度图像中,灰度值变化明显的区域往往是物体的轮廓(因为背景大多一样),所以将图像分成一小块一小块地去计算阈值会得出图像的轮廓。
  4. 通过中值滤波可以增强并二值化产生粗线条的特征图像。在程序中,可以先进行中值滤波操作,在进行2操作
  5. 将图像叠加通过“与”操作实现,在OpenCV中,cv2.bitwise_and()函数实现“与”操作

实战实现漫画效果

既然我们已经了解了其实现的原理。下面,我们来通过程序直接实现漫画效果,具体代码如下所示:

# 漫画效果实现
def cortoon_effect(img):img_color = imgfor _ in range(3):img_color = cv2.pyrDown(img_color)for _ in range(7):img_color = cv2.bilateralFilter(img_color, 50, 50, 50)for _ in range(3):img_color = cv2.pyrUp(img_color)img_gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)img_blur = cv2.medianBlur(img_gray, 5)img_edge = cv2.adaptiveThreshold(img_blur, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, blockSize=5, C=2)img_edge = cv2.cvtColor(img_edge, cv2.COLOR_GRAY2RGB)print(img_color.shape)print(img_edge.shape)new_img = cv2.bitwise_and(img_color, img_edge)return new_imgif __name__ == "__main__":img = cv2.imread("52.jpg")img = cv2.resize(img, (400, 600))cv2.imshow("0", img)cv2.imshow("1", cortoon_effect(img))cv2.waitKey()cv2.destroyAllWindows()

运行之后,效果如下:

这里选择的图片颜色有些单调,读者可以自行换一张色彩稍微丰富一点的图片试试。博主这里就不测试了。

实现漫画效果---OpenCV-Python开发指南(52)相关推荐

  1. Python开发指南[1]之程序员计时小时钟(附源码)

    Python开发指南[1]之程序员计时小时钟 程序之美 前言 主体 运行效果 核心代码 逻辑分析 结束语 程序之美 前言 Python作为一门编程语言,这门语言的魅力和影响力已经远超C#.C++等编程 ...

  2. python没有联网_无网环境下的 Python 开发指南

    说起有关 Python 的指南,便一定得提到 K 神创建的『Python最佳实践指南』,英文名字是『The Hitchhiker's Guide to Python!』.毫不夸张地说,K 神创建的指南 ...

  3. 太赞了!Win 平台最佳Python 开发指南!

    入门: 最全的零基础学Python的问题 | 零基础学了8个月的Python | 实战项目 |学Python就是这条捷径 干货:爬取豆瓣短评,电影<后来的我们> | 38年NBA最佳球员分 ...

  4. 【转】Python开发指南:最佳实践精选

    总体原则 价值 "为别人开发你也想要使用的工具." --Kenneth Reitz "简洁总是胜过可用." --Pieter Hintjens "满足 ...

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

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

  6. 微软400集python课程-最强福利——来自微软的Python学习教程(开发指南)

    各位小伙伴们,大家有多久没有发现柳猫这么勤奋的更新啦~ 今天给小伙伴们带来微软的官方福利,你没看错,就是来自微软的官方Python学习教程(开发指南)~ 之前微软上线过一套 Python 教程< ...

  7. 微软 python教程_最强福利——来自微软的Python学习教程(开发指南)

    各位小伙伴们,大家有多久没有发现柳猫这么勤奋的更新啦~ 今天给小伙伴们带来微软的官方福利,你没看错,就是来自微软的官方Python学习教程(开发指南)~ 之前微软上线过一套 Python 教程< ...

  8. python timeit用法_十大Python开发技巧

    Python开发指南, 超级实用足以让您震撼 > Photo by Christina Morillo from StockSnap 时不时地,当我了解Python的新功能时,或者我发现其他一些 ...

  9. 《Python 3程序开发指南(第2版•修订版)》——2.3 浮点类型

    本节书摘来自异步社区<Python 3程序开发指南(第2版•修订版)>一书中的第2章,第2.3节,作者[英]Mark Summerfield,王弘博,孙传庆 译,更多章节内容可以访问云栖社 ...

最新文章

  1. Linux中如何配置IP
  2. #Apache Spark系列技术直播# 第六讲【 What's New in Apache Spark 2.4? 】
  3. mysql windows编译_Windows平台下编译Mysql源码 | 学步园
  4. 【网址收藏】WIN10下docker docker-compose docker-machine的安装与使用
  5. IOS15之JSON的解析字典转模型
  6. Linux 驱动开发之内核模块开发(四)—— 符号表的导出
  7. phphstudy运行不了网站_传统企业网站运营分析:这些弊端你了解吗
  8. drools 7.x DSL领域语言入门
  9. navigation笔记
  10. 在vmware中创建共享磁盘
  11. ARM在汽车电子电器架构的应用
  12. 关于html和jsp乱码问题
  13. 《编程机制探析》第二章 计算机语言
  14. 3 步完全掌握 LoRaWAN Server,让你拥有自己的物联网
  15. IE主页被修改的处理方法
  16. result returns more than one elements 解决办法
  17. 云计算是怎么定义的,核心技术有哪些?
  18. react生命周期及hooks
  19. 小程序的退出登陆功能实现代码
  20. spring mvc校验部分属性,springmvc校验属性,java.lang.ClassNotFoundException: com.fasterxml.classmate.Filter

热门文章

  1. Nacos服务发现与调用
  2. java运行linux命令程序_Java程序执行Linux命令
  3. 求正整数的非负整数次幂
  4. (渲染大赛作品)Blender制作幕后:机械动力(一)
  5. mysql复制表的两种方式
  6. 40个常用的CSS代码汇总
  7. 嵌入式之串口中断只能收到一个字节
  8. 火狐十年:到了说再见的时候?
  9. Cannot find module ... or its corresponding type declarations.(ts2307)
  10. java清除redis缓存,Java开发者必看