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使用内存zipfile对象在内存中打包文件示例
Apr 30 Python
简单的Apache+FastCGI+Django配置指南
Jul 22 Python
Python数组遍历的简单实现方法小结
Apr 27 Python
Python日期的加减等操作的示例
Aug 15 Python
python基于http下载视频或音频
Jun 20 Python
python 实现对文件夹中的图像连续重命名方法
Oct 25 Python
Django ORM 聚合查询和分组查询实现详解
Aug 09 Python
解决Python命令行下退格,删除,方向键乱码(亲测有效)
Jan 16 Python
Python写出新冠状病毒确诊人数地图的方法
Feb 12 Python
PyCharm GUI界面开发和exe文件生成的实现
Mar 04 Python
python实现学生信息管理系统源码
Feb 22 Python
详解Python如何批量采集京东商品数据流程
Jan 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实现异步调用方法研究与分享
2011/10/27 PHP
PHP的几个常用数字判断函数代码
2012/04/24 PHP
PHP 获取文件权限函数介绍
2013/07/11 PHP
基于PHP实现简单的随机抽奖小程序
2016/01/05 PHP
php 时间time与日期date之间的使用详解及区别
2016/11/07 PHP
PHP编程实现csv文件导入mysql数据库的方法
2017/04/29 PHP
thinkphp5使html5实现动态跳转的例子
2019/10/16 PHP
如何在标题栏显示框架内页面的标题
2007/02/03 Javascript
asp.net下使用jquery 的ajax+WebService+json 实现无刷新取后台值的实现代码
2010/09/19 Javascript
javascript语言结构小记(一)
2011/09/10 Javascript
Javascript 面向对象(一)(共有方法,私有方法,特权方法)
2012/05/23 Javascript
JS中Date日期函数中的参数使用介绍
2014/01/02 Javascript
js和jquery使按钮失效为不可用状态的方法
2014/01/26 Javascript
js过滤HTML标签完整实例
2015/11/26 Javascript
JavaScript 异步调用
2017/10/25 Javascript
js判断传入时间和当前时间大小实例(超简单)
2018/01/11 Javascript
Vue 将后台传过来的带html字段的字符串转换为 HTML
2018/03/29 Javascript
jQuery zTree树插件的使用教程
2019/08/16 jQuery
在博客园博文中添加自定义右键菜单的方法详解
2020/02/05 Javascript
在Python中处理日期和时间的基本知识点整理汇总
2015/05/22 Python
快速解决pandas.read_csv()乱码的问题
2018/06/15 Python
使用python将时间转换为指定的格式方法
2018/11/12 Python
Python实现获取汉字偏旁部首的方法示例【测试可用】
2018/12/18 Python
python中的colorlog库使用详解
2019/07/05 Python
通过实例解析Python return运行原理
2020/03/04 Python
Pycharm如何自动生成头文件注释
2020/11/14 Python
详解Python中的文件操作
2021/01/14 Python
详解Python Celery和RabbitMQ实战教程
2021/01/20 Python
Python爬虫实例之2021猫眼票房字体加密反爬策略(粗略版)
2021/02/22 Python
Tory Burch美国官方网站:美国时尚生活品牌
2016/08/01 全球购物
美国网上书店:Barnes & Noble
2018/08/15 全球购物
美国家庭鞋店:Shoe Sensation
2019/09/27 全球购物
俄罗斯三星品牌商店:GalaxyStore
2020/11/04 全球购物
有关环保的标语
2014/06/13 职场文书
2015年度残疾人工作总结
2015/05/14 职场文书
JavaWeb 入门:Hello Servlet
2021/07/16 Java/Android