OpenCV实现图片漫画效果的方法

  介绍

这篇文章主要介绍OpenCV实现图片漫画效果的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

我们随手拍摄的照片,很难达到摄影师的水准,因此不管是手机上还是电脑内,都有一些软件可以添加特效让照片更好看,手机拍摄时也有即时的美化效果。不过我比较好奇漫画特效,但是一直在网上看到别人的成品而找不到针对性的软件,因此只有自己实现一下,虽然跟专业的还有差距,但效果还不错。

使用OpenCV,采用Python实现。

对比现实中的画的画,一般是先画出边缘轮廓使整体规划好,再填充颜色使其完整,因此在这里我们也采用这种方式。不过对图片直接操作与从零开始着笔不一样,要将原始图片进行两次不同的处理,再将处理后的两个图片叠加。

漫画中不管是人物还是风景,刻画的细节有限,因此需要把重要以及有特色的部分体现出来,数量要适当。

轮廓通过四步操作:

进口cv2
  
  img=cv2.imread (“example.jpg")
  img_copy=img
  
  #灰度处理
  img_gray=cv2。cv2.COLOR_BGR2GRAY cvtColor (img)
  #平滑操作,去除噪声
  img_blur=cv2。medianBlur (img_gray, 5)
  #通过阈值提取轮廓
  img_edge=cv2.adaptiveThreshold (img_blur,
  255年,
  cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
  cv2.THRESH_BINARY,
  blockSize=9,
  C=3)
  3 #将灰度图片变成通道,用于后续合并
  img_edge=cv2。cvtColor (img_edge cv2.COLOR_GRAY2BGR) 

这里通过二值化的方式将轮廓提取出来,采用自适应阈值二值化函数,基于像素周围的小区域确定像素的阈值,可以将有区别的部分的界限提取出来,恰如漫画对象中黑色粗体轮廓,且细节得当。因阈值处理只能针对灰度图像,因此需要先将彩色图像转换为单通道的灰度图像,且为了去除描绘对象内部的冗余细节,还要对图像进行平滑处理,使颜色过度得缓慢一些,毕竟漫画中颜色的应用没有现实生活中那么复杂,这样得出的轮廓就比较好。

看一下效果:

 OpenCV实现图片漫画效果的方法”> <br/> </p> <p>对比原图:<br/> </p> <p> <img src= _的范围(2)   #降低分辨率   img_copy=cv2.pyrDown (img_copy)   在范围内(5):_   #图像平滑,保留边缘   img_copy=cv2。bilateralFilter (img_copy d=9, sigmaColor=9, sigmaSpace=7)   img_copy=cv2。调整(img_copy (img。形状[1],img.shape [0]),   插值=cv2.INTER_CUBIC)

颜色要比较平滑,不能像现实生活中这么细致,先采用图像金字塔将分辨率降低,并采用双边滤波去除噪声,可以平滑平面区域,同时保持边缘清晰。分辨率降低后图像会变小,因此最后要将图像放大为原来的大小,虽然图像金字塔有专门的方法可以将图像放大,但是尺寸可能会有一两点变化,合并过程中要两个图像完全一样大,所以这里直接按尺寸放大。

看一下效果:

 OpenCV实现图片漫画效果的方法

将两个重要的方法介绍一下:

分辨率降低:<代码> cv2。pyrDown (src, dst=None, dstsize=None, borderType=None)

OpenCV实现图片漫画效果的方法