Python-OpenCV基本操作方法详解


Posted in Python onApril 02, 2018

基本属性

cv2.imread(文件名,属性) 读入图像

属性:指定图像用哪种方式读取文件

cv2.IMREAD_COLOR:读入彩色图像,默认参数,Opencv 读取彩色图像为BGR模式 !!!注意

cv2.IMREAD_GRAYSCALE:读入灰度图像。

cv2.imshow(窗口名,图像文件) 显示图像

可以创建多个窗口

cv2.waitKey() 键盘绑定函数

函数等待特定的几毫秒,看是否由键盘输入。

cv2.namedWindow(窗口名,属性) 创建一个窗口

属性:指定窗口大小模式

cv2.WINDOW_AUTOSIZE:根据图像大小自动创建大小

cv2.WINDOW_NORMAL:窗口大小可调整

cv2.destoryAllWindows(窗口名) 删除任何建立的窗口

代码实例:

import cv2
 img=cv2.imread('test.py',cv2.IMREAD_COLOR)
 cv2.namedWindow('image',cv2.WINDOW_NORMAL)
 cv2.imshow('image',img)
 cv2.waitKey(0)
 cv2.destoryAllWindows()

cv2.imwrite(保存图像名,需保存图像) 保存图像

代码实例:

import cv2
 img=cv2.imread('test.png',0)
 cv2.imshow('image',img)
 k=cv2.waitKey(0)
 if k==27: #等待 ESC 键
  cv2.destoryAllWindows()
 elif k==ord('s') #等待 's' 键来保存和退出
  cv2.imwrite('messigray.png',img)
  cv2.destoryAllWindows()

对于图像的一些操作

0x01. 获取图片属性

import cv2
img=img.imread('test.png')
print img.shape
#(768,1024,3)
print img.size
#2359296 768*1024*3
print img.dtype
#uint8

0x02. 输出文本

在处理图片时,将一些信息直接以文字的形式输出在图片上

cv2.putText(图片名,文字,坐标,文字颜色)

0x03. 缩放图片

实现缩放图片并保存,在使用OpenCV时常用的操作。cv2.resize()支持多种插值算法,默认使用cv2.INTER_LINEAR,缩小最适合使用:cv2.INTER_AREA,放大最适合使用:cv2.INTER_CUBIC或cv2.INTER_LINEAR。

res=cv2.resize(image,(2*width,2*height),interpolation=cv2.INTER_CUBIC)

或者:

res=cv2.resize(image,None,fx=2,fy=2,interpolation=cv2.INTER_CUBIC)

此处None本应该是输出图像的尺寸,因为后边设置了缩放因子

0x04. 图像平移

cv2.warpAffine(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]])

平移就是将图像换个位置,如果要沿(x,y)方向移动,移动距离为(tx,ty),则需要构建偏移矩阵M。

Python-OpenCV基本操作方法详解

例如 平移图片(100,50)

import cv2
 img=cv2.imread('test.png',1)
 rows,cols,channel=img.shape
 M=np.float32([[1,0,100],[0,1,50]])
 dst=cv2.warpAffine(img,M,(cols,rows))
 cv2.imshow('img',dst)
 cv2.waitKey(0)
 cv2.destoryALLWindows()

其中 (cols,rows)代表输出图像的大小,M为变换矩阵,100代表x的偏移量,50代表y的偏移量,单位为像素。

0x05. 图像旋转

OpenCV中首先需要构造一个旋转矩阵,通过cv2.getRotationMatrix2D获得。

import cv2
img=cv2.imread('test.png',0)
rows,cols=img.shape
#第一个参数为旋转中心,第二个为旋转角度,第三个为旋转后的缩放因子
M=cv2.getRotationMatrix2D((cols/2,rows/2),45,0.6)
#第三个参数为图像的尺寸中心
dst=cv2.warpAffine(img,M,(2*cols,2*rows))
cv2.imshow('img',dst)
cv2.waitKey(0)
cv2.destoryALLWindows()

0x06. 仿射变换

在仿射变换中,原图中所有的平行线在结果图像中同样平行。为了创建偏移矩阵,需要在原图像中找到三个点以及它们在输出图像中的位置。然后OpenCV中提供了cv2.getAffineTransform创建2*3的矩阵,最后将矩阵传给函数cv2.warpAffine。

import cv2
import matplotlib.pyplot as plt
import numpy as np
img=cv2.imread('test.png')
rows,cols,ch=img.shape
pts1=np.float32([[50,50],[200,50],[50,200]])
pts2=np.float32([[10,100],[200,50],[100,250]])
M=cv2.getAffineTransform(pts1,pts2)
dst=cv2.warpAffine(img,M,(cols,rows))
plt.subplot(121),plt.imshow(img),plt.title('Input')
plt.subplot(122),plt.imshow(dst),plt.title('Output')
plt.show()

Python-OpenCV基本操作方法详解

0x07. 透视变换

视角变换,需要一个3*3变换矩阵。在变换前后要保证直线还是直线。构建此矩阵需要在输入图像中找寻4个点,以及在输出图像中对应的位置。这四个点中的任意三个点不能共线。变换矩阵OpenCV提供cv2.getPerspectiveTransform()构建。然后将矩阵传入函数cv2.warpPerspective。

import cv2
import numpy as np
import matplotlib.pyplot as plt
img=cv2.imread('test.png')
rows,cols,ch=img.shape
pts1=np.float32([[56,65],[368,52],[28,387],[389,390]])
pts2=np.float32([[0,0],[300,0],[0,300],[300,300]])
M=cv2.getPerspectiveTransform(pts1,pts2)
dst=cv2.warpPerspective(img,M,(300,300))
plt.subplot(121),plt.imshow(img),plt.title('Input')
plt.subplot(122),plt.imshow(dst),plt.title('Output')
plt.show()

Python-OpenCV基本操作方法详解

0x09. 图像 regions of Interest

有时需要对一副图像的特定区域进行操作,ROI使用Numpy索引来获得的。

import cv2
import numpy as np
import matplotlib.pyplot as plt

image=cv2.imread('test.png')
rows,cols,ch=image.shape
tall=image[0:100,300:700]
image[0:100,600:1000]=tallall
cv2.imshow("image",image)
cv2.waitKey(0)
cv2.destoryALLWindows()

Python-OpenCV基本操作方法详解

0x10. 通道的拆分/合并处理

有时需要对BGR三个通道分别进行操作。这时需要将BGR拆分成单个通道。同时有时需要把独立通道的图片合并成一个BGR图像。

使用OpenCV库函数版本

import cv2
import numpy as np
import matplotlib.pyplot as plt

image=cv2.imread('pitt1.jpg')
rows,cols,ch=image.shape
#拆分通道,cv2.split()是一个比较耗时的操作。只有需要时使用,尽量Numpy
b,g,r=cv2.split(image)
print b.shape
#(768,1024)
#合并通道
image=cv2.merge(b,g,r)

使用Numpy索引版本:

import cv2
import numpy as np
import matplotlib.pyplot as plt

image=cv2.imread('pitt1.jpg')
rows,cols,ch=image.shape
#直接获取
b=img[:,:,0]

以上这篇Python-OpenCV基本操作方法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python Web开发模板引擎优缺点总结
May 06 Python
Python获取电脑硬件信息及状态的实现方法
Aug 29 Python
Python HTMLParser模块解析html获取url实例
Apr 08 Python
python虚拟环境virualenv的安装与使用
Dec 18 Python
python的变量与赋值详细分析
Nov 08 Python
python绘制铅球的运行轨迹代码分享
Nov 14 Python
python实现定时自动备份文件到其他主机的实例代码
Feb 23 Python
Python中关键字global和nonlocal的区别详解
Sep 03 Python
python GUI库图形界面开发之PyQt5时间控件QTimer详细使用方法与实例
Feb 26 Python
详解Python 最短匹配模式
Jul 29 Python
python基础之函数的定义和调用
Oct 24 Python
Python实现科学占卜 让视频自动打码
Apr 09 Python
浅谈Python Opencv中gamma变换的使用详解
Apr 02 #Python
opencv改变imshow窗口大小,窗口位置的方法
Apr 02 #Python
python opencv设置摄像头分辨率以及各个参数的方法
Apr 02 #Python
python opencv 图像尺寸变换方法
Apr 02 #Python
Python聊天室程序(基础版)
Apr 01 #Python
Python socket实现简单聊天室
Apr 01 #Python
简单实现python聊天程序
Apr 01 #Python
You might like
PHP中限制IP段访问、禁止IP提交表单的代码
2011/04/23 PHP
浅析PHP原理之变量分离/引用(Variables Separation)
2013/08/09 PHP
Apache无法自动跳转却显示目录的解决方法
2020/11/30 PHP
PHP编程获取音频文件时长的方法【基于getid3类】
2017/04/20 PHP
PHP查找一列有序数组是否包含某值的方法
2020/02/07 PHP
用javascript实现兼容IE7的类库 IE7_0_9.zip提供下载
2007/08/08 Javascript
jquery ajax 局部无刷新更新数据的实现案例
2014/02/08 Javascript
动态加载jquery库的方法
2014/02/12 Javascript
页面加载完毕后滚动条自动滚动一定位置
2014/02/20 Javascript
javascript刷新父页面的各种方法汇总
2014/09/03 Javascript
基于jQuery+Cookie实现的防止刷新的在线考试倒计时
2015/06/19 Javascript
jQuery根据元素值删除数组元素的方法
2015/06/24 Javascript
js前端实现多图图片上传预览的两个方法(推荐)
2016/11/18 Javascript
jQuery自定义插件详解及实例代码
2016/12/29 Javascript
如何解决vue与传统jquery插件冲突
2017/03/20 Javascript
基于Vue实例对象的数据选项
2017/08/09 Javascript
JavaScript实现为事件句柄绑定监听函数的方法分析
2017/11/14 Javascript
jQuery实现侧边栏隐藏与显示的方法详解
2018/12/22 jQuery
vue双向绑定及观察者模式详解
2019/03/19 Javascript
jquery实现二级导航下拉菜单效果实例
2019/05/14 jQuery
Vue表单提交点击事件只允许点击一次的实例
2020/10/23 Javascript
[01:03]悬念揭晓 11月26日DOTA2完美盛典不见不散
2017/11/23 DOTA
python中partial()基础用法说明
2018/12/30 Python
python实现LBP方法提取图像纹理特征实现分类的步骤
2019/07/11 Python
Python如何用filter函数筛选数据
2020/03/05 Python
python中最小二乘法详细讲解
2021/02/19 Python
CSS3制作苹果风格键盘特效
2015/02/26 HTML / CSS
柒牌官方商城:中国男装优秀品牌
2017/06/30 全球购物
介绍一下Transact-SQL中SPACE函数的用法
2015/09/01 面试题
为什么Runtime.exec(“ls”)没有任何输出?
2014/10/03 面试题
计算机科学技术自荐信
2014/06/12 职场文书
目标责任书格式
2014/07/28 职场文书
暑期辅导班宣传单
2015/07/14 职场文书
2016党校学习心得体会范文
2016/01/07 职场文书
MySql数据库触发器使用教程
2022/06/01 MySQL
MySQL数据库如何查看表占用空间大小
2022/06/10 MySQL