基于Opencv的图像卡通化实现代码

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()

到此这篇关于基于Opencv的图像卡通化实现代码的文章就介绍到这了,更多相关Opencv图像卡通化内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 使用OpenCV实现人脸图像卡通化的示例代码

    引言 通过前面的文章我们已经了解到OpenCV 是一个用于计算机视觉和机器学习的开源 python 库.它主要针对实时计算机视觉和图像处理.它用于对图像执行不同的操作,这些操作使用不同的技术对图像进行转换.在本文中,我们将实现使用OpenCV将人脸图像卡通化. 让我们从导入必需的库开始! import cv2 import numpy as np 第一次变换(卡通化) 在这个转换中,我们将找到图像的边缘,并使用双边滤波器和位操作符制作一个卡通化的图像. # Reading the Image i

  • 基于Opencv的图像卡通化实现代码

    OpenCV的全称是:Open Source Computer Vision Library.OpenCV是一个基于(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows和Mac OS操作系统上.它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python.Ruby.MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法. 本文给大家介绍基于Opencv的图像卡通化,主要工具是高斯滤波器.细节增强滤波器.双边滤波.拉普拉斯滤波器. 铅笔素描

  • python基于opencv 实现图像时钟

    解决方案详解 绘制表盘 表盘上只有60条分/秒刻线和12条小时刻线,当然还有表盘的外部轮廓圆,也就是重点在如何画72根线.先把简单的圆画出来: import cv2 as cv import math import datetime import numpy as np margin = 5 # 上下左右边距 radius = 220 # 圆的半径 center = (center_x, center_y) = (225, 225) # 圆心 # 1. 新建一个画板并填充成白色 img = np

  • Android基于OpenCV实现图像修复

    目录 API 操作 图像修复 实际应用中,图像常常容易受损,如存在污渍的镜头.旧照片的划痕.人为的涂画(比如马赛克),亦或是图像本身的损坏.将受到损坏的图像尽可能还原成原来的模样的技术,称之为图像修复.所谓修复,就代表图像大部分内容是完好的,所以,图像修复的原理,就是用完好的部分去推断受损部分的信息,特别是完好部分与受损部分的交界处,即受损区域的边缘,在这个推断过程中尤为重要. OpenCV给我们提供了inpaint方法来实现这个功能,并提供了两种图像修复的算法: 基于Navier-Stokes

  • Python基于opencv的图像压缩算法实例分析

    本文实例讲述了Python基于opencv的图像压缩算法.分享给大家供大家参考,具体如下: 插值方法: CV_INTER_NN - 最近邻插值, CV_INTER_LINEAR - 双线性插值 (缺省使用) CV_INTER_AREA - 使用象素关系重采样.当图像缩小时候,该方法可以避免波纹出现.当图像放大时,类似于 CV_INTER_NN 方法.. CV_INTER_CUBIC - 立方插值. 函数 cvResize 将图像 src 改变尺寸得到与 dst 同样大小.若设定 ROI,函数将按

  • python 基于opencv 绘制图像轮廓

    图像轮廓概念 轮廓是一系列相连的点组成的曲线,代表了物体的基本外形. 谈起轮廓不免想到边缘,它们确实很像.简单的说,轮廓是连续的,边缘并不全都连续(下图).其实边缘主要是作为图像的特征使用,比如可以用边缘特征可以区分脸和手:而轮廓主要用来分析物体的形态,比如物体的周长和面积等,可以说边缘包括轮廓. 寻找轮廓的操作一般用于二值图像,所以通常会使用阈值分割或Canny边缘检测先得到二值图. 注意:寻找轮廓是针对白色物体的,一定要保证物体是白色,而背景是黑色,不然很多人在寻找轮廓时会找到图片最外面的一

  • Android基于OpenCV实现图像脱色

    目录 脱色 原理 API 操作 效果 源码 脱色 Imgproc.cvtColor(rgb, gray, Imgproc.COLOR_RGB2GRAY)可以快速的实现图片脱色,其通过简单的计算将三通道图像转换成单通道图像,经典的灰度转换公式如下: 但是转换过的图像存在对比度丢失,无法区分颜色的问题.OpenCV给我们提供另外一种脱色方法Photo.decolor,旨在最大限度的保留图片对比度. 原理 论文详情:www.cse.cuhk.edu.hk/~leojia/pro- 论文PDF:www.

  • openCV实现图像融合的示例代码

    目录 1. 概念 2. 流程 3 代码 1. 概念 图像融合: 两幅图片叠加在一起,形成前景背景的效果. 2. 流程 (1)读入要融合的两幅图片.(2)把两幅图片调整到统一大小,方便下一步叠加.(3)对两幅图片按照一定的权重相加.(4)显示图片.img1,img2 --> resize --> cv2.addWeighted()–>show addWeighted方法: 函数原型: void addWeighted(InputArray src1, double alpha, Input

  • Android基于OpenCV实现图像金字塔

    目录 图像金字塔 高斯金字塔 拉普拉斯金字塔 API 下采样 上采样 操作 操作 效果 源码 图像金字塔 图像金字塔是图像中多尺度表达的一种,最主要用于图像的分割,是一种以多分辨率来解释图像的有效但概念简单的结构. 图像金字塔最初用于机器视觉和图像压缩,一幅图像的金字塔是一系列以金字塔形状排列的分辨率逐步降低,且来源于同一张原始图的图像集合.其通过梯次向下采样获得,直到达到某个终止条件才停止采样. 金字塔的底部是待处理图像的高分辨率表示,而顶部是低分辨率的近似. 我们将一层一层的图像比喻成金字塔

  • Python Opencv实现图像轮廓识别功能

    本文实例为大家分享了python opencv识别图像轮廓的具体代码,供大家参考,具体内容如下 要求:用矩形或者圆形框住图片中的云朵(不要求全部框出) 轮廓检测 Opencv-Python接口中使用cv2.findContours()函数来查找检测物体的轮廓. import cv2 img = cv2.imread('cloud.jpg') # 灰度图像 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 二值化 ret, binary = cv2.th

随机推荐