一行代码实现灰色铅笔画彩色铅笔画和卡通画效果(C++/Python OpenCV源码)
Posted Color Space
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一行代码实现灰色铅笔画彩色铅笔画和卡通画效果(C++/Python OpenCV源码)相关的知识,希望对你有一定的参考价值。
点击下方卡片,关注“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++:
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:
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++:
Mat src = imread("yuan.png", IMREAD_COLOR);
Mat result;
stylization(src, result, 5, 0.6);
imshow("Stylization", result);
Python:
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()
原图:
结果图:
欢迎大家加入OpenCV与AI深度学习官方微信群一起学习交流:
—THE END—
以上是关于一行代码实现灰色铅笔画彩色铅笔画和卡通画效果(C++/Python OpenCV源码)的主要内容,如果未能解决你的问题,请参考以下文章
基于《Combining Sketch and Tone for Pencil Drawing Production》的图像铅笔画算法的实现