利用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 相关文章推荐
解决谷歌搜索技术文章时打不开网页问题的python脚本
Feb 10 Python
Python 变量类型及命名规则介绍
Jun 08 Python
Python切片用法实例教程
Sep 08 Python
Python编程中的异常处理教程
Aug 21 Python
Python编程修改MP3文件名称的方法
Apr 19 Python
为什么选择python编程语言入门黑客攻防 给你几个理由!
Feb 02 Python
Python3.4 tkinter,PIL图片转换
Jun 21 Python
数组保存为txt, npy, csv 文件, 数组遍历enumerate的方法
Jul 09 Python
python3射线法判断点是否在多边形内
Jun 28 Python
Python使用matplotlib 模块scatter方法画散点图示例
Sep 27 Python
python和pywin32实现窗口查找、遍历和点击的示例代码
Apr 01 Python
python脚本定时发送邮件
Dec 22 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
Session的工作方式
2006/10/09 PHP
PHP define函数的使用说明
2008/08/27 PHP
PHP三层结构(上) 简单三层结构
2010/07/04 PHP
PHP中构造函数和析构函数解析
2014/10/10 PHP
PHP中file_exists使用中遇到的问题小结
2016/04/05 PHP
WHOOPS PHP调试库的使用
2017/09/29 PHP
laravel 实现向公共模板中传值 (view composer)
2019/10/22 PHP
js实现简单模态窗口,背景灰显
2008/11/14 Javascript
js检测输入内容全为空格的方法
2014/05/03 Javascript
javascript判断是否按回车键并解决浏览器之间的差异
2014/05/13 Javascript
JavaScript随机打乱数组顺序之随机洗牌算法
2016/08/02 Javascript
JavaScript 数据类型详解
2017/03/13 Javascript
动态Axios的配置步骤详解
2018/01/12 Javascript
JavaScript 点击触发复制功能实例详解
2018/11/02 Javascript
webpack打包优化的几个方法总结
2020/02/10 Javascript
使用Python的Scrapy框架编写web爬虫的简单示例
2015/04/17 Python
Python + OpenCV 实现LBP特征提取的示例代码
2019/07/11 Python
50行Python代码获取高考志愿信息的实现方法
2019/07/23 Python
Django的Modelforms用法简介
2019/07/27 Python
python列表推导式操作解析
2019/11/26 Python
python FTP批量下载/删除/上传实例
2019/12/22 Python
Pycharm中配置远程Docker运行环境的教程图解
2020/06/11 Python
html5绘制时钟动画
2014/12/15 HTML / CSS
具有防紫外线功能的高性能钓鱼服装:Hook&Tackle
2018/08/16 全球购物
介绍下WebSphere的安全性
2013/01/31 面试题
结婚邀请函范文
2014/01/14 职场文书
广告业务员岗位职责
2014/02/06 职场文书
入党积极分子自我鉴定
2014/02/18 职场文书
幼儿园毕业教师感言
2014/02/21 职场文书
勤俭节约倡议书
2014/04/14 职场文书
法院信息化建设方案
2014/05/21 职场文书
四风自我剖析材料思想汇报
2014/10/01 职场文书
目标责任书格式范文
2015/05/11 职场文书
2015年重阳节活动主持词
2015/07/30 职场文书
高三语文教学反思
2016/02/16 职场文书
商业计划书如何写?关键问题有哪些?
2019/07/11 职场文书