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 sqlite3事务处理方法实例分析
Jun 19 Python
Python 装饰器使用详解
Jul 29 Python
Python爬虫实战:分析《战狼2》豆瓣影评
Mar 26 Python
python抓取搜狗微信公众号文章
Apr 01 Python
Ubuntu18.04下python版本完美切换的解决方法
Jun 14 Python
Python通过2种方法输出带颜色字体
Mar 02 Python
使用keras时input_shape的维度表示问题说明
Jun 29 Python
python属于哪种语言
Aug 16 Python
Python Django路径配置实现过程解析
Nov 05 Python
pytorch中的model=model.to(device)使用说明
May 24 Python
Matlab如何实现矩阵复制扩充
Jun 02 Python
浅析Python中的套接字编程
Jun 22 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微信支付之APP支付方法
2015/03/04 PHP
Yii调试查看执行SQL语句的方法
2016/07/15 PHP
php array_pop 删除数组最后一个元素实例
2016/11/02 PHP
Javascript中正则表达式的全局匹配模式分析
2011/04/26 Javascript
jQuery EasyUI API 中文文档 - Panel面板
2011/09/30 Javascript
Microsfot .NET Framework4.0框架 安装失败的解决方法
2013/08/14 Javascript
JS中的构造函数详细解析
2014/03/10 Javascript
JavaScript数组去重的两种方法推荐
2016/04/05 Javascript
JS仿hao123导航页面图片轮播效果
2016/09/01 Javascript
Bootstrap如何激活导航状态
2017/03/22 Javascript
Node.js爬取豆瓣数据实例分析
2018/03/05 Javascript
通过 JS 判断页面是否有滚动条的实现方法
2018/04/05 Javascript
详解在Vue中使用TypeScript的一些思考(实践)
2018/07/06 Javascript
javascript实现图片轮播代码
2019/07/09 Javascript
原生js实现文件上传、下载、封装等实例方法
2020/01/05 Javascript
python操作数据库之sqlite3打开数据库、删除、修改示例
2014/03/13 Python
Python正则表达式匹配HTML页面编码
2015/04/08 Python
关于pip的安装,更新,卸载模块以及使用方法(详解)
2017/05/19 Python
python 获取一个值在某个区间的指定倍数的值方法
2018/11/12 Python
Python面向对象程序设计多继承和多态用法示例
2019/04/08 Python
python操作kafka实践的示例代码
2019/06/19 Python
python3 mmh3安装及使用方法
2019/10/09 Python
Django 多对多字段的更新和插入数据实例
2020/03/31 Python
Python json转字典字符方法实例解析
2020/04/13 Python
django 数据库返回queryset实现封装为字典
2020/05/19 Python
Django模型验证器介绍与源码分析
2020/09/08 Python
python软件测试Jmeter性能测试JDBC Request(结合数据库)的使用详解
2021/01/26 Python
HTML5 Canvas——用路径描画线条实例介绍
2013/06/09 HTML / CSS
HTML5 移动页面自适应手机屏幕四类方法总结
2017/08/17 HTML / CSS
shell的种类有哪些
2015/04/15 面试题
公司活动邀请函
2014/01/24 职场文书
前厅部经理岗位职责范文
2014/02/04 职场文书
2015年国税春训心得体会
2015/03/09 职场文书
2015年超市员工工作总结
2015/05/04 职场文书
MySQL 慢查询日志深入理解
2021/04/22 MySQL
python读取mnist数据集方法案例详解
2021/09/04 Python