利用OpenCV+python对图片进行处理产生油画的效果

算法可以分为五步:

  • 1、获取图像的灰度(gray)图片
  • 2、设计一个小方框(4x4 or 8x8 or 10x10等),统计每个小方框的像素值
  • 3、将0-255的灰度值划分成几个等级,并把第二步处理的结果映射到所设置的各个等级中,并计数
  • 4、找到每个方框中灰度等级最多的所有的像素,并且求取这些像素的均值
  • 5、用统计出来的平均值来替代原来的像素值

因为用了很多for循环, 所以,计算复杂,图像处理运行时间较长,可以选用尺寸较小的图片来进行测试,程序还有很多可以优化的地方,再配合一些修图工具(如PS),对图片的细节进行修补,感觉可以裱起来了。

import cv2
import numpy as npimg = cv2.imread('image5.jpg', 1)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
dst = np.zeros((height, width, 3), np.uint8)
pixel_class = 4
section = int(256/pixel_class)
# 用两层for循环来遍历图片的每个数据
for i in range(3, height-3):for j in range(3, width-3):# 当前程序中定义的灰度等级是4个# 定义一个数组来装载这4个等级内的像素个数array1 = np.zeros(pixel_class, np.uint8)# 当前程序中定义的小方块是6x6的for m in range(-3, 3):for n in range(-3, 3):# p1是对该像素点等级段的划分,用下标表示0-3p1 = int(gray[i+m, j+n]/section)# 接下来对像素等级进行计数,array1的下标代表像素等级,# 值则代表处在该像素等级小方框内像素的个数array1[p1] = array1[p1] + 1# 接下来判断在这个小方框内哪一个像素段的像素最多currentMax = array1[0]l = 0  # 这里设置一个l用来记录像素段计数最多的数组下标for k in range(0, pixel_class):if currentMax < array1[k]:currentMax = array1[k]l = k# 均值处理u = v = w = 0for m in range(-3, 3):for n in range(-3, 3):if gray[i+m,j+n] >= (l*section) and gray[i+m, j+n] <= ((l+1)*section):(b, g, r) = img[i+m, j+n]u += bv += gw += ru = int(u/array1[l])v = int(v/array1[l])w = int(w/array1[l])dst[i, j] = [u, v, w]
cv2.imshow('dst', dst)
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imwrite('oil_painting.png', dst)

​​

图像处理:图像特效之油画效果相关推荐

  1. 【matlab图像处理】图片生成油画效果(选择路径-交互)

    %油画效果 function [I_painted]=OilPaint(I_rgb, radius, intensity_level) [filename pathname]=uigetfile({' ...

  2. opencv图像特效之油画特效

    #油画特效 # 1 gray 2 分割成x*x的小方块 3 0-255划分成几个等级, 将2步结果映射到这个等级上 import cv2 import numpy as np img = cv2.im ...

  3. java油画转换,java 图像特效之油画

    油画也算是一种常见的艺术品了,谁说咱们IT男不懂艺术-我们还能创造艺术,不多说,先说原理. 油画的算法很简单,对某一像素,用它附近随机一个像素来代替.没错就这么简单. 上代码: public Imag ...

  4. Python图像特效 OpenCV 油画 与 非真实感渲染 (Stylization水彩, edgePreservingFilter, detailEnhance, pencilSketch描绘)

    简介 基于Python cv2做的图像风格转换,其中包括油画风格,水彩风格,图像在不影响边缘情况下进行平滑化,图像锐化,图像描绘风格等. Package-OpenCV, scipy下载 pip ins ...

  5. Python 计算机视觉(补充版)—— 图像特效中的油画效果

    在前面的文章 Python 计算机视觉(十五)-- 图像特效处理 中我已经介绍了大部分的图像的特效处理,但还是忽略了油画特效的处理,在本篇文章中简单介绍一下油画特效的基本原理以及代码实现,感兴趣的小伙 ...

  6. 跟我学Python图像处理丨图像特效处理:毛玻璃、浮雕和油漆特效

    摘要:本文讲解常见的图像特效处理,从而让读者实现各种各样的图像特殊效果,并通过Python和OpenCV实现. 本文分享自华为云社区<[Python图像处理] 二十四.图像特效处理之毛玻璃.浮雕 ...

  7. 图像处理软件开发记录(六) 图像特效(浮雕、怀旧)

    专栏地址:http://blog.csdn.net/column/details/imagep.html 本篇文章主要记录一下图像处理软件中的图像特效(浮雕.怀旧)的实现过程. 图像浮雕效果 浮雕的算 ...

  8. 数字图像处理——图像艺术化处理OpenCV实验四艺术化效果和风格化效果

    实验 一.实验目的 (1) 了解各种图像艺术化处理方法的原理. (2) 掌握各种艺术化处理方法的实现过程. 二.实验内容和要求 编程实现三种以上艺术化处理方法,三类效果中每类至少实现两种. 三.实验主 ...

  9. Java中实现六种图像处理的效果(灰度化、马赛克效果、去背景实现、珠纹化实现、黑白版画效果、油画效果)

    ** Java中实现六种图像处理的效果(灰度化.马赛克效果.去背景实现.珠纹化实现.黑白版画效果.油画效果) ** 本文的编程的思想: 先将实现这六种效果的方法写入一个名为pic_performanc ...

最新文章

  1. RMB77元实现全身VR跟踪,来自配合微软Kinect的Driver4VR
  2. python 笔试题 英方_经典算法题 :找字符串中的逆序对(百度笔试题)
  3. 初识组织社会学(part1)--勉为其难,不如顺其自然,在力所能及的层次上研究、解释问题
  4. arraylist能否接收强转类型_ArrayList 源码解析
  5. 2018年全国中高等院校教师“Python编程、应用及华为大数据” 、“网络空间安全”、“区块链”培训班...
  6. 关于 HttpServlet、GenericServlet 和 Servlet 的关系
  7. STL源码剖析(三)
  8. nginx——rewrite模块
  9. 阿里巴巴对外开源液冷数据中心技术
  10. java web xml配置详解_Java Servlet web xml 配置详解
  11. 华为内部转岗最好时间_华为博士类员工离职率21.8%:平均年薪110万,依然度日如年...
  12. The DAO事件始末
  13. c#尝试写入或者读取受保护的内存_C# 尝试读取或写入受保护的内存。这通常指示其他内存已损坏 | 学步园...
  14. 从产品经理招聘信息分析现代产品经理职责
  15. php怎样给搜索框加放大镜,Win10系统给小娜搜索框添加放大镜和箭头图标的方法...
  16. .net LINQ 分组求和 单表 MVC c#
  17. bind: An operation on a socket could not be performed because the system lacked sufficient buffer sp
  18. win10怎么取消文件默认打开方式
  19. js 自由变量的取值
  20. v-for 和 v-show 的区别

热门文章

  1. 软件设计——云原生12要素
  2. 获取指定年月的月初跟月末的时间戳
  3. PAT 乙级 1072 开学寄语 (20分)
  4. 世界各个国家echarts地图展示
  5. Amazon Alexa硬件方案选型
  6. 重看经典动漫《火影忍者》的一些感受
  7. 基于Xposed开发微信云客服笔记
  8. BLE Mesh网络协议综述
  9. 苹果笔记本的end键_苹果电脑键盘快捷键使用技巧
  10. 苹果手机使用技巧篇:教你完美使用好苹果手机的4个方法