iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python如何实现图像特效中的油画效果
  • 838
分享到

Python如何实现图像特效中的油画效果

2023-06-22 03:06:58 838人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

小编给大家分享一下python如何实现图像特效中的油画效果,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一 基本原理如下面的两幅图所示,油画用对了地方会使得图像一

小编给大家分享一下python如何实现图像特效中的油画效果,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

一 基本原理

如下面的两幅图所示,油画用对了地方会使得图像一下子显得文艺起来了呢!

Python如何实现图像特效中的油画效果

拍出的图像

Python如何实现图像特效中的油画效果

转化为油画

那么将一幅图像转化为油画类型的图案是怎么实现的呢?为了将一幅普通的图像转化为油画,一般需要以下的几个步骤:

(1)将图像转化为灰度图像

(2)将图像划分为一个个小方框(4*4,6*6...),并统计其中的每一个像素点像素值

(3)对方框中的像素点的的灰度值进行量化(可以参考我之前的关于量化的文章),并对不同的等级的像素点数目进行计数

(4)找到方框中灰度等级最多的像素点,并对这些像素点的灰度值求平均

(5)用平均值代替原像素像素值

二 代码实现

首先还是经典操作,读取图像信息:

"""Author:XiaoMadate:2021/12/10"""import cv2import numpy as npimg = cv2.imread(r'E:\From Zhihu\For the desk\cvyouhua.jpg')img = cv2.resize(img, dsize = None, fx = 0.2, fy = 0.2) #由于该算法计算量较大,首先对其大小进行调整cv2.imshow('W0', img)cv2.waiTKEy(0)#获取图片宽高height, width = img.shape[:2]print(height, width)

得到图像信息如下:

Python如何实现图像特效中的油画效果

Python如何实现图像特效中的油画效果

对图像进行油画特效处理,代码已经添加了注释,有注释的不清楚的地方可以在评论区讨论或者私信留言,看到会回复大家的:

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#将图像转化为灰度图像dst = np.zeros((height, width, 3), np.uint8)#创建一个和原图等大小的全零矩阵#-----------------------------------------------------------------------#使用for循环嵌套来遍历图像中的每一个像素点#-----------------------------------------------------------------------for i in range(2, height-2):    for j in range(2, width-2):        # ----------------------------------------------------------        # 方框为4*4,对方框内像素点进行量化并记录不同等级的像素点的个数        # ------------------------------------------------------------        array1 = np.zeros(8, np.uint8)#将像素点的值量化为8份,定义数组记录不同等级像素点的个数        for m in range(-2, 2):            for n in range(-2, 2):                p1 = int(gray[i+m, j+n]/32)#量化操作                array1[p1] = array1[p1] + 1#该数组用来记录不同量化级别下的像素点,比如array1[0]代表等级一下的像素点的个数,即像素值为(0~64)的像素点的个数        #-----------------------------------------------------------        #在上面的数组中寻找最大值,即寻找数目最多的像素等级        #------------------------------------------------------------        currentMax = array1[0]        l = 0#用来封装最大值在数组中的位置        for k in range(0, 8):            if currentMax < array1[k]:                currentMax = array1[k]                l = k        #------------------------        #求数目最多的像素等级的平均        #------------------------        for m in range(-2, 2):            for n in range(-2, 2):                if gray[i + m, j + n] >= (l * 32) and gray[i + m, j + n] <= ((l + 1) * 32):                    (b, g, r) = img[i + m, j + n]        dst[i, j] = (b, g, r)cv2.imshow('youhua', dst)cv2.waitKey(0)cv2.destroyAllwindows()

得到的结果如下:

Python如何实现图像特效中的油画效果

三 总体实现代码以及保存 

总体的代码以及保存方式如下,大家修改一下读取和保存的路径就可以用了,如果想了解一下实现算法可以先敲一遍代码:

"""Author:XiaoMadate:2021/12/15"""import cv2import numpy as npimport matplotlib.pyplot as pltimg = cv2.imread(r'E:\From Zhihu\For the desk\cvyouhua.jpg')img = cv2.resize(img, dsize = None, fx = 0.2, fy = 0.2) #由于该算法计算量较大,首先对其大小进行调整cv2.imshow('W0', img)cv2.waitKey(0)#获取图片宽高height, width = img.shape[:2]print(height, width)gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#将图像转化为灰度图像dst = np.zeros((height, width, 3), np.uint8)#创建一个和原图等大小的全零矩阵#-----------------------------------------------------------------------#使用for循环嵌套来遍历图像中的每一个像素点#-----------------------------------------------------------------------for i in range(2, height-2):    for j in range(2, width-2):        # ----------------------------------------------------------        # 方框为4*4,对方框内像素点进行量化并记录不同等级的像素点的个数        # ------------------------------------------------------------        array1 = np.zeros(8, np.uint8)#将像素点的值量化为8份,定义数组记录不同等级像素点的个数        for m in range(-2, 2):            for n in range(-2, 2):                p1 = int(gray[i+m, j+n]/32)#量化操作                array1[p1] = array1[p1] + 1#该数组用来记录不同量化级别下的像素点,比如array1[0]代表等级一下的像素点的个数,即像素值为(0~64)的像素点的个数        #-----------------------------------------------------------        #在上面的数组中寻找最大值,即寻找数目最多的像素等级        #------------------------------------------------------------        currentMax = array1[0]        l = 0#用来封装最大值在数组中的位置        for k in range(0, 8):            if currentMax < array1[k]:                currentMax = array1[k]                l = k        #------------------------        #求数目最多的像素等级的平均        #------------------------        for m in range(-2, 2):            for n in range(-2, 2):                if gray[i + m, j + n] >= (l * 32) and gray[i + m, j + n] <= ((l + 1) * 32):                    (b, g, r) = img[i + m, j + n]        dst[i, j] = (b, g, r)cv2.imshow('youhua', dst)cv2.waitKey(0)cv2.destroyAllWindows()#------------------------------------------------#保存图像(以前的文章中介绍过,有不懂的地方可以去考古)#------------------------------------------------plt.rcParams['font.family'] = 'SimHei'       #将全局中文字体改为黑体ImgGroup = [img, gray, dst]ImgTitle = ['原图', '灰度图', '油画']a = plt.figure(figsize=(30, 10)) #创建画布for i in range(0, 3):    ImgGroup[i] = cv2.cvtColor(ImgGroup[i], cv2.COLOR_BGR2RGB)    plt.subplot(1, 3, i + 1)    plt.imshow(ImgGroup[i])    plt.title(ImgTitle[i])    plt.suptitle('图像油画特效')    plt.xticks([])    plt.yticks([])plt.savefig(r'E:\From Zhihu\For the desk\Acvyouhua.jpg')plt.show()

得到结果如下:

Python如何实现图像特效中的油画效果

以上是“Python如何实现图像特效中的油画效果”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网Python频道!

--结束END--

本文标题: Python如何实现图像特效中的油画效果

本文链接: https://www.lsjlt.com/news/302127.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python 实现图像特效中的油画效果
    目录一 基本原理二 代码实现三 总体实现代码以及保存 在前面的文章 Python 计算机视觉(十五)—— 图像特效处理 中我已经介绍了大部分的图像的特效处理,但还是忽略了油画特效的处...
    99+
    2022-11-12
  • Python如何实现图像特效中的油画效果
    小编给大家分享一下Python如何实现图像特效中的油画效果,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一 基本原理如下面的两幅图所示,油画用对了地方会使得图像一...
    99+
    2023-06-22
  • OpenCV-Python实现油画效果的实例
    目录油画的实现原理实现油画效果水彩效果油画的实现原理 油画简单的理解是带有艺术感的图像,色彩相对于原图要更加鲜艳,但却是失真的。 而且对于喜欢欣赏艺术的读者,肯定或多或少关注过油画,...
    99+
    2022-11-12
  • 如何在Python中使用OpenCV实现油画效果
    本篇文章为大家展示了如何在Python中使用OpenCV实现油画效果,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。油画的实现原理油画简单的理解是带有艺术感的图像,色彩相对于原图要更加鲜艳,但却是失真...
    99+
    2023-06-15
  • Python如何实现图像合成微缩效果
    本篇内容主要讲解“Python如何实现图像合成微缩效果”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python如何实现图像合成微缩效果”吧!合成微缩效果前言图像中的模糊效果可以强烈影响被拍摄场...
    99+
    2023-07-05
  • Python如何实现为图像添加下雪特效
    这篇文章主要为大家展示了“Python如何实现为图像添加下雪特效”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Python如何实现为图像添加下雪特效”这篇文章吧。导语也许是为了和音,在立冬这一天...
    99+
    2023-06-22
  • opencv如何实现图像旋转效果
    小编给大家分享一下opencv如何实现图像旋转效果,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!图像旋转:在opencv中首先根据旋转角度和中心获取旋转矩阵,然后根据旋转矩阵进行变换参数:实现代码:import ...
    99+
    2023-06-14
  • opencv如何实现图像缩放效果
    这篇文章主要介绍了opencv如何实现图像缩放效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。图像缩放:图像缩放即对图像的大小进行调整,即放大或者缩小cv2.resize(...
    99+
    2023-06-14
  • Android开发之图形图像与动画(三)Animation效果的XML实现
    使用XML来定义Tween Animation 动画的XML文件在工程中res/anim目录,这个文件必须包含一个根元素,可以使<alpha><scale&g...
    99+
    2022-06-06
    XML 图形图像 android开发 animation 动画 Android
  • Python实现图像手绘效果的方法详解
    目录图像的数组表示图像的RGB色彩模式PIL库图像组成图像的变换图像的手绘效果手绘效果展示代码展示与讲解图像的数组表示 图像的RGB色彩模式 图像一般使用RGB色彩模式,即每个像素...
    99+
    2022-11-11
  • Python实现图像去雾效果的示例代码
    目录修改部分训练测试数据集下载地址修改部分 我利用该代码进行了去雾任务,并对原始代码进行了增删,去掉了人脸提取并对提取人脸美化的部分,如下图 增改了一些数据处理代码,Create_...
    99+
    2022-11-13
  • html5如何实现图片转圈的动画效果
    这篇文章主要介绍了html5如何实现图片转圈的动画效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1.先瞧瞧效果: 2.代码是这...
    99+
    2022-10-19
  • css3如何实现图片消失动画效果
    今天小编给大家分享一下css3如何实现图片消失动画效果的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了...
    99+
    2022-10-19
  • jQuery如何实现图片切换动画效果
    这篇文章主要为大家展示了“jQuery如何实现图片切换动画效果”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“jQuery如何实现图片切换动画效果”这篇文章吧。效...
    99+
    2022-10-19
  • CSS3 如何实现图形下落动画效果
    这篇文章主要讲解了“CSS3 如何实现图形下落动画效果”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“CSS3 如何实现图形下落动画效果”吧!先看效果实现代码<div clas...
    99+
    2023-06-08
  • Python如何实现代码雨动画效果
    本篇内容介绍了“Python如何实现代码雨动画效果”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!代码如下import sysimp...
    99+
    2023-07-04
  • CSS3中怎么实现全景图的动画效果
    这篇文章主要为大家展示了“CSS3中怎么实现全景图的动画效果”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“CSS3中怎么实现全景图的动画效果”这篇文章吧。  ...
    99+
    2022-10-19
  • jQuery如何实现图片推拉门动画效果
    这篇文章主要介绍了jQuery如何实现图片推拉门动画效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。实现方法一:改变图片宽度html+cs...
    99+
    2022-10-19
  • 如何使用css实现3D图像轮转效果
    这篇文章主要为大家展示了“如何使用css实现3D图像轮转效果”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用css实现3D图像轮转效果”这篇文章吧。首先看...
    99+
    2022-10-19
  • C++和OpenCV如何实现图像字符化效果
    今天小编给大家分享一下C++和OpenCV如何实现图像字符化效果的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。实现原理图像字...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作