python opencv图像处理(素描、怀旧、光照、流年、滤镜 原理及实现)


Posted in Python onDecember 10, 2020

图像素描特效

图像素描特效主要经过以下几个步骤:

调用cv.cvtColor()函数将彩色图像灰度化处理;
通过cv.GaussianBlur()函数实现高斯滤波降噪;
边缘检测采用Canny算子实现;
最后通过cv.threshold()反二进制阈值化处理实现素描特效。

#coding:utf-8
import cv2 as cv
import numpy as np

#读取原始图像
img = cv.imread('d:/paojie.png')

#图像灰度处理
gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)

#高斯滤波降噪
gaussian = cv.GaussianBlur(gray, (5,5), 0)
 
#Canny算子
canny = cv.Canny(gaussian, 50, 150)

#阈值化处理
ret, result = cv.threshold(canny, 0, 255, cv.THRESH_BINARY_INV+cv.THRESH_OTSU)

#显示图像
#cv.imshow('src', img)
#cv.imshow('result', result)
cv.imshow('result',np.vstack((gray,result)))
cv.waitKey()
cv.destroyAllWindows()

图像素描特效展示

python opencv图像处理(素描、怀旧、光照、流年、滤镜 原理及实现)

图像怀旧特效

怀旧特效是将图像的RGB三个分量分别按照一定比例进行处理的结果,其怀旧公式如下所示:

python opencv图像处理(素描、怀旧、光照、流年、滤镜 原理及实现)

#coding:utf-8
import cv2 as cv
import numpy as np

#读取原始图像
img = cv.imread('d:/paojie.png')

#获取图像行和列
rows, cols = img.shape[:2]

#新建目标图像
dst = np.zeros((rows, cols, 3), dtype="uint8")

#图像怀旧特效
for i in range(rows):
  for j in range(cols):
    B = 0.272*img[i,j][2] + 0.534*img[i,j][1] + 0.131*img[i,j][0]
    G = 0.349*img[i,j][2] + 0.686*img[i,j][1] + 0.168*img[i,j][0]
    R = 0.393*img[i,j][2] + 0.769*img[i,j][1] + 0.189*img[i,j][0]
    if B>255:
      B = 255
    if G>255:
      G = 255
    if R>255:
      R = 255
    dst[i,j] = np.uint8((B, G, R))
    
#显示图像
cv.imshow('result',np.vstack((img,dst)))
cv.waitKey()
cv.destroyAllWindows()

图像怀旧特效展示

python opencv图像处理(素描、怀旧、光照、流年、滤镜 原理及实现)

图像光照特效

图像光照特效是指图像存在一个类似于灯光的光晕特效,图像像素值围绕光照中心点呈圆形范围内的增强。
python实现代码主要是通过双层循环遍历图像的各像素点,寻找图像的中心点,再通过计算当前点到光照中心的距离(平面坐标系中两点之间的距离),判断该距离与图像中心圆半径的大小关系,中心圆范围内的图像灰度值增强,范围外的图像灰度值保留,并结合边界范围判断生成最终的光照效果。

#coding:utf-8
import cv2 as cv
import math
import numpy as np

#读取原始图像
img = cv.imread('d:/paojie.png')

#获取图像行和列
rows, cols = img.shape[:2]

#设置中心点和光照半径
centerX = rows / 2 - 20
centerY = cols / 2 + 20
radius = min(centerX, centerY)

#设置光照强度
strength = 100

#新建目标图像
dst = np.zeros((rows, cols, 3), dtype="uint8")

#图像光照特效
for i in range(rows):
  for j in range(cols):
    #计算当前点到光照中心距离(平面坐标系中两点之间的距离)
    distance = math.pow((centerY-j), 2) + math.pow((centerX-i), 2)
    #获取原始图像
    B = img[i,j][0]
    G = img[i,j][1]
    R = img[i,j][2]
    if (distance < radius * radius):
      #按照距离大小计算增强的光照值
      result = (int)(strength*( 1.0 - math.sqrt(distance) / radius ))
      B = img[i,j][0] + result
      G = img[i,j][1] + result
      R = img[i,j][2] + result
      #判断边界 防止越界
      B = min(255, max(0, B))
      G = min(255, max(0, G))
      R = min(255, max(0, R))
      dst[i,j] = np.uint8((B, G, R))
    else:
      dst[i,j] = np.uint8((B, G, R))
    
#显示图像
cv.imshow('result',np.vstack((img,dst)))
cv.waitKey()
cv.destroyAllWindows()

图像光照特效展示

python opencv图像处理(素描、怀旧、光照、流年、滤镜 原理及实现)

图像流年特效

流年是用来形容如水般流逝的光阴或年华,图像处理中特指将原图像转换为具有时代感或岁月沉淀的特效。python实现代码如下,它将原始图像的蓝色(B)通道的像素值开根号,再乘以一个权重参数,产生最终的流年效果。

#coding:utf-8
import cv2 as cv
import math
import numpy as np

#读取原始图像
img = cv.imread('d:/paojie.png')

#获取图像行和列
rows, cols = img.shape[:2]

#新建目标图像
dst = np.zeros((rows, cols, 3), dtype="uint8")

#图像流年特效
for i in range(rows):
  for j in range(cols):
    #B通道的数值开平方乘以参数12
    B = math.sqrt(img[i,j][0]) * 12
    G = img[i,j][1]
    R = img[i,j][2]
    if B>255:
      B = 255
    dst[i,j] = np.uint8((B, G, R))
    
#显示图像
cv.imshow('result',np.vstack((img,dst)))
cv.waitKey()
cv.destroyAllWindows()

图像流年特效展示

python opencv图像处理(素描、怀旧、光照、流年、滤镜 原理及实现)

图像滤镜特效

滤镜主要是用来实现图像的各种特殊效果,它在Photoshop中具有非常神奇的作用。滤镜通常需要同通道、图层等联合使用,才能取得最佳艺术效果。本小节将讲述一种基于颜色查找表(Look up Table)的滤镜处理方法,它通过将每一个原始颜色进行转换之后得到新的颜色。比如,原始图像的某像素点为红色(R-255, G-0, B-0),进行转换之后变为绿色(R-0, G-255, B-0),之后所有是红色的地方都会被自动转换为绿色,而颜色查找表就是将所有的颜色进行一次(矩阵)转换,很多的滤镜功能就是提供了这么一个转换的矩阵,在原始色彩的基础上进行颜色的转换。
假设现在存在一张新的滤镜颜色查找表,如图所示,它是一张512×512大小,包含各像素颜色分布的图像。下面这张图片另存为本地,即可直接用于图像滤镜处理。

python opencv图像处理(素描、怀旧、光照、流年、滤镜 原理及实现)

#coding:utf-8
import cv2 as cv 
import numpy as np

#获取滤镜颜色
def getBGR(img, table, i, j):
  #获取图像颜色
  b, g, r = img[i][j]
  #计算标准颜色表中颜色的位置坐标
  x = int(g/4 + int(b/32) * 63)
  y = int(r/4 + int((b%32) / 4) * 63)
  #返回滤镜颜色表中对应的颜色
  return lj_map[x][y]

#读取原始图像
img = cv.imread('d:/paojie.png')
lj_map = cv.imread('lvjing.png')

#获取图像行和列
rows, cols = img.shape[:2]

#新建目标图像
dst = np.zeros((rows, cols, 3), dtype="uint8")

#循环设置滤镜颜色
for i in range(rows):
  for j in range(cols):
    dst[i][j] = getBGR(img, lj_map, i, j)
    
#显示图像
cv.imshow('result',np.vstack((img,dst)))

cv.waitKey()
cv.destroyAllWindows()

图像滤镜特效展示

python opencv图像处理(素描、怀旧、光照、流年、滤镜 原理及实现)

以上就是python opencv图像处理(素描、怀旧、光照、流年、滤镜 原理及实现)的详细内容,更多关于python opencv图像处理的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python通过cookie模拟已登录状态的初步研究
Nov 09 Python
python读取文本绘制动态速度曲线
Jun 21 Python
pycharm 取消默认的右击运行unittest的方法
Nov 29 Python
python引用(import)某个模块提示没找到对应模块的解决方法
Jan 19 Python
Python3实现的简单三级菜单功能示例
Mar 12 Python
Python面向对象总结及类与正则表达式详解
Apr 18 Python
python中时间模块的基本使用教程
May 14 Python
详解Python文件修改的两种方式
Aug 22 Python
python实现用类读取文件数据并计算矩形面积
Jan 18 Python
Python如何通过Flask-Mail发送电子邮件
Jan 29 Python
python连接mongodb集群方法详解
Feb 13 Python
pycharm远程连接服务器并配置python interpreter的方法
Dec 23 Python
python 实现的IP 存活扫描脚本
Dec 10 #Python
class类在python中获取金融数据的实例方法
Dec 10 #Python
Python制作简单的剪刀石头布游戏
Dec 10 #Python
python给list排序的简单方法
Dec 10 #Python
详解java调用python的几种用法(看这篇就够了)
Dec 10 #Python
Python利用imshow制作自定义渐变填充柱状图(colorbar)
Dec 10 #Python
详解Python GUI编程之PyQt5入门到实战
Dec 10 #Python
You might like
一个ORACLE分页程序,挺实用的.
2006/10/09 PHP
一步一步学习PHP(3) php 函数
2010/02/15 PHP
利用浏览器的Javascript控制台调试PHP程序
2014/01/08 PHP
ThinkPHP令牌验证实例
2014/06/18 PHP
详解Yii2.0 rules验证规则集合
2017/03/21 PHP
Laravel框架数据库迁移操作实例详解
2020/04/06 PHP
jQuery html()等方法介绍
2009/11/18 Javascript
JS 页面计时器示例代码
2013/10/28 Javascript
javascript间隔刷新的简单实例
2013/11/14 Javascript
JavaScript原生对象之Number对象的属性和方法详解
2015/03/13 Javascript
Angular.js 实现数字转换汉字实例代码
2016/07/14 Javascript
浅谈Vuejs Prop基本用法
2017/08/17 Javascript
微信小程序实现美团菜单
2018/06/06 Javascript
vue+elementUI实现表格关键字筛选高亮
2020/10/26 Javascript
微信小程序自定义modal弹窗组件的方法详解
2020/12/20 Javascript
[01:52]2020年DOTA2 TI10夏季活动预告片
2020/07/15 DOTA
Python爬虫框架Scrapy实战之批量抓取招聘信息
2015/08/07 Python
Python爬虫实例爬取网站搞笑段子
2017/11/08 Python
Django实现全文检索的方法(支持中文)
2018/05/14 Python
Python numpy实现二维数组和一维数组拼接的方法
2018/06/05 Python
python实现小程序推送页面收录脚本
2020/04/20 Python
matplotlib图例legend语法及设置的方法
2020/07/28 Python
HTML5的postMessage的使用手册
2018/12/19 HTML / CSS
施华洛世奇匈牙利官网:SWAROVSKI匈牙利
2019/07/06 全球购物
英国网上自行车商店:Tredz Bikes
2019/10/29 全球购物
娇韵诗Clarins意大利官方网站:法国天然护肤品牌
2020/03/11 全球购物
园艺师求职信
2014/04/27 职场文书
社区春季防火方案
2014/06/02 职场文书
十周年庆典策划方案
2014/06/03 职场文书
幼儿园户外活动总结
2014/07/04 职场文书
紧急通知
2015/04/17 职场文书
小学运动会加油词
2015/07/18 职场文书
致运动员赞词
2015/07/22 职场文书
小学班级管理心得体会
2016/01/07 职场文书
Python中time与datetime模块使用方法详解
2022/03/31 Python
Python如何用re模块实现简易tokenizer
2022/05/02 Python