欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-07 15:15:24
opencv的全称是:open source computer vision library。opencv是一个基于(开源)发行的跨平台计算机视觉库,可以运行在linux、windows和mac os...

opencv的全称是:open source computer vision library。opencv是一个基于(开源)发行的跨平台计算机视觉库,可以运行在linux、windows和mac os操作系统上。它轻量级而且高效——由一系列 c 函数和少量 c++ 类构成,同时提供了python、ruby、matlab等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

本文给大家介绍基于opencv的图像卡通化,主要工具是高斯滤波器、细节增强滤波器、双边滤波、拉普拉斯滤波器。

铅笔素描效果

将输入图像灰度化后及逆行高斯滤波,其中由于高斯滤波服从正态分布,核数越大、越模糊最后一步是将原始灰度图像除以模糊后的灰度图像。这样可以得出两个图像中每个像素之间的变化率。模糊效果越强,每个像素的值相对于其原点的变化就越大,因此,它使我们的铅笔素描更加清晰。其中第一幅图核数为25,第二幅图核数为75。(领会除法运用在此处的妙处)

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

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.将锐化后的图像与边缘图像进行按位与得到最终效果图。

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

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

抽象效果

拉普拉斯滤波器:通过对象内部的灰度级和图像背景强度来突出对象的边缘

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

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图像卡通化内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!