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 中文乱码问题深入分析
Mar 13 Python
Python基于回溯法子集树模板解决马踏棋盘问题示例
Sep 11 Python
python 随机数使用方法,推导以及字符串,双色球小程序实例
Sep 12 Python
TensorFlow 模型载入方法汇总(小结)
Jun 19 Python
TensorFlow利用saver保存和提取参数的实例
Jul 26 Python
在python中利用KNN实现对iris进行分类的方法
Dec 11 Python
使用python获取(宜宾市地震信息)地震信息
Jun 20 Python
python文档字符串(函数使用说明)使用详解
Jul 30 Python
Python使用APScheduler实现定时任务过程解析
Sep 11 Python
使用Python 自动生成 Word 文档的教程
Feb 13 Python
解决windows下python3使用multiprocessing.Pool出现的问题
Apr 08 Python
Python gevent协程切换实现详解
Sep 14 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中extract()函数的妙用分析
2012/07/11 PHP
探讨PHP中OO之静态关键字以及类常量的详解
2013/06/07 PHP
一组PHP可逆加密解密算法实例代码
2014/01/21 PHP
PHP实现笛卡尔积算法的实例讲解
2019/12/22 PHP
Javascript 入门基础学习
2010/03/10 Javascript
javascript 面向对象的JavaScript类
2010/05/04 Javascript
TextArea不支持maxlength的解决办法(jquery)
2011/09/13 Javascript
对javascript的一点点认识总结《javascript高级程序设计》读书笔记
2011/11/30 Javascript
JavaScript高级程序设计(第3版)学习笔记6 初识js对象
2012/10/11 Javascript
AngularJS入门教程之学习环境搭建
2014/12/06 Javascript
React实现双向绑定示例代码
2016/09/19 Javascript
响应式框架Bootstrap栅格系统的实例
2017/12/19 Javascript
jquery使用FormData实现异步上传文件
2018/10/25 jQuery
vue获取form表单的值示例
2019/10/29 Javascript
JS实现密码框效果
2020/09/10 Javascript
Python中处理字符串之endswith()方法的使用简介
2015/05/18 Python
python入门:这篇文章带你直接学会python
2018/09/14 Python
Python argparse模块应用实例解析
2019/11/15 Python
使用PyTorch将文件夹下的图片分为训练集和验证集实例
2020/01/08 Python
在Tensorflow中实现梯度下降法更新参数值
2020/01/23 Python
Python matplotlib模块及柱状图用法解析
2020/08/10 Python
用python读取xlsx文件
2020/12/17 Python
CSS3制作ajax loader icon实现思路及代码
2013/08/25 HTML / CSS
使用phonegap检测网络状态的方法
2017/03/30 HTML / CSS
美国婴儿和儿童服装购物网站:PatPat
2020/10/01 全球购物
Linux Interview Questions For software testers
2012/06/02 面试题
进修护士自我鉴定
2013/10/14 职场文书
致200米运动员广播稿
2014/02/06 职场文书
汽车维修专业自荐书
2014/05/26 职场文书
歌唱比赛策划方案
2014/06/06 职场文书
领导班子个人对照检查材料(群众路线)
2014/09/26 职场文书
信访维稳工作汇报
2014/10/27 职场文书
2014年实习期工作总结
2014/11/27 职场文书
员工聘用合同范本
2015/09/21 职场文书
彩虹社八名人气艺人全新周边限时推出,性转女装男装一次拥有!
2022/04/01 日漫
apache虚拟主机配置的三种方式(小结)
2022/07/23 Servers