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解析xml成对应的html示例分享
Apr 02 Python
wxpython 最小化到托盘与欢迎图片的实现方法
Jun 09 Python
深度剖析使用python抓取网页正文的源码
Jun 11 Python
python求列表交集的方法汇总
Nov 10 Python
详解Python中的静态方法与类成员方法
Feb 28 Python
Python绘制KS曲线的实现方法
Aug 13 Python
Python pyinotify模块实现对文档的实时监控功能方法
Oct 13 Python
python 求定积分和不定积分示例
Nov 20 Python
pytorch的梯度计算以及backward方法详解
Jan 10 Python
Pytorch学习之torch用法----比较操作(Comparison Ops)
Jun 28 Python
python打包多类型文件的操作方法
Sep 21 Python
python实现会员信息管理系统(List)
Mar 18 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
PHP导航下拉菜单的实现如此简单
2013/09/22 PHP
Ajax实现对静态页面的文章访问统计功能示例
2016/10/10 PHP
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
2016/12/14 PHP
PHP判断json格式是否正确的实现代码
2017/09/20 PHP
laravel 使用事件系统统计浏览量的实现
2019/10/16 PHP
跨浏览器的设置innerHTML方法
2006/09/18 Javascript
JavaScript操作XML实例代码(获取新闻标题并分页,并分页)
2010/05/25 Javascript
JS取request值以及自动执行使用示例
2014/02/24 Javascript
jquery.validate.js插件使用经验记录
2014/07/02 Javascript
js根据手机客户端浏览器类型,判断跳转官网/手机网站多个实例代码
2016/04/30 Javascript
JavaScript数组去重的几种方法效率测试
2016/10/23 Javascript
vue的Virtual Dom实现snabbdom解密
2017/05/03 Javascript
Angular 4依赖注入学习教程之简介(一)
2017/06/04 Javascript
Node.js开发第三方微信公众平台
2017/06/05 Javascript
实例详解JavaScript中setTimeout函数的执行顺序
2017/07/12 Javascript
vue.js组件vue-waterfall-easy实现瀑布流效果
2017/08/22 Javascript
JS简单获取并修改input文本框内容的方法示例
2018/04/08 Javascript
原生JS实现的轮播图功能详解
2018/08/06 Javascript
js简单遍历获取对象中的属性值的方法示例
2019/06/19 Javascript
layui实现显示数据表格、搜索和修改功能示例
2020/06/03 Javascript
[01:34]2016国际邀请赛中国区预选赛IG战队教练采访
2016/06/27 DOTA
[04:51]TI10典藏宝瓶Ⅱ外观视频展示
2020/08/15 DOTA
简单谈谈Python中的闭包
2016/11/30 Python
python 捕获 shell/bash 脚本的输出结果实例
2017/01/04 Python
python机器学习理论与实战(六)支持向量机
2018/01/19 Python
对Python 文件夹遍历和文件查找的实例讲解
2018/04/26 Python
python基础 range的用法解析
2019/08/23 Python
Python列表list常用内建函数实例小结
2019/10/22 Python
美国知名日用品连锁超市:Dollar General(多来店)
2017/01/14 全球购物
JD Sports法国:英国篮球和运动时尚的领导者
2017/09/28 全球购物
澳大利亚运动鞋零售商:The Athlete’s Foot
2018/11/04 全球购物
《湘夫人》教学反思
2014/02/21 职场文书
服务行业演讲稿
2014/09/02 职场文书
2014乡镇机关党员个人对照检查材料思想汇报
2014/10/09 职场文书
Node实现搜索框进行模糊查询
2021/06/28 Javascript
vue elementUI批量上传文件
2022/04/26 Vue.js