一行代码实现灰色铅笔画、彩色铅笔画和卡通画效果(C++/Python OpenCV源码)

2021-11-04 17:08:04 浏览数 (1)

点击下方卡片,关注“OpenCV与AI深度学习

视觉/图像重磅干货,第一时间送达

导读

本文主要介绍在OpenCV中如何使用一行代码实现图像转灰色铅笔画、彩色铅笔画和卡通效果。

背景介绍

GAN(生成对抗网络)在深度学习领域的风靡,部分应归功于图像的风格迁移,各式各样的风格迁移效果更让人眼花缭乱。殊不知OpenCV的Photo模块中也提供了几个图像特效处理的方法,简单一行代码就可以实现图像转灰色铅笔画、彩色铅笔画和卡通画的效果。

使用介绍与效果演示

一、灰色铅笔画、彩色铅笔画效果

参数:

src

输入8位三通道图像

dst1

输出8位单通道图像(灰色铅笔画结果图)

dst2

与输入图像相同的通道数和大小(彩色铅笔画结果图)

sigma_s

取值范围0~200

sigma_r‍‍

取值范围0~1

shade_factor

取值范围0~0.1

sigma_s,sigma_r:

图像处理和计算机视觉中的大多数平滑滤波器(例如高斯滤波器或盒式滤波器)都有一个称为 sigma_s(用于 Sigma_Spatial)的参数,用于确定平滑量。典型的平滑滤波器用像素的相邻像素的加权和替换像素的值。邻域越大,过滤后的图像看起来越平滑。邻域的大小与参数 sigma_s 成正比。

就像其他平滑过滤器一样,sigma_s控制邻域的大小,sigma_r(用于 sigma_range)控制邻域内不同颜色的平均程度。较大的sigma_r 会产生较大的恒定颜色区域。

shade_factor:

范围 0 到 0.1 ,是输出图像强度的简单缩放。值越高,结果越亮。

代码演示与效果:

C :

代码语言:javascript复制
Mat src = imread("yuan.png", IMREAD_COLOR);
Mat imgGray, imgColor;
pencilSketch(src, imgGray, imgColor, 5, 0.1f, 0.03f);
imshow("Pencil Sketch", imgGray);
imshow("Color Pencil Sketch", imgColor);

Python:

代码语言:javascript复制
import cv2
src = cv2.imread('yuan.png')
dst_gray, dst_color = cv2.pencilSketch(src, sigma_s=5, sigma_r=0.1, shade_factor=0.03)
cv2.imshow('gray_pencil', dst_gray)
cv2.imshow('color_pencil', dst_color)
cv2.waitKey()
cv2.destroyAllWindows()

原图:

灰色铅笔画效果:

彩色铅笔画效果:

二、卡通画效果

风格化旨在生成具有多种效果的数字图像,而不是专注于照片写实。边缘感知滤镜非常适合风格化,因为它们可以抽象出低对比度区域,同时保留或增强高对比度特征。

参数:

src

输入8位三通道图像

dst

与输入图像相同的通道数和大小(卡通画结果图)

sigma_s

取值范围0~200

sigma_r

取值范围0~1

代码演示与效果:

C :

代码语言:javascript复制
Mat src = imread("yuan.png", IMREAD_COLOR);
Mat result;
stylization(src, result, 5, 0.6);
imshow("Stylization", result);

Python:

代码语言:javascript复制
import cv2
src = cv2.imread('yuan.png')
dst = cv2.stylization(src, sigma_s=5, sigma_r=0.6)
cv2.imshow('cartoon', dst)
cv2.waitKey()
cv2.destroyAllWindows()

原图:

结果图:

0 人点赞