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内置函数bin() oct()等实现进制转换
Dec 30 Python
实现python版本的按任意键继续/退出
Sep 26 Python
Python算法应用实战之队列详解
Feb 04 Python
Python tkinter模块中类继承的三种方式分析
Aug 08 Python
利用numpy实现一、二维数组的拼接简单代码示例
Dec 15 Python
Python向MySQL批量插数据的实例讲解
Mar 31 Python
Python函数参数匹配模型通用规则keyword-only参数详解
Jun 10 Python
python获取全国城市pm2.5、臭氧等空气质量过程解析
Oct 12 Python
python numpy数组中的复制知识解析
Feb 03 Python
Python 批量读取文件中指定字符的实现
Mar 06 Python
关于Python 中的时间处理包datetime和arrow的方法详解
Mar 19 Python
基于python纯函数实现井字棋游戏
May 27 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 md5下16位和32位的实现代码
2008/04/09 PHP
php 在线导入mysql大数据程序
2015/06/11 PHP
PHP实现原生态图片上传封装类方法
2016/11/08 PHP
PHP面向对象程序设计之对象生成方法详解
2016/12/02 PHP
PHP PDOStatement::execute讲解
2019/01/31 PHP
php如何获取Http请求
2020/04/30 PHP
javascript IE中的DOM ready应用技巧
2008/07/23 Javascript
自写简单JS判断是否已经弹出页面
2010/10/20 Javascript
Javascript this 的一些学习总结
2012/08/02 Javascript
JS实现图片预加载无需等待
2012/12/21 Javascript
js异步加载的三种解决方案
2013/03/04 Javascript
基于insertBefore制作简单的循环插空效果
2015/09/21 Javascript
JQuery标签页效果实例详解
2015/12/24 Javascript
再谈Javascript中的基本类型和引用类型(推荐)
2016/07/01 Javascript
JavaScript函数节流和函数防抖之间的区别
2017/02/15 Javascript
JavaScript结合HTML DOM实现联动菜单
2017/04/05 Javascript
EasyUI Datebox 日期验证之开始日期小于结束时间
2017/05/19 Javascript
Vue仿手机qq的实例代码(demo)
2017/09/08 Javascript
Vue中"This dependency was not found"问题的解决方法
2018/06/19 Javascript
JavaScript求一个数组中重复出现次数最多的元素及其下标位置示例
2018/07/23 Javascript
Vue项目pdf(base64)转图片遇到的问题及解决方法
2018/10/19 Javascript
python简单实现旋转图片的方法
2015/05/30 Python
python 计算数组中每个数字出现多少次--“Bucket”桶的思想
2017/12/19 Python
Python实现的根据文件名查找数据文件功能示例
2018/05/02 Python
python操作小程序云数据库实现简单的增删改查功能
2019/06/06 Python
Django实现微信小程序的登录验证功能并维护登录态
2019/07/04 Python
Django 模型类(models.py)的定义详解
2019/07/19 Python
使用pytorch完成kaggle猫狗图像识别方式
2020/01/10 Python
python GUI库图形界面开发之PyQt5滚动条控件QScrollBar详细使用方法与实例
2020/03/06 Python
乡镇保密工作责任书
2014/07/28 职场文书
民间借贷借条范本
2015/05/25 职场文书
人民调解协议书
2016/03/21 职场文书
HTML基础-标签分类(闭合标签,空标签,块级元素,行内元素,行级块元素,可替换元素)
2021/03/31 HTML / CSS
Oracle 数据仓库ETL技术之多表插入语句的示例详解
2021/04/12 Oracle
一篇文章带你深入了解Mysql触发器
2021/08/02 MySQL
vue-cil之axios的二次封装与proxy反向代理使用说明
2022/04/07 Vue.js