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 31 Python
浅谈Python爬取网页的编码处理
Nov 04 Python
详解Python中的正则表达式
Jul 08 Python
在cmder下安装ipython以及环境的搭建
Oct 19 Python
漂亮的Django Markdown富文本app插件的实现
Jan 02 Python
用python 实现在不确定行数情况下多行输入方法
Jan 28 Python
Django 源码WSGI剖析过程详解
Aug 05 Python
浅谈Python中(&,|)和(and,or)之间的区别
Aug 07 Python
图文详解Django使用Pycharm连接MySQL数据库
Aug 09 Python
opencv设置采集视频分辨率方式
Dec 10 Python
浅谈python 中的 type(), dtype(), astype()的区别
Apr 09 Python
基于python实现获取网页图片过程解析
May 11 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使用iconv中文截断问题的解决方法
2015/02/11 PHP
注意!PHP 7中不要做的10件事
2016/09/18 PHP
php实现将二维关联数组转换成字符串的方法详解
2017/07/31 PHP
PHP实现常用排序算法的方法
2020/02/05 PHP
Gambit vs CL BO3 第三场 2.13
2021/03/10 DOTA
Jquery升级新版本后选择器的语法问题
2010/06/02 Javascript
javascript 获取网页标题代码实例
2014/01/22 Javascript
详解JavaScript中循环控制语句的用法
2015/06/03 Javascript
全面了解addEventListener和on的区别
2016/07/14 Javascript
javascript实现滚动效果的数字时钟实例
2016/07/21 Javascript
JavaScript toUpperCase()方法使用详解
2016/08/26 Javascript
jquery控制页面的展开和隐藏实现方法(推荐)
2016/10/15 Javascript
JS实现获取来自百度,Google,soso,sogou关键词的方法
2016/12/21 Javascript
AngularJS框架的ng-app指令与自动加载实现方法分析
2017/01/04 Javascript
微信小程序 参数传递实例代码
2017/03/20 Javascript
小程序点击图片实现自动播放视频
2020/05/29 Javascript
express启用https使用小记
2019/05/21 Javascript
nodejs语言实现验证码生成功能的示例代码
2019/10/13 NodeJs
vue实现短信验证码登录功能(流程详解)
2019/12/10 Javascript
Python中字典的基本知识初步介绍
2015/05/21 Python
python删除列表内容
2015/08/04 Python
Python类的继承和多态代码详解
2017/12/27 Python
浅谈Python实现2种文件复制的方法
2018/01/19 Python
python  文件的基本操作 菜中菜功能的实例代码
2019/07/17 Python
Python pandas用法最全整理
2019/08/04 Python
Python实现二叉树的最小深度的两种方法
2019/09/30 Python
教你如何用python操作摄像头以及对视频流的处理
2020/10/12 Python
详解pycharm自动import所需的库的操作方法
2020/11/30 Python
HTML+CSS3模拟心的跳动实例代码
2017/09/05 HTML / CSS
英国奢侈品牌时尚购物平台:Farfetch(支持中文)
2020/02/18 全球购物
手术室护士长竞聘书
2014/03/31 职场文书
预防煤气中毒方案
2014/06/16 职场文书
工艺技术员岗位职责
2015/02/04 职场文书
2015年后备干部工作总结
2015/05/15 职场文书
幼儿园迎新生欢迎词
2015/09/30 职场文书
2016年幼儿园万圣节活动总结
2016/04/05 职场文书