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获取GY-85九轴模块信息示例
Dec 05 Python
使用python获取CPU和内存信息的思路与实现(linux系统)
Jan 03 Python
用Python遍历C盘dll文件的方法
May 06 Python
基于python时间处理方法(详解)
Aug 14 Python
关于python的list相关知识(推荐)
Aug 30 Python
Python 将pdf转成图片的方法
Apr 23 Python
PyTorch读取Cifar数据集并显示图片的实例讲解
Jul 27 Python
python实现本地图片转存并重命名的示例代码
Oct 27 Python
python实现从pdf文件中提取文本,并自动翻译的方法
Nov 28 Python
对Python3使运行暂停的方法详解
Feb 18 Python
python实现图像全景拼接
Mar 27 Python
python能做哪些生活有趣的事情
Sep 09 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编程中数组的指针的使用
2015/11/30 PHP
文本框获得焦点和失去焦点的判断代码
2012/03/18 Javascript
js浮点数保留两位小数点示例代码(四舍五入)
2013/12/26 Javascript
有关JavaScript中call()和apply() 的一些理解
2016/05/20 Javascript
BootStrapValidator初使用教程详解
2017/02/10 Javascript
JavaScript操作文件_动力节点Java学院整理
2017/06/30 Javascript
Django+Vue.js搭建前后端分离项目的示例
2017/08/07 Javascript
JS动态添加的div点击跳转到另一页面实现代码
2017/09/30 Javascript
利用vue组件自定义v-model实现一个Tab组件方法示例
2017/12/06 Javascript
微信小程序环境下将文件上传到OSS的方法步骤
2019/05/31 Javascript
解决vue单页面应用中动态修改title问题
2019/06/09 Javascript
浅入深出Vue之自动化路由
2019/08/06 Javascript
es6中reduce的基本使用方法
2019/09/10 Javascript
JavaScript实现与web通信的方法详解
2020/08/07 Javascript
[50:29]2014 DOTA2华西杯精英邀请赛 5 24 DK VS iG
2014/05/26 DOTA
[02:47]2018年度DOTA2最佳辅助位选手4号位-完美盛典
2018/12/17 DOTA
TensorFlow 合并/连接数组的方法
2018/07/27 Python
Python实现App自动签到领取积分功能
2018/09/29 Python
python爬取内容存入Excel实例
2019/02/20 Python
在PyTorch中Tensor的查找和筛选例子
2019/08/18 Python
Python Django 简单分页的实现代码解析
2019/08/21 Python
Python函数式编程实例详解
2020/01/17 Python
Django权限设置及验证方式
2020/05/13 Python
学生如何注册Pycharm专业版以及pycharm的安装
2020/09/24 Python
Python调用JavaScript代码的方法
2020/10/27 Python
Python 生成短8位唯一id实战教程
2021/01/13 Python
面向对象概念面试题(.NET)
2016/11/04 面试题
两只小狮子教学反思
2014/02/05 职场文书
护士进修自我鉴定
2014/02/07 职场文书
保险公司早会主持词
2014/03/22 职场文书
护士个人自我鉴定
2014/03/24 职场文书
初中英语演讲稿
2014/04/29 职场文书
关于工作经历的证明书
2014/10/11 职场文书
优秀学生干部事迹材料
2014/12/24 职场文书
行政人事主管岗位职责
2015/04/11 职场文书
iPhone13再次曝光
2021/04/15 数码科技