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 urllib模块urlopen()与urlretrieve()详解
Nov 01 Python
Windows上配置Emacs来开发Python及用Python扩展Emacs
Nov 20 Python
python一键升级所有pip package的方法
Jan 16 Python
Python中标准库OS的常用方法总结大全
Jul 19 Python
详解Python判定IP地址合法性的三种方法
Mar 06 Python
Python使用combinations实现排列组合的方法
Nov 13 Python
Python设计模式之模板方法模式实例详解
Jan 17 Python
详解python中*号的用法
Oct 21 Python
Linux安装Python3如何和系统自带的Python2并存
Jul 23 Python
Python多线程的退出控制实现
Aug 10 Python
python re模块常见用法例举
Mar 01 Python
python实现简单反弹球游戏
Apr 12 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
详解WordPress开发中wp_title()函数的用法
2016/01/07 PHP
PHP利用超级全局变量$_POST来接收表单数据的实例
2016/11/05 PHP
PHP实现对xml的增删改查操作案例分析
2017/05/19 PHP
PHP基于session.upload_progress 实现文件上传进度显示功能详解
2019/08/09 PHP
使用laravel和ajax实现整个页面无刷新的操作方法
2019/10/03 PHP
js获得鼠标的坐标值的方法
2013/03/13 Javascript
jquery 面包屑导航 具体实现
2013/06/05 Javascript
js函数setTimeout延迟执行的简单介绍
2013/07/17 Javascript
jquery ajax,ashx,json的用法总结
2014/02/12 Javascript
js获取select默认选中的Option并不是当前选中值
2014/05/07 Javascript
简述Matlab中size()函数的用法
2016/03/20 Javascript
jQuery实现无限往下滚动效果代码
2016/04/16 Javascript
Javascript中的迭代、归并方法详解
2016/06/14 Javascript
Bootstrap中文本框的宽度变窄并且加入一副验证码图片的实现方法
2016/06/23 Javascript
同步文本框内容JS代码实现
2016/08/04 Javascript
AngularJS动态绑定ng-options的ng-model实例代码
2017/06/21 Javascript
jQuery+koa2实现简单的Ajax请求的示例
2018/03/06 jQuery
JavaScript 跨域之POST实现方法
2018/05/07 Javascript
JavaScript实现京东放大镜效果
2019/12/03 Javascript
js实现提交前对列表数据的增删改查
2020/01/16 Javascript
JS实现无限轮播无倒退效果
2020/09/21 Javascript
JS创建自定义对象的六种方法总结
2020/12/15 Javascript
Python性能优化技巧
2015/03/09 Python
利用Python演示数型数据结构的教程
2015/04/03 Python
Python3.2模拟实现webqq登录
2016/02/15 Python
Python爬虫实现抓取京东店铺信息及下载图片功能示例
2018/08/07 Python
Python3.7 dataclass使用指南小结
2019/02/22 Python
python try 异常处理(史上最全)
2019/03/07 Python
python如何实现DES加密
2020/09/21 Python
html5的canvas方法使用指南
2014/12/15 HTML / CSS
大学新生欢迎词
2014/01/10 职场文书
名企HR怎样看待求职信
2014/02/23 职场文书
陈安之励志演讲稿
2014/08/21 职场文书
课内比教学心得体会
2014/09/09 职场文书
天坛导游词
2015/02/02 职场文书
2015年高中生国庆节演讲稿
2015/07/30 职场文书