本文小编为大家详细介绍“Opencv怎么实现图像卡通化效果”,内容详细,步骤清晰,细节处理妥当,希望这篇“Opencv怎么实现图像卡通化效果”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
OpenCV的全称是:Open Source Computer Vision Library。OpenCV是一个基于(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
将输入图像灰度化后及逆行高斯滤波,其中由于高斯滤波服从正态分布,核数越大、越模糊。最后一步是将原始灰度图像除以模糊后的灰度图像。这样可以得出两个图像中每个像素之间的变化率。模糊效果越强,每个像素的值相对于其原点的变化就越大,因此,它使我们的铅笔素描更加清晰。其中第一幅图核数为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怎么实现图像卡通化效果”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。