OpenCV 是一个用于实时计算机视觉应用的 Python 库。OpenCV 是开源的,在图像处理、机器学习和深度学习方面有着巨大的应用。OpenCV 可用于对象检测、分类、笔迹分析等。

OpenCV 可以与 Numpy 等库集成,用于各种数学计算。

计算机视觉的主要目的是理解图像。

OpenCV:它是关于什么的?

使用 OpenCV,我们可以执行许多任务,例如-

  • 读取和写入图像

  • 图像处理

  • 捕获和保存视频

  • 特征检测

OpenCV 代表开源计算机视觉库。它是使用 Python 用于计算机视觉的最流行的库。OpenCV 可供所有人免费使用,因此 OpenCV 可用于各种项目和应用程序。

为我们的图像赋予卡通效果

许多应用程序和网站都提供了为图像赋予卡通效果的工具。年轻一代喜欢这个功能,它在社交媒体上也很受欢迎。在这些应用程序的情况下,我们只需上传我们的图像,然后就会返回具有所需效果的图像。

但是,你有没有想过,它们是如何工作的?

为此,需要进行多次图像转换。在执行此操作时需要考虑的一些重要事项是边缘和颜色数量。

让我们继续看看代码。

import cv2
import numpy as np
import matplotlib.image as img
from matplotlib import pyplot as plt

我们将需要 OpenCV 和 NumPy。

现在,让我们阅读图像。

#reading the image
img = cv2.imread("person.jpeg")

我们已经将图像作为输入。

让我们看看图像数据类型是什么。

#image type
type(img)

输出:  numpy.ndarray

因此,图像基本上是一个多维的 NumPy 数组。

边缘遮罩

在卡通效果中,通常非常强调图像边缘的厚度。

我们可以使用**cv2.adaptiveThreshold()**函数检测边缘。

在我们继续处理边缘之前,我们需要将图像转换为灰度。然后,使用 cv2.medianBlur函数来降低灰度图像的噪声。

让我们继续看看代码:

#Create Edge Mask
def edge_mask(img, line_size, blur_value):gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)gray_blur = cv2.medianBlur(gray, blur_value)edges = cv2.adaptiveThreshold(gray_blur, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, line_size, blur_value)return edges
line_size = 7
blur_value = 7

定义了线条大小和模糊值。为了强调较粗的边缘,采用较大的线条尺寸。

让我们得到边缘。

edges = edge_mask(img, line_size, blur_value)

现在,我们保存图像。

filename = 'edges.jpg'
# Using cv2.imwrite() method
# Saving the image
cv2.imwrite(filename, edges)

输出:

我们可以看到检测到了边缘。

减少颜色数量

照片和草图/卡通之间的主要区别在于不同颜色的数量。与高清照片相比,卡通素描的颜色要少得多。

因此,使用了一种名为颜色量化的方法。这将减少照片中的颜色数量。

K均值聚类算法用于执行该过程。“k”值根据我们需要的颜色数量进行调整。

#colour quantization
#k value determines the number of colours in the image
total_color = 8
k=total_color

在这种情况下,k 的值取为 8。

# Transform the image
data = np.float32(img).reshape((-1, 3))

接下来,图像被转换。

# Determine criteria
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 20, 0.001)

现在,我们实施 K 均值。

# Implementing K-Means
ret, label, center = cv2.kmeans(data, k, None, criteria, 10, cv2.KMEANS_RANDOM_CENTERS)
center = np.uint8(center)
result = center[label.flatten()]
result = result.reshape(img.shape)

让我们保存图像。

filename = 'colour.jpg'
# Using cv2.imwrite() method
# Saving the image
cv2.imwrite(filename, result)

输出:

好的,现在我们看到了一些效果。

颜色量化完成后,我们现在可以减少图像中的噪声。双边滤波器可用于此任务。

生成的图像会稍微模糊,图像清晰度会降低。

blurred = cv2.bilateralFilter(result, d=10, sigmaColor=250,sigmaSpace=250)

让我们保存图像,看看它的外观。

#saving the image
filename = 'blurred.jpg'
# Using cv2.imwrite() method
# Saving the image
cv2.imwrite(filename, blurred)

输出:

完成后,现在我们做最后的卡通效果。

最终图像

#blurred and edges
cartoon = cv2.bitwise_and(blurred, blurred, mask=edges)

现在,我们保存图像。

filename = 'cartoon.jpg'
# Using cv2.imwrite() method
# Saving the image
cv2.imwrite(filename, cartoon)

让我们看看图像是什么样子的。

输出做得很好。图像被赋予了有趣的效果。

OpenCV 可以进行有趣的图像转换。

现在让我们尝试其他东西,这一次,我们也将使用轮廓。

应用带有轮廓的卡通效果

让我们首先正确定义函数。

首先是颜色量化函数。

#Colour Quantization
def ColourQuantization(image, K=9):Z = image.reshape((-1, 3)) Z = np.float32(Z) criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 100, 0.001)compactness, label, center = cv2.kmeans(Z, K, None, criteria, 1, cv2.KMEANS_RANDOM_CENTERS)center = np.uint8(center)res = center[label.flatten()]res2 = res.reshape((image.shape))return res2

这里,对于 K-Means,K 的值取为 9。

现在让我们定义轮廓的函数。

#to get countours
def Countours(image):contoured_image = imagegray = cv2.cvtColor(contoured_image, cv2.COLOR_BGR2GRAY) edged = cv2.Canny(gray, 200, 200)contours, hierarchy = cv2.findContours(edged, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)[-2:]cv2.drawContours(contoured_image, contours, contourIdx=-1, color=6, thickness=1)return contoured_image

在这个函数中,图像首先被转换为灰度,然后检测边缘。最后,还制作了轮廓。

现在,让我们使用该函数。

使用了下图。

image = cv2.imread("person1.jpeg")
coloured = ColourQuantization(image)
contoured = Countours(coloured)
final_image = contoured

在此之后,图像被保存。

filename = 'cartoon_final.jpg'
# Using cv2.imwrite() method
# Saving the image
cv2.imwrite(filename, final_image)

输出:

在这种情况下,输出也很有趣。

通过改变各种参数,可以修改卡通效果。

说到用途,目前这类处理方法主要用于社交媒体和艺术目的。人们可以对他们的图像进行有趣的编辑,并将它们发布到社交媒体上。

要查看代码,请访问:https://github.com/prateekmaj21/Image-Processing-Tasks

☆ END ☆

如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 woshicver」,每日朋友圈更新一篇高质量博文。

扫描二维码添加小编↓

如何使用 OpenCV 为照片添加卡通效果!相关推荐

  1. astar插件下载 就行_PS模拟下雨插件下载 一键为照片添加下雨效果 小伙伴们收货啦...

    今天整理文件,找出来一个挺好玩的PS扩展插件,BBtools出品的模拟下雨插件,可以为照片添加下雨效果,其实就是一些动作的整合,不过偶尔用用还是挺有意思的,插件可以手动控制下雨的角度.密度.风速.雨量 ...

  2. 使用Python,OpenCV对照片模拟长时间曝光效果

    使用Python,OpenCV对照片模拟长时间曝光效果) 1. 效果图 2. 原理 2.1 长时间曝光简介 2.2 结论 3. 源码 参考 这篇博客将介绍如何使用OpenCV和图像处理技术来模拟长时间 ...

  3. 「Photoshop2021入门教程」给照片添加烟雾效果

    如何制作一张烟雾朦胧的效果图片呢?今天小编为大家带来「Photoshop2021入门教程」给照片添加烟雾效果,一起来看看吧! PS打开一张图片 添加一个烟雾图层 选择烟雾图层.然后将鼠标悬停在「图层」 ...

  4. 使用Python+OpenCV将照片变成卡通照片

    正如你可能知道的,素描或创建一个卡通并不总是需要手动完成.如今,许多应用程序可以把你的照片变成卡通照片.但是如果我告诉你,你可以用几行代码创造属于自己的效果呢? 有一个名为OpenCV的库,它为计算机 ...

  5. PS如何给人物照片添加烟雾效果

    动作支持CS4以上版本PS软件,其实之前已经写过很多类似演示教程了,为了新手再写一次演示教程,下面所使用动作为"把人物照片PS成烟雾环绕特效动作",动作可以到陌鱼社区下载. 01. ...

  6. 有没有可以把照片变成卡通版的app?

    想把真人照片转成卡通人物形象,会软件会手绘的大神就自己操作,不会的就找会的做.但随着现在时代飞速发展,即使你不会手绘,也可以通过APP一键生成. 那么什么APP可以一键生成卡通化呢?那就是牛学长图片修 ...

  7. Polarr Photo教程:如何为照片增加云雾效果

    如何为照片添加朦胧效果?非常简单,今天我们就跟随macw来学习Polarr Photo教程:如何为照片增加云雾效果. 图文教程 首先我们使用泼辣修图打开一张照片: 然后我们进入局部调整工具: 新建一个 ...

  8. python头像转卡通_Python实现将照片变成卡通图片的方法【基于opencv】

    本文实例讲述了Python实现将照片变成卡通图片的方法.分享给大家供大家参考,具体如下: 之前的文章介绍了使用Photoshop将照片变成卡通图片,今次介绍用代码来实现这项任务,可以就此探查各种滤镜的 ...

  9. python照片转卡通_Python实现将照片变成卡通图片的方法【基于opencv】

    本文实例讲述了Python实现将照片变成卡通图片的方法.分享给大家供大家参考,具体如下: 之前的文章介绍了使用Photoshop将照片变成卡通图片,今次介绍用代码来实现这项任务,可以就此探查各种滤镜的 ...

最新文章

  1. ERROR 2059 (HY000): Authentication plugin ‘caching_sha2_password‘ cannot be loaded
  2. Scala中的二维数组乘法
  3. 【笔记】JAVA中的泛型和反射
  4. JAVA配置Tomcat
  5. C语言中枚举enum的用法
  6. 返回顶部:js代码篇
  7. access 动态 top 条件_2020年10月抖音直播营销报告_行业动态
  8. java jdk包_Java开发工具包JDK的简介
  9. 海量数据实时计算系统在高并发互联网应用中的原理和实践
  10. 【2022最新Java面试宝典】—— Memcache面试题(23道含答案)
  11. android allow usb debugging,Android USB debugging 功能失效
  12. Git 分支合并到主干
  13. php 微信授权 跨域,微信公众号支付 请求跳转code跨域
  14. 【实例演示】Android安全须知
  15. 十部让你泣不成声的老电影
  16. 物联卡中心:物联网卡运营商优劣对比,你选择哪家?
  17. debounce与throttle区别
  18. 山东省计算机考试模拟,山东省高校计算机等级考试VB考试模拟系统使用说明
  19. 魔兽怀旧服务器维护副本是否重置,魔兽世界怀旧服副本重置时间 魔兽世界怀旧服副本重置时间详解...
  20. windows server 2016 部署FTP服务器

热门文章

  1. android隐私设置
  2. 世界上最遥远的距离(张小娴)
  3. android 光线传感器 light sensor的使用
  4. www.78ajax,Ajax 与异步数据传输
  5. Qt使用QToolButton封装实现开关功能
  6. css3 3d旋转兼容模式下,CSS3 3D 转换
  7. 看完《明朝那些事儿》Mark一下
  8. JS中的Ajax发送请求获取数据流程
  9. labelImg的使用——导入已有标签,避免重复打标签
  10. 研究公司的财务报告和资产负债表