利用Opencv实现图片的油画特效实例


Posted in Python onFebruary 28, 2021

一、方法原理(步骤)

1.将彩色图片转换为灰度图片(调用opencv的cvtColor()方法);

2.将图片分割为若干个小方块,后面会统一小方块中每一个像素的灰度值;

3.将0-255的灰度值划分为几个等级,并把上一步处理的结果映射到这些范围内。例如0-255一共256个灰度等级,把它划分为四个段,即每段有64个灰度等级(0-63为第一段,64-127为第二段,128-191为第三段,192-255为第四段);

4.找到每个小方块中,最多灰度等级的所有像素,并求这些像素的均值;

5.用上一步得到的每个小方块的均值,来替换每个小方块中的所有像素值,即可实现油画效果。

二、代码实现

首先导入包:

import numpy as np
import cv2

读取原图,得到原图的宽高信息:

img=cv2.imread('ziliao/image00.JPG',1)
imInfo=img.shape
height=imInfo[0]
width=imInfo[1]

完成彩色图片向灰度图片的转化:

gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 
'''该函数用于颜色的转换,第一个参数为待处理的原图,
第二个参数表示转换的颜色'''

本实例中将图片分割为若干个8×8的小方块,将0-255的灰度值分为8个等级,下面定义了一个数组array1来装载这8个等级中的像素个数,然后找出每个小方块中包含最多像素的等级,如下:

gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
dst=np.zeros((height,width,3),np.uint8)
for i in range(4,height-4):
  for j in range(4,width-4):
    array1 = np.zeros(8, np.uint8) #用于存储每个灰度等级的像素个数
    for m in range(-4, 4): #计算8*8小方块中的array1的值
      for n in range(-4,4):
        p1 = int(gray[i + m, j + n] / 32) #除以32得到该点应该位于第几个灰度等级
        array1[p1] = array1[p1] + 1
    currentMax = array1[0]
    l = 0

    for k in range(0,8): #找到像素点最多的那个灰度等级
      if currentMax<array1[k]:
        currentMax = array1[k]
        l = k
     #以下方法是简化处理了,也可以按前文所说的那样求均值处理
    for m in range(-4,4):
      for n in range(-4,4):
        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('img',img)
cv2.imshow('dst',dst)
cv2.waitKey(0)

三、运行结果

左为原图

利用Opencv实现图片的油画特效实例

四、完整代码

import numpy as np
import cv2

img=cv2.imread('ziliao/image00.png',1)
imInfo=img.shape
height=imInfo[0]
width=imInfo[1]

gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
dst=np.zeros((height,width,3),np.uint8)
for i in range(4,height-4):
  for j in range(4,width-4):
    array1 = np.zeros(8, np.uint8)
    for m in range(-4, 4):
      for n in range(-4,4):
        p1 = int(gray[i + m, j + n] / 32)
        array1[p1] = array1[p1] + 1
    currentMax = array1[0]
    l = 0

    for k in range(0,8):
      if currentMax<array1[k]:
        currentMax = array1[k]
        l = k
    for m in range(-4,4):
      for n in range(-4,4):
        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('img',img)
cv2.imshow('dst',dst)
cv2.waitKey(0)

总结

到此这篇关于利用Opencv实现图片的油画特效实例的文章就介绍到这了,更多相关Opencv图片油画特效内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
教你如何将 Sublime 3 打造成 Python/Django IDE开发利器
Jul 04 Python
Python中的True,False条件判断实例分析
Jan 12 Python
Python导入oracle数据的方法
Jul 10 Python
python生成验证码图片代码分享
Jan 28 Python
Python中import机制详解
Nov 14 Python
浅谈python中拼接路径os.path.join斜杠的问题
Oct 23 Python
Python网页正文转换语音文件的操作方法
Dec 09 Python
对Python 检查文件名是否规范的实例详解
Jun 10 Python
python实现在cmd窗口显示彩色文字
Jun 24 Python
使用PyTorch实现MNIST手写体识别代码
Jan 18 Python
Python爬虫教程知识点总结
Oct 19 Python
Python机器学习之底层实现KNN
Jun 20 Python
利用python实现后端写网页(flask框架)
Feb 28 #Python
python pyg2plot的原理知识点总结
Feb 28 #Python
python在协程中增加任务实例操作
Feb 28 #Python
python 制作本地应用搜索工具
Feb 27 #Python
如何用Python进行时间序列分解和预测
Mar 01 #Python
Pytorch - TORCH.NN.INIT 参数初始化的操作
Feb 27 #Python
python FTP编程基础入门
Feb 27 #Python
You might like
PHP通过header实现文本文件下载的代码
2010/08/08 PHP
PHP Session_Regenerate_ID函数双释放内存破坏漏洞
2011/01/27 PHP
PHP版网站缓存加快打开速度的方法分享
2012/06/03 PHP
PHP命名空间(Namespace)的使用详解
2013/05/04 PHP
zf框架的db类select查询器join链表使用示例(zend框架)
2014/03/14 PHP
php使用pclzip类实现文件压缩的方法(附pclzip类下载地址)
2016/04/30 PHP
PHP基于SimpleXML生成和解析xml的方法示例
2017/07/17 PHP
php mysql数据库操作类(实例讲解)
2017/08/06 PHP
浅说js变量
2011/05/25 Javascript
jquery图片放大功能简单实现
2013/08/01 Javascript
JS冒泡事件的快速解决方法
2013/12/16 Javascript
js验证IP及子网掩码的合法性有效性示例
2014/04/30 Javascript
jQuery实现限制textarea文本框输入字符数量的方法
2015/05/28 Javascript
js实现文本框支持加减运算的方法
2015/08/19 Javascript
JS在浏览器中解析Base64编码图像
2017/02/09 Javascript
JavaScript表单验证实现代码
2017/05/22 Javascript
js案例之鼠标跟随jquery版(实例讲解)
2017/07/21 jQuery
laravel5.3 vue 实现收藏夹功能实例详解
2018/01/21 Javascript
iview中Select 选择器多选校验方法
2018/03/15 Javascript
JS内部事件机制之单线程原理
2018/07/02 Javascript
VueCli3.0中集成MockApi的方法示例
2019/07/05 Javascript
对python中的高效迭代器函数详解
2018/10/18 Python
python实现图片筛选程序
2018/10/24 Python
python配置grpc环境
2019/01/01 Python
解决python中的幂函数、指数函数问题
2019/11/25 Python
Python 实现3种回归模型(Linear Regression,Lasso,Ridge)的示例
2020/10/15 Python
基于Html5 canvas实现裁剪图片和马赛克功能及又拍云上传图片 功能
2019/07/09 HTML / CSS
中国最大的团购网站:聚划算
2016/09/21 全球购物
Burberry英国官网:英国标志性奢侈品牌
2017/03/29 全球购物
Hertz荷兰:荷兰和全球租车
2018/01/07 全球购物
香蕉共和国加拿大官网:Banana Republic加拿大
2018/08/06 全球购物
JACK & JONES荷兰官网:男士服装和鞋子
2021/03/07 全球购物
留学生如何写好自荐信
2013/12/27 职场文书
法律系毕业生自荐信范文
2014/03/27 职场文书
运动会开幕式致辞
2015/07/29 职场文书
自动在Windows中运行Python脚本并定时触发功能实现
2021/09/04 Python