Python OpenCV处理图像之滤镜和图像运算


Posted in Python onJuly 10, 2018

本文实例为大家分享了Python OpenCV处理图像之滤镜和图像运算的具体代码,供大家参考,具体内容如下

0x01. 滤镜

喜欢自拍的人肯定都知道滤镜了,下面代码尝试使用一些简单的滤镜,包括图片的平滑处理、灰度化、二值化等:

import cv2.cv as cv
 
image=cv.LoadImage('img/lena.jpg', cv.CV_LOAD_IMAGE_COLOR) #Load the image
cv.ShowImage("Original", image)
 
grey = cv.CreateImage((image.width ,image.height),8,1) #8depth, 1 channel so grayscale
cv.CvtColor(image, grey, cv.CV_RGBA2GRAY) #Convert to gray so act as a filter
cv.ShowImage('Greyed', grey)
 
# 平滑变换
smoothed = cv.CloneImage(image)
cv.Smooth(image,smoothed,cv.CV_MEDIAN) #Apply a smooth alogrithm with the specified algorithm cv.MEDIAN
cv.ShowImage("Smoothed", smoothed)
 
# 均衡处理
cv.EqualizeHist(grey, grey) #Work only on grayscaled pictures
cv.ShowImage('Equalized', grey)
 
# 二值化处理
threshold1 = cv.CloneImage(grey)
cv.Threshold(threshold1,threshold1, 100, 255, cv.CV_THRESH_BINARY)
cv.ShowImage("Threshold", threshold1)
 
threshold2 = cv.CloneImage(grey)
cv.Threshold(threshold2,threshold2, 100, 255, cv.CV_THRESH_OTSU)
cv.ShowImage("Threshold 2", threshold2)
 
element_shape = cv.CV_SHAPE_RECT
pos=3
element = cv.CreateStructuringElementEx(pos*2+1, pos*2+1, pos, pos, element_shape)
cv.Dilate(grey,grey,element,2) #Replace a pixel value with the maximum value of neighboors
#There is others like Erode which replace take the lowest value of the neighborhood
#Note: The Structuring element is optionnal
cv.ShowImage("Dilated", grey)
 
cv.WaitKey(0)

0x02. HighGUI

OpenCV 内建了一套简单的 GUI 工具,方便我们在处理界面上编写一些控件,动态的改变输出:

import cv2.cv as cv
 
im = cv.LoadImage("img/lena.jpg", cv.CV_LOAD_IMAGE_GRAYSCALE)
thresholded = cv.CreateImage(cv.GetSize(im), 8, 1)
 
def onChange(val):
  cv.Threshold(im, thresholded, val, 255, cv.CV_THRESH_BINARY)
  cv.ShowImage("Image", thresholded)
 
# 创建一个滑动条控件
onChange(100) #Call here otherwise at startup. Show nothing until we move the trackbar
cv.CreateTrackbar("Thresh", "Image", 100, 255, onChange) #Threshold value arbitrarily set to 100
 
cv.WaitKey(0)

0x03. 选区操作

有事希望对图像中某一块区域进行变换等操作,就可以使用如下方式:

import cv2.cv as cv
 
im = cv.LoadImage("img/lena.jpg",3)
 
# 选择一块区域
cv.SetImageROI(im, (50,50,150,150)) #Give the rectangle coordinate of the selected area
 
# 变换操作
cv.Zero(im)
#cv.Set(im, cv.RGB(100, 100, 100)) put the image to a given value
 
# 解除选区
cv.ResetImageROI(im) # Reset the ROI
 
cv.ShowImage("Image",im)
 
cv.WaitKey(0)

0x04. 运算

对于多张图片,我们可以进行一些运算操作(包括算数运算和逻辑运算),下面的代码将演示一些基本的运算操作:

import cv2.cv as cv#or simply import cv
 
im = cv.LoadImage("img/lena.jpg")
im2 = cv.LoadImage("img/fruits-larger.jpg")
cv.ShowImage("Image1", im)
cv.ShowImage("Image2", im2)
 
res = cv.CreateImage(cv.GetSize(im2), 8, 3)
 
# 加
cv.Add(im, im2, res) #Add every pixels together (black is 0 so low change and white overload anyway)
cv.ShowImage("Add", res)
 
# 减
cv.AbsDiff(im, im2, res) # Like minus for each pixel im(i) - im2(i)
cv.ShowImage("AbsDiff", res)
 
# 乘
cv.Mul(im, im2, res) #Multiplie each pixels (almost white)
cv.ShowImage("Mult", res)
 
# 除
cv.Div(im, im2, res) #Values will be low so the image will likely to be almost black
cv.ShowImage("Div", res)
 
# 与
cv.And(im, im2, res) #Bit and for every pixels
cv.ShowImage("And", res)
 
# 或
cv.Or(im, im2, res) # Bit or for every pixels
cv.ShowImage("Or", res)
 
# 非
cv.Not(im, res) # Bit not of an image
cv.ShowImage("Not", res)
 
# 异或
cv.Xor(im, im2, res) #Bit Xor
cv.ShowImage("Xor", res)
 
# 乘方
cv.Pow(im, res, 2) #Pow the each pixel with the given value
cv.ShowImage("Pow", res)
 
# 最大值
cv.Max(im, im2, res) #Maximum between two pixels
#Same form Min MinS
cv.ShowImage("Max",res)
 
cv.WaitKey(0)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
详解Python的Django框架中inclusion_tag的使用
Jul 21 Python
python使用logging模块发送邮件代码示例
Jan 18 Python
深入理解Python爬虫代理池服务
Feb 28 Python
对python中的logger模块全面讲解
Apr 28 Python
Python实现基于KNN算法的笔迹识别功能详解
Jul 09 Python
Windows下python3.6.4安装教程
Jul 31 Python
pycharm修改界面主题颜色的方法
Jan 17 Python
解决django前后端分离csrf验证的问题
Feb 03 Python
python 多线程对post请求服务器测试并发的方法
Jun 13 Python
Python 微信爬虫完整实例【单线程与多线程】
Jul 06 Python
详解在Python中以绝对路径或者相对路径导入文件的方法
Aug 30 Python
wxpython+pymysql实现用户登陆功能
Nov 19 Python
Python使用cx_Freeze库生成msi格式安装文件的方法
Jul 10 #Python
python操作excel文件并输出txt文件的实例
Jul 10 #Python
深入浅析Python传值与传址
Jul 10 #Python
Python+OpenCV目标跟踪实现基本的运动检测
Jul 10 #Python
python3读取excel文件只提取某些行某些列的值方法
Jul 10 #Python
python读取excel指定列数据并写入到新的excel方法
Jul 10 #Python
python 常用的基础函数
Jul 10 #Python
You might like
xajax写的留言本
2006/11/25 PHP
php cache类代码(php数据缓存类)
2010/04/15 PHP
PHP 截取字符串专题集合
2010/08/19 PHP
PHP中echo,print_r与var_dump区别分析
2014/09/29 PHP
PHP代码实现表单数据验证类
2015/07/28 PHP
PHP封装的多文件上传类实例与用法详解
2017/02/07 PHP
PHP attributes()函数讲解
2019/02/03 PHP
php的lavarel框架中join和orWhere的用法
2020/12/28 PHP
学习jquery之一
2007/04/27 Javascript
prototype Element学习笔记(篇一)
2008/10/26 Javascript
js中根据字数截取字符串,不能截断url
2012/01/12 Javascript
基于jquery的固定表头和列头的代码
2012/05/03 Javascript
给页面渲染时间加速 干掉Dom Level 0 Event
2012/12/19 Javascript
往光标所在位置插入值的js代码
2013/09/22 Javascript
jquery实现带缩略图的可定制高度画廊效果(5种)
2015/08/28 Javascript
js中substring和substr两者区别和使用方法
2015/11/09 Javascript
基于JavaScript实现全屏透明遮罩div层锁屏效果
2016/01/26 Javascript
微信小程序 利用css实现遮罩效果实例详解
2017/01/21 Javascript
JS组件系列之JS组件封装过程详解
2017/04/28 Javascript
原生JS封装animate运动框架的实例
2017/10/12 Javascript
vue父组件向子组件传递多个数据的实例
2018/03/01 Javascript
Python selenium 三种等待方式解读
2016/09/15 Python
基于Python中求和函数sum的用法详解
2018/06/28 Python
Python supervisor强大的进程管理工具的使用
2019/04/24 Python
信号生成及DFT的python实现方式
2020/02/25 Python
基于python 等频分箱qcut问题的解决
2020/03/03 Python
Python 为什么推荐蛇形命名法原因浅析
2020/06/18 Python
Python读取xlsx数据生成图标代码实例
2020/08/12 Python
用CSS3实现背景渐变的方法
2015/07/14 HTML / CSS
维珍澳洲航空官网:Virgin Australia
2017/09/08 全球购物
Java和Javasciprt的区别
2012/09/02 面试题
如何写一份好的英文求职信
2014/03/19 职场文书
2014年医务科工作总结
2014/12/18 职场文书
2015大学生暑期实习报告
2015/07/13 职场文书
大学宣传委员竞选稿
2015/11/19 职场文书
vue中data改变后让视图同步更新的方法
2021/03/29 Vue.js