【图像处理】使用 OpenCV 将您的照片变成卡通

这篇具有很好参考价值的文章主要介绍了【图像处理】使用 OpenCV 将您的照片变成卡通。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【图像处理】使用 OpenCV 将您的照片变成卡通,图像处理百汇园,opencv,人工智能,计算机视觉
图像到卡通

一、说明

        在当今世界,我们被图像和视频所包围。从社交媒体到广告,图像已成为一种强大的交流媒介。但是你有没有想过,如果你能把你的照片变成卡通会发生什么?想象一下,为您最喜欢的照片创建动画版本,或者将肖像转换为异想天开的插图。

        在本文中,我们将探讨如何使用 Python 中的 OpenCV 库将图像转换为卡通。OpenCV 是一个功能强大的计算机视觉库,为图像和视频处理提供了广泛的功能,包括边缘检测、颜色转换和过滤。我们将使用这些工具在给定的图像上创建卡通效果。

        为此,我们将首先导入必要的模块并加载输入图像。接下来,我们将对图像应用一系列转换,包括边缘检测、颜色量化和双边滤波。最后,我们将结合这些转换,在输入图像上创建卡通效果。在整篇文章中,我们将提供有关如何使用 OpenCV 实现每个转换的分步说明。在本文结束时,您将清楚地了解如何使用 OpenCV 在任何输入图像上创建卡通效果。因此,让我们深入了解如何使用OpenCV将图像转换为卡通!

二、导入必要的库 

import cv2
import numpy as np
import os

2.1 代码说明:

  • import cv2导入 OpenCV 库,该库为图像和视频处理提供了广泛的功能。
  • import numpy as np导入 NumPy 库,这是一个流行的库,用于在 Python 中处理数组和矩阵。
  • import os导入操作系统模块,该模块提供了一种与文件系统交互的方法。

总的来说,这段代码导入了在 Python 中使用 OpenCV 执行图像处理的必要模块。

2.2 在 Python 中使用 OpenCV 显示输入图像:

img = cv2.imread('original_picture.jpg')
cv2.imshow("original", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

【图像处理】使用 OpenCV 将您的照片变成卡通,图像处理百汇园,opencv,人工智能,计算机视觉

原始图片

2.3 代码说明:

  • cv2.imread('original_picture.jpg')将名为“original_picture.jpg”的输入图像加载到名为 的变量中。这是您想要的图片的名称。img
  • cv2.imshow("original", img) 在标题为“原始”的窗口中显示输入图像。
  • cv2.waitKey(0)等待按键。参数 0 表示程序将无限期等待,直到按下某个键。
  • cv2.destroyAllWindows() 关闭所有打开的窗口。

三、使用 K 均值聚类进行颜色量化:

def color_quantization(img, k):
# 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)

# 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)
  return result

3.1 功能说明:

  • 该函数采用两个参数 — 输入图像和聚类数。imgk
  • 输入图像首先使用 NumPy 库转换为像素值的二维数组。
  • 为 K-Means 聚类分析算法确定一组条件,包括聚类中心的最大迭代次数和最小变化。
  • K 均值聚类分析算法使用 cv2.kmeans() 函数应用于数据,具有指定数量的聚类和条件。如果变量发生变化,该函数将生成具有不同数量颜色簇的新量化图像。较小的值 将导致具有较少颜色的量化图像,而较大的值 将导致具有更多颜色的量化图像。kkk
  • 生成的聚类中心使用 NumPy 函数转换为 8 位整数。np.uint8()
  • 原始图像被展平为像素值的一维数组,每个像素被分配到其最近的聚类中心。
  • 然后将生成的像素值数组重新塑造回原始输入图像的形状。
  • 生成的量化图像作为函数的输出返回。

3.2 创建边缘遮罩:

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

3.3 功能说明:

  • 该函数有三个参数——输入图像、蒙版中线条的大小和应用于灰度图像的模糊程度。如果变量发生变化,掩码中线条的大小也会相应更改。较小的值将导致更细的线条,而较大的值将导致较粗的线条。imgline_sizeblur_valueline_size
  • 首先使用该函数将输入图像转换为灰度。cv2.cvtColor()
  • 然后使用具有指定 .如果变量发生变化,应用于灰度图像的模糊级别将发生变化。较小的值将导致较少的模糊,而较大的值将导致更多的模糊。cv2.medianBlur()blur_valueblur_value
  • 通过使用该功能对模糊的灰度图像应用自适应阈值来创建边缘遮罩。这种自适应阈值方法根据每个像素周围局部邻域中像素值的平均值计算每个像素的阈值。cv2.adaptiveThreshold()
  • 生成的边缘掩码作为函数的输出返回。

四、从图像生成铅笔素描:

line_size = 7
blur_value = 7

edges = edge_mask(img, line_size, blur_value)
cv2.imwrite('pencil_sketch.jpg', edges)
cv2.imshow('pencil sketch', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()

【图像处理】使用 OpenCV 将您的照片变成卡通,图像处理百汇园,opencv,人工智能,计算机视觉

铅笔素描

4.1 代码说明:

  • 代码首先将 和 的值设置为 7。如果 和 的值发生变化,则生成的铅笔素描将受到影响。较小的 值将导致线条越细,而较大的值将导致线条变粗。同样,较小的 值将导致较少的模糊,而较大的值将导致更多的模糊,这可能会影响铅笔草图的整体外观。line_sizeblur_valueline_sizeblur_valueline_sizeblur_value
  • 使用具有指定和 的函数从输入图像生成边缘掩码。imgedge_mask()line_sizeblur_value
  • 生成的边缘遮罩使用该函数保存为名为“pencil_sketch.jpg”的新图像文件。cv2.imwrite()
  • 然后使用该函数显示铅笔素描图像。cv2.imshow()
  • 程序等待使用该函数的用户按键。cv2.waitKey(0)
  • 最后,使用该功能关闭所有打开的窗口。cv2.destroyAllWindows()

4.2 从图像生成卡通:

total_color = 9
img = color_quantization(img, total_color)
cv2.imwrite('cartoonize.jpg', img)
cv2.imshow('Cartoonize', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

【图像处理】使用 OpenCV 将您的照片变成卡通,图像处理百汇园,opencv,人工智能,计算机视觉

卡通化图片

4.3 代码说明:

  • 代码首先将值设置为 9。如果值发生变化,则生成的卡通图像将受到影响。较小的 值将导致较少的颜色,而较大的值将导致更多的颜色,这可能会影响卡通图像的整体外观。total_colortotal_colortotal_color
  • 调用该函数以将输入图像中的颜色数减少到指定的 。color_quantization()imgtotal_color
  • 生成的图像被保存为一个名为“cartoonize.jpg”的新图像文件使用该功能。cv2.imwrite()
  • 然后使用该功能显示卡通图像。cv2.imshow()
  • 程序等待使用该函数的用户按键。cv2.waitKey(0)
  • 最后,使用该功能关闭所有打开的窗口。cv2.destroyAllWindows()

五、对图像应用双边滤镜:

bilateral = cv2.bilateralFilter(img, 15, 75, 75)
# Save the output.
cv2.imwrite('blur.jpg', bilateral)
img = cv2.imread('blur.jpg')
cv2.imshow("Blur", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

【图像处理】使用 OpenCV 将您的照片变成卡通,图像处理百汇园,opencv,人工智能,计算机视觉

双边滤波

5.1 代码说明:

  • 代码首先使用该函数将双边筛选器应用于输入图像。筛选器大小设置为 15,西格玛颜色和西格玛空间的值均设置为 75。imgcv2.bilateralFilter()
  • 更改双边滤镜的内核大小、西格玛颜色和西格玛空间的值将影响应用于图像的模糊级别。较小的内核大小和 sigma 值将导致较少的模糊,而较大的值将导致更多的模糊。更改这些值可能会更改生成的模糊图像的整体外观。
  • 生成的模糊图像被保存为一个名为“blur.jpg”的新图像文件,使用该功能。cv2.imwrite()
  • 然后使用该函数将模糊的图像加载回内存并分配给变量。cv2.imread()img

5.2 总输出:

【图像处理】使用 OpenCV 将您的照片变成卡通,图像处理百汇园,opencv,人工智能,计算机视觉

5.3 另一种方式:

import cv2
import numpy as np

# Load the input image
img = cv2.imread('input_image.jpg')

# Apply bilateral filter to smooth the image
img_smooth = cv2.bilateralFilter(img, 9, 75, 75)

# Convert the image to grayscale
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# Apply edge detection to the grayscale image
edges = cv2.Canny(gray, 100, 200)

# Apply color quantization to the smoothed image
img_quant = cv2.cvtColor(img_smooth, cv2.COLOR_BGR2RGB)
Z = img_quant.reshape((-1,3))
Z = np.float32(Z)
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)
K = 8
ret,label,center=cv2.kmeans(Z,K,None,criteria,10,cv2.KMEANS_RANDOM_CENTERS)
center = np.uint8(center)
res = center[label.flatten()]
res2 = res.reshape((img_quant.shape))

# Combine the edges and color quantization to create the cartoon effect
cartoon = cv2.bitwise_and(res2, res2, mask=edges)

# Display the output image and save it
cv2.imshow('Cartoon', cartoon)
cv2.waitKey(0)
cv2.destroyAllWindows()

        总之,使用 OpenCV 将图像转换为卡通是一种有趣且创造性的方式,可以为您的照片赋予新的生命。在本文中,我们讨论了如何使用 OpenCV 通过应用各种图像处理技术(如颜色量化、边缘检测和双边过滤)将图像转换为卡通。通过结合这些技术,我们能够从普通照片中制作出风格化的卡通图像。

        虽然本文中提供的代码是一个很好的起点,但有很多方法可以自定义转换过程以获得不同的结果。尝试不同的参数值或应用其他图像处理技术有助于创建独特且个性化的卡通风格图像。有了一点创造力和一些图像处理技术的知识,可能性是无穷无尽的。文章来源地址https://www.toymoban.com/news/detail-611314.html

到了这里,关于【图像处理】使用 OpenCV 将您的照片变成卡通的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【图像处理】经营您的第一个U-Net以进行图像分割

            AI厨师们,今天您将学习如何准备计算机视觉中最重要的食谱之一:U-Net。本文将叙述:1 语义与实例分割,2 图像分割中还使用了其他损失,例如Jaccard损失,焦点损失;3 如果2D图像分割对您来说太容易了,您可以查看3D图像分割,因为模型要大得多,因此要困难得

    2024年02月15日
    浏览(56)
  • Python|OpenCV-基本使用和图像处理(1)

    前言 本文是该专栏的第1篇,后面将持续分享OpenCV计算机视觉的干货知识,记得关注。 OpenCV是基于开源许可的跨平台计算机 视觉库 ,起初OpenCV是由Intel公司开发的,直到后面由非营利组织进行维护。提到OpenCV,就不得不说它提供了大量的图像和视频处理函数,使得计算机视觉

    2024年02月12日
    浏览(60)
  • 使用Python和OpenCV进行图像处理和分析

    简介: 图像处理和分析是计算机视觉领域的重要组成部分。本文将介绍如何使用Python编程语言和OpenCV库进行图像处理和分析。我们将涵盖图像读取、显示、滤波、边缘检测和图像分割等常见的图像处理操作,并提供相应的代码示例。 安装OpenCV: 首先,我们需要安装OpenCV库。

    2024年02月12日
    浏览(62)
  • Python使用Opencv图像处理方法完成手势识别(一)

    由于是使用Opencv完成手势识别,所以首先利用颜色特征是对手的颜色进行提取,获得HSV的最小值与最大值。 HSV颜色空间阈值主要是靠 Trackbar 调节阈值和 cv2.inRange 来生成掩膜来提取。 这是我写的HSV阈值获取的代码: 使用方法: 运行代码之后,从第一个依次调节滑块,使画面中

    2024年02月05日
    浏览(77)
  • 计算机视觉传统图像处理库opencv的使用

    人工智能领域的图像处理分支,整理了计算机视觉传统图像处理库opencv的使用网址链接。 opencv使用范围,主要用在计算机视觉、视频分析、机器学习、医学影像处理、自动驾驶、工业检测、游戏开发上。 1):opencv效果视频 opencv10个应用场景 - 知乎 2):opencv介绍 AI必备技能

    2024年02月09日
    浏览(46)
  • iTOP-3568开发板使用OpenCV处理图像-颜色转换

    本小节代码在配套资料“iTOP-3568 开发板\\03_【iTOP-RK3568 开发板】指南教程 \\04_OpenCV 开发配套资料\\05”目录下,如下图所示: cv2.cvtColor()函数功能: 将一幅图像从一个色彩空间转换到另一个色彩空间。 函数原型: cv2.cvtColor(src,code,dst=None,dstCn=None) 参数定义: src:要转换的源文件

    2024年02月12日
    浏览(40)
  • Python图像处理:使用OpenCV对图像进行HSV和RGB表示法的转换

    Python图像处理:使用OpenCV对图像进行HSV和RGB表示法的转换 在图像处理中,我们经常需要使用不同的颜色表示法来处理图像。在OpenCV中,我们可以使用HSV(色相、饱和度、亮度)表示法来替代标准的RGB(红、绿、蓝)表示法来处理图像。HSV表示法更为直观和易于使用,因为它将

    2024年02月06日
    浏览(77)
  • C#使用OpenCv(OpenCVSharp)图像处理实例:亮度、对比度、灰度

    本文实例演示C#语言中如何使用OpenCv(OpenCVSharp)对图像进行亮度、对比度、灰度处理。 目录 亮度和对比度原理 灰度 实例 图像亮度通俗理解便是图像的明暗程度,数字图像 f(x,y) = i(x,y) r(x, y) ,如果灰度值在[0,255]之间,则 f 值越接近0亮度越低,f 值越接近255亮度越

    2024年02月13日
    浏览(76)
  • C#使用OpenCv(OpenCVSharp)图像全局二值化处理实例

    本文实例演示C#语言中如何使用OpenCv(OpenCVSharp)对图像进行全局二值化处理。 目录 图像二值化原理 函数原型 参数说明 实例 效果

    2024年02月13日
    浏览(50)
  • C#使用OpenCv(OpenCVSharp)图像局部二值化处理实例

      本文实例演示C#语言中如何使用OpenCv(OpenCVSharp)对图像进行局部二值化处理。 目录 图像二值化原理 局部二值化 自适应阈值 实例 效果

    2024年02月13日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包