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线程、进程和协程详解
Jul 19 Python
Python 基础教程之包和类的用法
Feb 23 Python
利用Python进行异常值分析实例代码
Dec 07 Python
Python解决线性代数问题之矩阵的初等变换方法
Dec 12 Python
谈一谈基于python的面向对象编程基础
May 21 Python
解决django中ModelForm多表单组合的问题
Jul 18 Python
Django框架中序列化和反序列化的例子
Aug 06 Python
Python+OpenCV实现实时眼动追踪的示例代码
Nov 11 Python
Python类和实例的属性机制原理详解
Mar 21 Python
在pycharm中debug 实时查看数据操作(交互式)
Jun 09 Python
python生成xml时规定dtd实例方法
Sep 21 Python
pytorch中Schedule与warmup_steps的用法说明
May 24 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
解析CodeIgniter自定义配置文件
2013/06/18 PHP
利用谷歌 Translate API制作自己的翻译脚本
2014/06/04 PHP
PHP+Apache+Mysql环境搭建教程
2016/08/01 PHP
调试php程序的简单步骤
2019/10/04 PHP
js 颜色选择器(兼容firefox)
2009/03/05 Javascript
js将long日期格式转换为标准日期格式实现思路
2013/04/07 Javascript
js 单击式的下拉菜单效果实例
2013/08/13 Javascript
Jquery getJSON方法详细分析
2013/12/26 Javascript
nodejs教程之异步I/O
2014/11/21 NodeJs
jQuery选择器源码解读(六):Sizzle选择器匹配逻辑分析
2015/03/31 Javascript
JavaScript iframe数据共享接口实现方法
2016/01/06 Javascript
详解javascript实现自定义事件
2016/01/19 Javascript
jquery基本选择器匹配多个元素的实现方法
2016/09/05 Javascript
jQuery元素属性操作实例(设置、获取及删除元素属性)
2016/09/08 Javascript
jsTree事件和交互以及插件plugins详解
2017/08/29 Javascript
Vue.js组件通信的几种姿势
2017/10/23 Javascript
JS实现可视化文件上传
2018/09/08 Javascript
基于vue写一个全局Message组件的实现
2019/08/15 Javascript
python 获取本机ip地址的两个方法
2013/02/25 Python
python类的继承实例详解
2017/03/30 Python
pygame实现简易飞机大战
2018/09/11 Python
python集合删除多种方法详解
2020/02/10 Python
Jupyter notebook 远程配置及SSL加密教程
2020/04/14 Python
python实现人像动漫化的示例代码
2020/05/17 Python
利用python清除移动硬盘中的临时文件
2020/10/28 Python
德国汽车零件和汽车配件网上商店:kfzteile24
2018/11/14 全球购物
硕士研究生自我鉴定范文
2013/12/27 职场文书
市政施工员自我鉴定
2014/01/15 职场文书
幼儿园消防演练方案
2014/02/13 职场文书
硕士生工作推荐信
2014/03/07 职场文书
意外伤害赔偿协议书范本
2014/09/28 职场文书
群众路线教育实践活动整改落实情况汇报
2014/10/28 职场文书
资金申请报告范文
2015/05/14 职场文书
和领导吃饭祝酒词
2015/08/11 职场文书
Jupyter Notebook内使用argparse报错的解决方案
2021/06/03 Python
MYSQL如何查看进程和kill进程
2022/03/13 MySQL