您现在的位置: 鱼腥草 > 鱼腥草栽培 > 正文 > 正文

如何使用OpenCV为照片添加卡通效

  • 来源:本站原创
  • 时间:2021/11/30 15:39:12

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

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

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

OpenCV:它是关于什么的?

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

读取和写入图像

图像处理

捕获和保存视频

特征检测

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

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

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

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

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

让我们继续看看代码。

importcv2importnumpyasnpimportmatplotlib.imageasimgfrommatplotlibimportpyplotasplt

我们将需要OpenCV和NumPy。

现在,让我们阅读图像。

#readingtheimageimg=cv2.imread("person.jpeg")

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

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

#imagetypetype(img)

输出:numpy.ndarray

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

边缘遮罩

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

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

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

让我们继续看看代码:

#CreateEdgeMaskdefedge_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,,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,line_size,blur_value)returnedges

line_size=7blur_value=7

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

让我们得到边缘。

edges=edge_mask(img,line_size,blur_value)

现在,我们保存图像。

filename=edges.jpg#Usingcv2.imwrite()method#Savingtheimagecv2.imwrite(filename,edges)

输出:

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

减少颜色数量

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

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

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

#colourquantization#kvaluedeterminesthenumberofcoloursintheimagetotal_color=8k=total_color

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

#Transformtheimagedata=np.float32(img).reshape((-1,3))

接下来,图像被转换。

#Determinecriteriacriteria=(cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER,20,0.)

现在,我们实施K均值。

#ImplementingK-Meansret,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#Usingcv2.imwrite()method#Savingtheimagecv2.imwrite(filename,result)

输出:

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

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

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

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

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

#savingtheimagefilename=blurred.jpg#Usingcv2.imwrite()method#Savingtheimagecv2.imwrite(filename,blurred)

输出:

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

最终图像

#blurredandedgescartoon=cv2.bitwise_and(blurred,blurred,mask=edges)

现在,我们保存图像。

filename=cartoon.jpg#Usingcv2.imwrite()method#Savingtheimagecv2.imwrite(filename,cartoon)

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

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

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

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

应用带有轮廓的卡通效果

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

首先是颜色量化函数。

#ColourQuantizationdefColourQuantization(image,K=9):Z=image.reshape((-1,3))Z=np.float32(Z)criteria=(cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER,,0.)


本文编辑:佚名
转载请注明出地址  http://www.yuxingcaoa.com/yxczp/9693.html

  • 上一篇文章:
  • 下一篇文章: 没有了
  • 热点文章

    • 没有任何图片文章
    • 没有热点文章
    推荐文章

    • 没有任何图片文章
    • 没有推荐文章

    Copyright © 2012-2020 鱼腥草版权所有



    现在时间: