图像处理:图像特效之油画效果
利用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)
图像处理:图像特效之油画效果相关推荐
- 【matlab图像处理】图片生成油画效果(选择路径-交互)
%油画效果 function [I_painted]=OilPaint(I_rgb, radius, intensity_level) [filename pathname]=uigetfile({' ...
- opencv图像特效之油画特效
#油画特效 # 1 gray 2 分割成x*x的小方块 3 0-255划分成几个等级, 将2步结果映射到这个等级上 import cv2 import numpy as np img = cv2.im ...
- java油画转换,java 图像特效之油画
油画也算是一种常见的艺术品了,谁说咱们IT男不懂艺术-我们还能创造艺术,不多说,先说原理. 油画的算法很简单,对某一像素,用它附近随机一个像素来代替.没错就这么简单. 上代码: public Imag ...
- Python图像特效 OpenCV 油画 与 非真实感渲染 (Stylization水彩, edgePreservingFilter, detailEnhance, pencilSketch描绘)
简介 基于Python cv2做的图像风格转换,其中包括油画风格,水彩风格,图像在不影响边缘情况下进行平滑化,图像锐化,图像描绘风格等. Package-OpenCV, scipy下载 pip ins ...
- Python 计算机视觉(补充版)—— 图像特效中的油画效果
在前面的文章 Python 计算机视觉(十五)-- 图像特效处理 中我已经介绍了大部分的图像的特效处理,但还是忽略了油画特效的处理,在本篇文章中简单介绍一下油画特效的基本原理以及代码实现,感兴趣的小伙 ...
- 跟我学Python图像处理丨图像特效处理:毛玻璃、浮雕和油漆特效
摘要:本文讲解常见的图像特效处理,从而让读者实现各种各样的图像特殊效果,并通过Python和OpenCV实现. 本文分享自华为云社区<[Python图像处理] 二十四.图像特效处理之毛玻璃.浮雕 ...
- 图像处理软件开发记录(六) 图像特效(浮雕、怀旧)
专栏地址:http://blog.csdn.net/column/details/imagep.html 本篇文章主要记录一下图像处理软件中的图像特效(浮雕.怀旧)的实现过程. 图像浮雕效果 浮雕的算 ...
- 数字图像处理——图像艺术化处理OpenCV实验四艺术化效果和风格化效果
实验 一.实验目的 (1) 了解各种图像艺术化处理方法的原理. (2) 掌握各种艺术化处理方法的实现过程. 二.实验内容和要求 编程实现三种以上艺术化处理方法,三类效果中每类至少实现两种. 三.实验主 ...
- Java中实现六种图像处理的效果(灰度化、马赛克效果、去背景实现、珠纹化实现、黑白版画效果、油画效果)
** Java中实现六种图像处理的效果(灰度化.马赛克效果.去背景实现.珠纹化实现.黑白版画效果.油画效果) ** 本文的编程的思想: 先将实现这六种效果的方法写入一个名为pic_performanc ...
最新文章
- RMB77元实现全身VR跟踪,来自配合微软Kinect的Driver4VR
- python 笔试题 英方_经典算法题 :找字符串中的逆序对(百度笔试题)
- 初识组织社会学(part1)--勉为其难,不如顺其自然,在力所能及的层次上研究、解释问题
- arraylist能否接收强转类型_ArrayList 源码解析
- 2018年全国中高等院校教师“Python编程、应用及华为大数据” 、“网络空间安全”、“区块链”培训班...
- 关于 HttpServlet、GenericServlet 和 Servlet 的关系
- STL源码剖析(三)
- nginx——rewrite模块
- 阿里巴巴对外开源液冷数据中心技术
- java web xml配置详解_Java Servlet web xml 配置详解
- 华为内部转岗最好时间_华为博士类员工离职率21.8%:平均年薪110万,依然度日如年...
- The DAO事件始末
- c#尝试写入或者读取受保护的内存_C# 尝试读取或写入受保护的内存。这通常指示其他内存已损坏 | 学步园...
- 从产品经理招聘信息分析现代产品经理职责
- php怎样给搜索框加放大镜,Win10系统给小娜搜索框添加放大镜和箭头图标的方法...
- .net LINQ 分组求和 单表 MVC c#
- bind: An operation on a socket could not be performed because the system lacked sufficient buffer sp
- win10怎么取消文件默认打开方式
- js 自由变量的取值
- v-for 和 v-show 的区别