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模块用法实例详解
Nov 19 Python
Python中使用socket发送HTTP请求数据接收不完整问题解决方法
Feb 04 Python
使用Python压缩和解压缩zip文件的教程
May 06 Python
Python while、for、生成器、列表推导等语句的执行效率测试
Jun 03 Python
python Django批量导入不重复数据
Mar 25 Python
Python登录系统界面实现详解
Jun 25 Python
Python API自动化框架总结
Nov 12 Python
Pycharm中Python环境配置常见问题解析
Jan 16 Python
Python 私有属性和私有方法应用场景分析
Jun 19 Python
python怎么调用自己的函数
Jul 01 Python
使用Python文件读写,自定义分隔符(custom delimiter)
Jul 05 Python
python 中的jieba分词库
Nov 23 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
js和php邮箱地址验证的实现方法
2014/01/09 PHP
浅析Laravel5中队列的配置及使用
2016/08/04 PHP
JavaScript Cookie的读取和写入函数
2009/12/08 Javascript
jquery.form.js用法之清空form的方法
2014/03/07 Javascript
jquery的trigger和triggerHandler的区别示例介绍
2014/04/20 Javascript
JavaScript二维数组实现的省市联动菜单
2014/05/08 Javascript
jQuery判断一个元素是否可见的方法
2015/06/05 Javascript
JavaScript中子对象访问父对象的方式详解
2016/09/01 Javascript
基于原生js淡入淡出函数封装(兼容IE)
2016/10/20 Javascript
AngularJS extend用法详解及实例代码
2016/11/15 Javascript
利用JQuery实现datatables插件的增加和删除行功能
2017/01/06 Javascript
JS设置时间无效问题的解决办法
2017/02/18 Javascript
vue学习笔记之vue1.0和vue2.0的区别介绍
2017/05/17 Javascript
微信小程序学习之数据处理详解
2017/07/05 Javascript
关于vue-router的那些事儿
2018/05/23 Javascript
koa上传excel文件并解析的实现方法
2018/08/09 Javascript
基于layui框架响应式布局的一些使用详解
2019/09/16 Javascript
jQuery实现简单飞机大战
2020/07/05 jQuery
js代码编写无缝轮播图
2020/09/13 Javascript
vue 使用rules对表单字段进行校验的步骤
2020/12/25 Vue.js
JS中多层次排序算法的实现代码
2021/01/06 Javascript
[36:05]DOTA2亚洲邀请赛 3.31 小组赛 A组 Liquid vs Optic
2018/04/01 DOTA
Python爬虫学习之获取指定网页源码
2019/07/30 Python
树莓派3 搭建 django 服务器的实例
2019/08/29 Python
python将字典列表导出为Excel文件的方法
2019/09/02 Python
解决jupyter notebook import error但是命令提示符import正常的问题
2020/04/15 Python
python爬虫如何解决图片验证码
2021/02/14 Python
会计师事务所审计实习自我鉴定
2013/09/20 职场文书
大学应届毕业生个人求职信
2013/09/23 职场文书
《小小雨点》教学反思
2014/02/18 职场文书
安全生产宣传标语
2014/06/06 职场文书
校园文明标语
2014/06/13 职场文书
我的梦想演讲稿1000字
2014/08/21 职场文书
万能检讨书开头与结尾怎么写
2015/02/17 职场文书
2015年小学图书室工作总结
2015/05/18 职场文书
蜗居观后感
2015/06/11 职场文书