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网络编程学习笔记(八):XML生成与解析(DOM、ElementTree)
Jun 09 Python
python中字典dict常用操作方法实例总结
Apr 04 Python
浅谈Python中的数据类型
May 05 Python
python的socket编程入门
Jan 29 Python
python脚本生成caffe train_list.txt的方法
Apr 27 Python
Python实现批量修改图片格式和大小的方法【opencv库与PIL库】
Dec 03 Python
bluepy 一款python封装的BLE利器简单介绍
Jun 25 Python
用OpenCV将视频分解成单帧图片,图片合成视频示例
Dec 10 Python
python3 Scrapy爬虫框架ip代理配置的方法
Jan 17 Python
Python telnet登陆功能实现代码
Apr 16 Python
如何教少儿学习Python编程
Jul 10 Python
Python进阶学习之带你探寻Python类的鼻祖-元类
May 08 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
如何将一个表单同时提交到两个地方处理
2006/10/09 PHP
我的论坛源代码(一)
2006/10/09 PHP
PHP控制网页过期时间的代码
2008/09/28 PHP
浅析PHP递归函数返回值使用方法
2013/02/18 PHP
jquery动态加载图片数据练习代码
2011/08/04 Javascript
window.onload和$(function(){})的区别介绍
2013/10/30 Javascript
js输入框邮箱自动提示功能代码实现
2013/12/10 Javascript
js使用栈来实现10进制转8进制与取除数及余数
2014/06/11 Javascript
使用jQuery和Bootstrap实现多层、自适应模态窗口
2014/12/22 Javascript
Express实现前端后端通信上传图片之存储数据库(mysql)傻瓜式教程(一)
2015/12/10 Javascript
小白谈谈对JS原型链的理解
2016/05/03 Javascript
JavaScript数组实现数据结构中的队列与堆栈
2016/05/26 Javascript
jQuery.Uploadify插件实现带进度条的批量上传功能
2016/06/08 Javascript
详解微信小程序 wx.uploadFile 的编码坑
2017/01/23 Javascript
JS实现留言板功能
2017/06/17 Javascript
JS实现商品橱窗特效
2020/01/09 Javascript
vue项目中使用bpmn为节点添加颜色的方法
2020/04/30 Javascript
vue 使用饿了么UI仿写teambition的筛选功能
2021/03/01 Vue.js
[02:16]深扒TI7聊天轮盘语音出处2
2017/05/11 DOTA
python以环状形式组合排列图片并输出的方法
2015/03/17 Python
Python入门_条件控制(详解)
2017/05/16 Python
在python2.7中用numpy.reshape 对图像进行切割的方法
2018/12/05 Python
详解Python3定时器任务代码
2019/09/23 Python
python自动化测试无法启动谷歌浏览器问题
2019/10/10 Python
米兰网婚纱礼服法国网上商店:Milanoo法国
2016/08/20 全球购物
人事主管岗位职责范本
2013/12/04 职场文书
单位介绍信范文
2014/01/18 职场文书
2014大学生全国两会学习心得体会
2014/03/13 职场文书
大学生演讲稿
2014/04/25 职场文书
工程负责人任命书
2014/06/06 职场文书
民族精神月活动总结
2014/08/28 职场文书
迟到检讨书2000字(精选篇)
2014/10/07 职场文书
2015年医院工作总结范文
2015/04/09 职场文书
Python超简单容易上手的画图工具库推荐
2021/05/10 Python
idea搭建可运行Servlet的Web项目
2021/06/26 Java/Android
mysql的数据压缩性能对比详情
2021/11/07 MySQL