基于Opencv的图像卡通化实现代码
作者:Giao哥不瘦到100不改名 时间:2023-07-10 06:58:55
OpenCV的全称是:Open Source Computer Vision Library。OpenCV是一个基于(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
本文给大家介绍基于Opencv的图像卡通化,主要工具是高斯滤波器、细节增强滤波器、双边滤波、拉普拉斯滤波器。
铅笔素描效果
将输入图像灰度化后及逆行高斯滤波,其中由于高斯滤波服从正态分布,核数越大、越模糊。最后一步是将原始灰度图像除以模糊后的灰度图像。这样可以得出两个图像中每个像素之间的变化率。模糊效果越强,每个像素的值相对于其原点的变化就越大,因此,它使我们的铅笔素描更加清晰。其中第一幅图核数为25,第二幅图核数为75。(领会除法运用在此处的妙处)
import cv2
img=cv2.imread('bird.jpg')
cv2.imshow('bird',img)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Blur the image using Gaussian Blur
#高斯核服从正态分布,核数越大,越模糊
gray_blur = cv2.GaussianBlur(gray, (75, 75), 0)
# Convert the image into pencil sketch
cartoon = cv2.divide(gray, gray_blur, scale=250.0)
cv2.imshow('cartoon.jpg',cartoon)
cv2.waitKey()
cv2.destroyAllWindows()
国画效果
国画效果:锐化图像,平滑颜色以及增强边缘效果。
1.将原图像进行中值滤波后进行自适应均值滤波后的边缘图像。
2.将原RGB图像进行基于细节增强滤波器的锐化下图1。(当把细节增强滤波器换为双边滤波,显得更加平滑,下图2)
3.将锐化后的图像与边缘图像进行按位与得到最终效果图。
import cv2
img=cv2.imread('bird.jpg')
cv2.imshow('bird',img)
#convert the image into grayscale image
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#Blur the grayscale image with median blur中值滤波
gray_blur = cv2.medianBlur(gray, 3)
#Apply adaptive thresholding to detect edges检测图像边缘
edges = cv2.adaptiveThreshold(gray_blur, 255, cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY, 9, 9)#自适应均值滤波
#Sharpen the image锐化图像
color = cv2.detailEnhance(img, sigma_s=5, sigma_r=0.5)
cv2.imshow('color',color)
#细节增强函数 sigma_s控制着邻域的大小,该邻域的大小将被加权以替换图像中的像素值。值越高,邻域越大。这样可以使图像更平滑
#:如果要在平滑图像时保留边缘,这很重要。较小的值只会产生非常相似的颜色进行平均(即平滑),而相差很大的颜色将保持不变
#Merge the colors of same images using "edges" as a mask
cartoon = cv2.bitwise_and(color, color, mask=edges)
cv2.imshow('cartoon',cartoon)
cv2.waitKey()
cv2.destroyAllWindows()
抽象效果
拉普拉斯滤波器:通过对象内部的灰度级和图像背景强度来突出对象的边缘
import cv2
img=cv2.imread('bird.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow('img.jpg', img )
gray = cv2.medianBlur(gray, 3)
edges = cv2.Laplacian(gray, -1, ksize=5)
edges_inv = 255 - edges
dummy, cartoon = cv2.threshold(edges_inv, 0, 255, cv2.THRESH_BINARY)
cv2.imshow('cartoon.jpg', cartoon )
cv2.waitKey()
cv2.destroyAllWindows()
来源:https://blog.csdn.net/exsolar_521/article/details/122348488
标签:Opencv,图像,卡通化
0
投稿
猜你喜欢
5 种JavaScript编码规范
2024-06-16 16:57:08
mysql 日期和时间格式转换实现语句
2024-01-22 22:58:38
零基础写python爬虫之使用urllib2组件抓取网页内容
2021-08-16 01:13:22
如何使用python传入不确定个数参数
2023-10-27 22:56:36
python网络爬虫实现发送短信验证码的方法
2021-03-23 23:18:54
Python探索之ModelForm代码详解
2022-05-16 06:14:33
Python实现脚本转换为命令行程序
2022-02-28 10:48:30
一文搞懂Python中Pandas数据合并
2023-03-21 13:28:56
AJAX实例:根据邮编自动完成地址信息
2008-03-06 19:44:00
web脚本程序攻击的防范
2007-10-18 13:29:00
举例讲解Python的Tornado框架实现数据可视化的教程
2022-01-16 23:56:52
如何解决django-celery启动后迅速关闭
2022-02-07 10:50:25
Python数据可视化之使用matplotlib绘制简单图表
2022-08-27 19:27:53
Django框架中render_to_response()函数的使用方法
2023-09-03 13:58:49
Pycharm虚拟环境创建并使用命令行指定库的版本进行安装
2022-10-24 18:24:40
盘点十个超级好用的高级Python脚本
2023-12-04 23:41:27
Django实现跨域请求过程详解
2022-08-31 23:45:56
必须会的SQL语句(四) 数据删除和更新
2024-01-29 02:11:51
python类继承与子类实例初始化用法分析
2023-03-31 17:14:24
讲解无法打开用户默认数据库的解决方法
2008-12-05 15:55:00