原文链接:http://www.juzicode.com/opencv-note-non-photorealistic-rendering

OpenCV中提供了几个非真实感绘制的接口函数,我们可以借助这些函数得到卡通画、素描画、美颜以及细节增强的图像。

detailEnhance()用来增强图像的细节:

cv2.detailEnhance(src[,dst[,sigma_s[,sigma_r]]])->dst

edgePreservingFilter()实现边沿保持滤波,可以实现磨皮、美颜的效果:

cv2.edgePreservingFilter(src[,dst[,flags[,sigma_s[,sigma_r]]]])->dst

pencilSketch()生成铅笔素描画,返回2个图像,一个是灰度铅笔画,一个是彩色铅笔画:

cv2.pencilSketch(src[,dst1[,dst2[,sigma_s[,sigma_r[,shade_factor]]]]])->dst1,dst2

stylization()生成卡通画,这点和桔子菌在 论如何把自己变成卡通人物(OpenCV制作卡通化头像) 一文中介绍的卡通画效果类似:

cv2.stylization(src[,dst[,sigma_s[,sigma_r]]])->dst

这些函数的输入图像src都要求是8bit 3通道图像,另外都有2个共同的参数sigma_s和sigma_r,其中sigma_s参数取值范围为0~200,sigma_r参数取值范围为0~1。

下面是一个绘制卡通画的例子:

#VX公众号: 桔子code / juzicode.com
import cv2
print('cv2.__version__:',cv2.__version__)
img = cv2.imread('lvyi11.jpg')
img1=cv2.stylization(img,sigma_s=10,sigma_r=0.3)
cv2.imshow('raw',img)
cv2.imshow('stylization',img1)
cv2.waitKey()
cv2.destroyAllWindows()

运行结果:

调用其他几个函数,再通过调整sigma_s和 sigma_r参数还可以得到更多风格的结果图像:

#VX公众号: 桔子code / juzicode.com
import os
import cv2
print('cv2.__version__:',cv2.__version__)dbg_is_show = False
def show_img(win_name,img,posx=100,posy=100,wait_time=-1,img_ratio=0.5,is_show=True):if is_show is not True:return Nonerows = img.shape[0]cols = img.shape[1]cv2.namedWindow(win_name, cv2.WINDOW_NORMAL )#cv2.WINDOW_AUTOSIZE)cv2.resizeWindow(win_name,(int(cols*img_ratio),int(rows*img_ratio)))cv2.moveWindow(win_name,posx,posy)cv2.imshow(win_name,img)if wait_time>=0:cv2.waitKey(wait_time)return posx+int(cols*img_ratio),posy+int(rows*img_ratio)start_posx=100
start_posy=30
if not os.path.isdir('out/'):os.makedirs('out/')
img = cv2.imread('lvyi11.jpg')
for s in range(1,200,25):for r in range(1,10,2):sigma_s = ssigma_r = r*0.1img1=cv2.stylization(img,sigma_s=sigma_s,sigma_r=sigma_r) img2=cv2.detailEnhance(img,sigma_s=sigma_s,sigma_r=sigma_r) img3=cv2.edgePreservingFilter(img,sigma_s=sigma_s,sigma_r=sigma_r) img4,img5=cv2.pencilSketch(img,sigma_s=sigma_s,sigma_r=sigma_r,shade_factor = 0.02)raw_name='s=%d,r=%f'%(sigma_s,sigma_r)x,y=show_img(raw_name,img,start_posx,start_posy)x,y=show_img('cartoon',img1,x,start_posy) x,y=show_img('detail enhance',img2,x,start_posy) x,y2=show_img('edge preserv',img3,start_posx,25+y) x,y2=show_img('pencil gray',img4,x,25+y) x,y2=show_img('pencil color',img5,x,25+y) cv2.imwrite('out/cartoon-'+raw_name+'.jpg',img1)cv2.imwrite('out/detail-'+raw_name+'.jpg',img2)cv2.imwrite('out/edge-'+raw_name+'.jpg',img3)cv2.imwrite('out/pencilgray-'+raw_name+'.jpg',img4)cv2.imwrite('out/pencilcolor-'+raw_name+'.jpg',img5)key=cv2.waitKey(500)&0xffif key==ord('c') or key == ord('C'):passelif key == ord('q') or key == ord('Q'):breakcv2.destroyWindow(raw_name)
cv2.destroyAllWindows()      

运行结果:

OpenCV-Non-Photorealistic-Rendering

扩展阅读:

论如何把自己变成卡通人物(OpenCV制作卡通化头像)

OpenCV非真实感绘制(铅笔画、卡通画、边沿保持、细节增强)相关推荐

  1. OpenCV非真实感渲染模块的实例(附完整代码)

    OpenCV非真实感渲染模块的实例 OpenCV非真实感渲染模块的实例 OpenCV非真实感渲染模块的实例 #include "opencv2/photo.hpp" #includ ...

  2. OpenCV非真实感渲染的实例(附完整代码)

    OpenCV非真实感渲染的实例 OpenCV非真实感渲染的实例 OpenCV非真实感渲染的实例 #include <signal.h> #include "opencv2/pho ...

  3. Python图像特效 OpenCV 油画 与 非真实感渲染 (Stylization水彩, edgePreservingFilter, detailEnhance, pencilSketch描绘)

    简介 基于Python cv2做的图像风格转换,其中包括油画风格,水彩风格,图像在不影响边缘情况下进行平滑化,图像锐化,图像描绘风格等. Package-OpenCV, scipy下载 pip ins ...

  4. python头像转卡通_将真实照片转换为卡通风格的非真实感图像

    人像卡通化 (Photo to Cartoon) 该项目为小视科技卡通肖像探索项目.您可使用微信扫描下方二维码或搜索"AI卡通秀"小程序体验卡通化效果. 简介 人像卡通风格渲染的目 ...

  5. UnityShader学习——非真实感渲染

    文章目录 什么是非真实感渲染 卡通风格 1.渲染轮廓线 2.添加高光 素描风格 什么是非真实感渲染 尽管游戏渲染一般都是以照相写实主义(photorealism)作为主要目标,但也有许多游戏使用了非真 ...

  6. 《Real-Time Rendering 4th Edition》全文翻译 - 第15章 非真实感渲染(下)15.3 ~ 15.5

    连更两篇,冲鸭! 业余翻译,若有不周到之处,还请多多指教! 实时渲染(第四版)Real-Time Rendering (Fourth Edition) 第15章 非真实感渲染  Chapter 15  ...

  7. 用实际例子详细探究OpenCV的轮廓绘制函数drawContours()

    博主(昊虹图像算法)注:为了更好的理解这篇博文的内容,建议大家先阅读博主对OpenCV轮廓检测函数findContours()的详细介绍,链接 https://blog.csdn.net/wenhao ...

  8. 《Real-Time Rendering 4th Edition》全文翻译 - 第15章 非真实感渲染(上)15.1 ~ 15.2

    好久没更新了~ 由于对NPR方面比较感兴趣,所以任性了一下,先翻译了这一章~ 业余翻译,若有不周到之处,还请多多指教! 实时渲染(第四版)Real-Time Rendering (Fourth Edi ...

  9. Unity Shader入门精要学习笔记 - 第14章 非真实感渲染

    Unity Shader入门精要学习笔记 - 第14章 非真实感渲染 本系列为UnityShader入门精要读书笔记总结, 原作者博客链接:http://blog.csdn.net/candycat1 ...

最新文章

  1. 使用基于注解的mybatis时,利用反射和注解生成sql语句
  2. C语言面试基础知识整理
  3. boost::coroutine模块实现对称协程的测试程序
  4. 修改freebsd的主机名
  5. TCP/IP(一):数据链路层
  6. 【UVA 10816】 Travel in Desert (最小瓶颈树+最短路)
  7. 通过一个简单例子理解 RecyclerView.ItemDecoration
  8. 学java好还是web前端好_到底是学习Java好,还是Web前端好?
  9. Nginx的Gzip介绍之压缩和解压缩
  10. 知乎技术热帖:Qt 这么强大为什么火不起来?
  11. python官网下载文件-使用Python下载文件的简单示例
  12. node.js安装以及git 的使用说明
  13. MJKDZ PS2手柄(BK2461):驱动安装问题及解决
  14. python入门区块链技术_区块链教程
  15. ai跟随路径_怎么在ai中创建文本路径?Ai中怎样沿路径创建文本?
  16. 我为什么放弃网易博客
  17. 薄荷 (2009-06-07)
  18. 如何自学成为设计师_自学能成为一名平面设计师吗?如何提高审美?
  19. 如何使用Jekyll搭建个人博客
  20. 开源火种_火种艾完美的牵线搭桥

热门文章

  1. 小徐科研日记——深度学习视频分类方法
  2. 线性代数学习笔记(四)——行列式按行展开
  3. Iconfont-阿里巴巴矢量彩色图标显示黑白解决方法 矢量图标
  4. 2014秋江苏计算机二级,关于2014年秋季江苏省计算机等级考试报名的通知
  5. 商院人物:印度IT之王顶级幸存术
  6. MySQL 5.6忘记root密码
  7. C# 设置Winform开机运行
  8. 2021年全球音频接口收入大约145.1百万美元,预计2028年达到171.2百万美元
  9. 如何同步几个笔记本,OneNote、印象笔记、网易云笔记
  10. 数据科学的应用案例_应用数据科学