【openCV【实践系列】9——使用OpenCV进行非真实感渲染】
文章图片
图1:渲染图
许多年前,当我还是学生时,我想编写一个过滤器来创建一个像图1所示的风格化/卡通化的图像。天真的我认为我可以使用高斯内核简单地模糊图像,分别检测边缘,并将两个图像组合以获得风格化图像。在大多数区域中所有图像看起来都很平滑之后,边缘会被保留。结果看起来很荒谬;
这是一个糟糕的主意!在我失败的实验几周后,我读到了双边滤波,这可能是计算机视觉中最常用的边缘保持平滑滤波器。虽然双边滤波完成了这项工作,但它很慢你永远不会在实时应用程序中使用它。 我很高兴看到在OpenCV 3中非常快速地实现了边缘保留滤波。结果与双边滤波非常相似,但速度更快。它是SIGGRAPH 2011论文的部分实现,题为“ Domain Transform for Edge-Aware Image and Video Processing ”,作者是Eduardo Gastal和Manuel Oliveira。下一部分为有兴趣深入理解的人提供链接。 边缘感知过滤的域变换 作者Eduardo Gastal在他的项目页面上提供了很多材料来解释论文及其应用。如果您没有太多时间,下面的视频提供了该方法的出色高级概述。 视频地址:https://youtu.be/Ul1xh1IQrTY 在OpenCV 3中,本文使用Photo模块下的Computational Photography子模块中的四个函数实现。以下部分通过示例解释这些功能及其参数。在所有示例中,我们将使用下面的图像作为输入图像。
文章图片
图2:源图像 边缘保留滤波器(edgePreservingFilter) 这些过滤器中的第一个称为edgePreservingFilter Python:
- import cv2
- dst = cv2.edgePreservingFilter(src, flags=1, sigma_s=60, sigma_r=0.4)
文章图片
图3:edgePreservingFilter+RECURS_FILTER 施加的结果edgePreservingFilter与NORMCONV_FILTER如图4所示。
文章图片
图4:edgePreservingFilter+NORMCONV_FILTER 正如您所看到的,两个结果非常接近,因此我建议使用RECURS_FILTER,因为它比NORMCONV_FILTER快。 细节增强滤波器(detailEnhance) 顾名思义,这个滤波器可以增强细节,使图像更清晰 Python:
- import cv2
- dst = cv2.detailEnhance(src, sigma_s=10, sigma_r=0.15)
文章图片
图5:detailEnhance 铅笔素描滤波器(pencilSketch) 此滤波器生成的输出看起来像铅笔草图。有两个输出,一个是将滤波应用于颜色输入图像的结果,另一个是将其应用于输入图像的灰度版本的结果。坦率地说,我对这个过滤器印象不深,因为结果看起来不太棒。
- import cv2
- dst_gray, dst_color = cv2.pencilSketch(src, sigma_s=60, sigma_r=0.07, shade_factor=0.05)
文章图片
风格化滤波器(stylization) 风格化滤波器产生的输出图像看起来像使用水彩绘制的图像。
- import cv2
- dst = cv2.stylization(src, sigma_s=60, sigma_r=0.07)
文章图片
图7:stylization Image Credit:奶牛的形象是根据知识共享(CC by 2.0)获得许可的。你可以在这里找到它 openCV【实践系列】9——使用OpenCV进行非真实感渲染 https://bbs.easyaiforum.cn/thread-856-1-1.html
(出处: 易学智能)
推荐阅读
- openCV【实践系列】7——面部标志检测
- [python] X2Go上安装pycharm
- openCV【实践系列】6——使用OpenCV进行面部交换(换脸)
- 机器学习入门实战 -- Titanic乘客生还预测-易学智能GPU云
- openCV【实践系列】2——OpenCV方向梯度直方图
- openCV【实践系列】8——OpenCV中的颜色空间