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通过ssh-powershell监控windows的方法
Jun 02 Python
简单谈谈Python中的元祖(Tuple)和字典(Dict)
Apr 21 Python
python实现批量修改图片格式和尺寸
Jun 07 Python
Python实现购物评论文本情感分析操作【基于中文文本挖掘库snownlp】
Aug 07 Python
python实现写数字文件名的递增保存文件方法
Oct 25 Python
Python2和Python3中urllib库中urlencode的使用注意事项
Nov 26 Python
对Python之gzip文件读写的方法详解
Feb 08 Python
Python OOP类中的几种函数或方法总结
Feb 22 Python
用uWSGI和Nginx部署Flask项目的方法示例
May 05 Python
python的turtle库使用详解
May 10 Python
TensorFlow实现简单的CNN的方法
Jul 18 Python
PyTorch中常用的激活函数的方法示例
Aug 20 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
复杂检索数据并分页显示的处理方法
2006/10/09 PHP
PHP连接SQLServer2005 的问题解决方法
2010/07/19 PHP
解析PHP获取当前网址及域名的实现代码
2013/06/23 PHP
php获取淘宝分类id示例
2014/01/16 PHP
全面了解PHP中的全局变量
2016/06/17 PHP
PHP入门教程之PHP操作MySQL的方法分析
2016/09/11 PHP
PHP使用redis消息队列发布微博的方法示例
2017/06/22 PHP
php 可变函数使用小结
2018/06/12 PHP
总结PHP代码规范、流程规范、git规范
2018/06/18 PHP
php文件后缀不强制为.php的实操方法
2019/09/18 PHP
jquery实现导航固定顶部的效果仿蘑菇街
2014/10/22 Javascript
JS简单实现DIV相对于浏览器固定位置不变的方法
2016/06/17 Javascript
深入学习 JavaScript中的函数调用
2017/03/23 Javascript
Bootstrap.css与layDate日期选择样式起冲突的解决办法
2017/04/07 Javascript
jquery submit()不能提交表单的解决方法
2017/04/24 jQuery
import与export在node.js中的使用详解
2017/09/28 Javascript
jQuery简单实现对数组去重及排序操作实例
2017/10/31 jQuery
详解Angular系列之变化检测(Change Detection)
2018/02/26 Javascript
JS数组求和的常用方法实例小结
2019/01/07 Javascript
4 种滚动吸顶实现方式的比较
2019/04/09 Javascript
Django中模型Model添加JSON类型字段的方法
2015/06/17 Python
Python探索之ModelForm代码详解
2017/10/26 Python
利用python循环创建多个文件的方法
2018/10/25 Python
关于keras中keras.layers.merge的用法说明
2020/05/23 Python
python实现图片素描效果
2020/09/26 Python
python 利用toapi库自动生成api
2020/10/19 Python
香港个人化生活购物网站:Ballyhoo Limited
2016/09/10 全球购物
日本卡普空电视游戏软件公司官方购物网站:e-CAPCOM
2018/07/17 全球购物
帕克纽约:PARKER NY
2018/12/09 全球购物
心理咨询专业自荐信
2014/07/07 职场文书
小学国旗下的演讲稿
2014/08/28 职场文书
2015年高三班主任工作总结
2015/05/21 职场文书
小学运动会入场词
2015/07/18 职场文书
儿童诗两首教学反思
2016/02/23 职场文书
python入门学习关于for else的特殊特性讲解
2021/11/20 Python
详解MySQL中timestamp和datetime时区问题导致做DTS遇到的坑
2021/12/06 MySQL