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制作简单的朴素基数估计器的教程
Apr 01 Python
使用Python制作获取网站目录的图形化程序
May 04 Python
Python中遇到的小问题及解决方法汇总
Jan 11 Python
Python实现桶排序与快速排序算法结合应用示例
Nov 22 Python
Python 实现Windows开机运行某软件的方法
Oct 14 Python
Django实现跨域请求过程详解
Jul 25 Python
使用IDLE的Python shell窗口实例详解
Nov 19 Python
pymysql的简单封装代码实例
Jan 08 Python
Python3中的f-Strings增强版字符串格式化方法
Mar 04 Python
python继承threading.Thread实现有返回值的子类实例
May 02 Python
python UDF 实现对csv批量md5加密操作
Jan 01 Python
python套接字socket通信
Apr 01 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+mysql来做一个功能强大的在线计算器
2010/10/12 PHP
ThinkPHP行为扩展Behavior应用实例详解
2014/07/22 PHP
PHP异常处理浅析
2015/05/12 PHP
PHP中explode函数和split函数的区别小结
2016/08/24 PHP
laravel学习笔记之模型事件的几种用法示例
2017/08/15 PHP
利用php获得flv视频长度的实例代码
2017/10/26 PHP
php生成静态页面并实现预览功能
2019/06/27 PHP
php数值计算num类简单操作示例
2020/05/15 PHP
JQuery select标签操作代码段
2010/05/16 Javascript
jquery下json数组的操作实现代码
2010/08/09 Javascript
js字符串转换成数字与数字转换成字符串的实现方法
2014/01/08 Javascript
JavaScript新窗口与子窗口传值详解
2014/02/11 Javascript
jQuery修改CSS伪元素属性的方法
2014/07/30 Javascript
js判断是否按下了Shift键的方法
2015/01/27 Javascript
对Web开发中前端框架与前端类库的一些思考
2015/03/27 Javascript
JS延时器提示框的应用实例代码解析
2016/04/27 Javascript
AngularJS实现按钮提示与点击变色效果
2016/09/07 Javascript
Bootstrap基本组件学习笔记之列表组(11)
2016/12/07 Javascript
原生js实现中奖信息无间隙滚动效果
2017/01/18 Javascript
微信小程序 基础知识css样式media标签
2017/02/15 Javascript
js从输入框读取内容,比较两个数字的大小方法
2017/03/13 Javascript
解决layui富文本编辑器图片上传无法回显的问题
2019/09/18 Javascript
原生js实现碰撞检测
2020/03/12 Javascript
[42:56]VGJ.S vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python命令行参数解析模块optparse使用实例
2015/04/13 Python
Python语法快速入门指南
2015/10/12 Python
Python正则表达式使用经典实例
2016/06/21 Python
Python爬虫实例扒取2345天气预报
2018/03/04 Python
python实现测试工具(二)——简单的ui测试工具
2020/10/19 Python
HTML5对比HTML4的主要改变和改进总结
2016/05/27 HTML / CSS
vue 中 get / delete 传递数组参数方法
2021/03/23 Vue.js
食品安全演讲稿
2014/09/01 职场文书
教师批评与自我批评发言稿
2014/10/15 职场文书
红旗渠导游词
2015/02/09 职场文书
考试后的感想
2015/08/07 职场文书
预防职务犯罪警示教育心得体会
2016/01/15 职场文书