通过Python 接口使用OpenCV的方法


Posted in Python onApril 02, 2018

一、在 Anaconda2 中配置 OpenCV

解压 opencv,添加系统环境变量,计算机-->右键属性-->高级系统设置-->环境变量-->系统变量-->编辑path-->添加 F:\Program Files (x86)\opencv-3.2.0-vc14\build\x64\vc14\bin

拷贝 opencv/build/python/2.7/x64/cv2.pyd 到 Anaconda2/Lib/Site-packages/

注意:从上面python/2.7可以看出,opencv 官方的 python 接口只支持 Anaconda2的版本 ,如果你装的是 Anaconda3 的话,可以打开cmd,然后执行conda install -c https://conda.anaconda.org/menpo opencv3;

也可以参考此文章进行 Anaconda3 的配置

打开 ipython 测试一下

import cv2
print(cv2.__version__)

二、OpenCV 基础知识

1. 读取、显示和写入图像

import cv2
import matplotlib.pyplot as plt
# 读取图像,第二个参数可以为1(默认读入彩图, 可省略), 0(以灰度图读入)
im = cv2.imread('empire.jpg', 1) # 函数imread()返回图像为一个标准的 NumPy 数组
h,w = im.shape[:2]
print h,w
# 显示图像,第一个参数是窗口的名字,其次才是我们的图像,窗口会自动调整为图像大小。
cv2.imshow('image', img)
cv2.waitKey(0) # 为防止图像一闪而过,无限期的等待键盘输入
cv2.destroyAllWindows() # 关闭所有图像
# 保存图像(必须设置保存图像的路径和扩展名)
cv2.imwrite('result.png', im)
# 使用 plt 显示图像(可显示像素坐标及像素值)、保存图像
plt.imshow(im, cmap='gray', interpolation='bicubic')
plt.show()
plt.savefig('figpath.png', bbox_inches='tight')

2. 颜色空间转换

在OpenCV 中,图像不是按传统的RGB 颜色通道,而是按BGR 顺序(即RGB 的倒序)存储的。读取图像时默认的是BGR,但是还有一些可用的转换函数。颜色空间的转换可以用函数cvtColor() 来实现。

# 1.使用opencv读取并创建灰度图像,按 BGR 顺序
im = cv2.imread('empire.jpg')
gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
# 2.使用matplotlib.image 读入并创建灰度图像,按 RGB 顺序
import matplotlib.image as mpl_img
im = mpl_img.imread('empire.jpg')
gray = cv2.cvtColor(im, cv2.COLOR_RGB2GRAY)
# Note: 注意1和2的区别在颜色转换代码
# 常用:cv2.COLOR_BGR2RGB、cv2.COLOR_GRAY2BGR、cv2.COLOR_BGR2HSV

3. 在图像上画直线、矩形、圆、多边形(曲线)

画直线:cv2.line()

import cv2
# 读取图像,按 BGR 顺序
img = cv2.imread('empire.jpg')
# 传入图像、起点坐标、终点坐标、线的颜色(color)、线的厚度(thickness)
# color : Color of the shape. for BGR, pass it as a tuple, eg: (255,0,0) for blue. For grayscale, just pass the scalar value.
# thickness : if -1 is passed for closed figures like circles, it will fill the shape, default thickness = 1.
img = cv2.line(img, (0, 0), (511, 511), (255, 0, 0), 5)

画矩形:cv2.rectangle()

# 需要传入图像、左上角顶点坐标、右下角顶点坐标、颜色、线宽
img = cv2.rectangle(img, (384, 0), (510, 128), (0, 255, 0), 3)

画圆:cv2.circle()

# 需要传入图像、圆的中心点坐标、半径、颜色、线宽
img = cv2.circle(img, (447, 63), 63, (0, 0, 255), -1)
# If -1 is passed for closed figures like circles, it will fill the shape. default thickness = 1

画多边形(包括曲线):cv2.polylines()

# 数组的数据类型必须为int32,若知道曲线方程,可以生成一堆点,就可以画出曲线来啦
pts = np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)
# 第一个参数为-1, 表明这一维的长度(点的数量)是根据后面的维度的计算出来的
pts = pts.reshape((-1,1,2))
# 如果第三个参数是False,我们得到的多边形是不闭合的(首尾不相连)
img = cv2.polylines(img, [pts], True, (0, 255, 255))

在图片上添加文字:cv2.putText()

font = cv2.FONT_HERSHEY_SIMPLEX
# 第 3~6 个参数为:bottom-left corner where data starts、font size、color、thickness
cv2.putText(img,'OpenCV',(10,500), font, 4, (255, 255, 255), 2, cv2.LINE_AA)

4. 图像的基础操作

获取并修改像素值

import cv2
import numpy as np
img = cv2.imread('messi5.jpg')
px = img[100, 100]
print px
[57 63 68]
# accessing only blue pixel
blue = img[100, 100, 0]
print blue
57 
# modify the pixel
img[100, 100] = [255, 255, 255]
print img[100, 100]
[255 255 255]
# channel 2 所有值置为0 
img[:, :, 2] = 0

获取图像属性

img = cv2.imread('messi5.jpg')
print img.shape
(960L, 1280L, 3L)
print img.size
3686400
print img.dtype
uint8

选取图像块

img = cv2.imread('messi5.jpg')
# select the ball and copy it to another region
ball = img[280:340, 330:390] # 注意:340和390取不到
img[273:333, 100:160] = ball

以上这篇通过Python 接口使用OpenCV的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
从零学python系列之教你如何根据图片生成字符画
May 23 Python
使用Python构建Hopfield网络的教程
Apr 14 Python
在Python程序中操作文件之flush()方法的使用教程
May 24 Python
浅谈python中的实例方法、类方法和静态方法
Feb 17 Python
Python分析学校四六级过关情况
Nov 22 Python
Python解决N阶台阶走法问题的方法分析
Dec 28 Python
Python中将变量按行写入txt文本中的方法
Apr 03 Python
Python字符串和正则表达式中的反斜杠('\')问题详解
Sep 03 Python
安装PyInstaller失败问题解决
Dec 14 Python
Python-openCV读RGB通道图实例
Jan 17 Python
VSCode中autopep8无法运行问题解决方案(提示Error: Command failed,usage)
Mar 02 Python
Python中的datetime包与time包包和模块详情
Feb 28 Python
Python 3.x 安装opencv+opencv_contrib的操作方法
Apr 02 #Python
在python3.5中使用OpenCV的实例讲解
Apr 02 #Python
Python-OpenCV基本操作方法详解
Apr 02 #Python
浅谈Python Opencv中gamma变换的使用详解
Apr 02 #Python
opencv改变imshow窗口大小,窗口位置的方法
Apr 02 #Python
python opencv设置摄像头分辨率以及各个参数的方法
Apr 02 #Python
python opencv 图像尺寸变换方法
Apr 02 #Python
You might like
《破坏领主》销量已超100万 未来将继续开发新内容
2020/03/08 其他游戏
php md5下16位和32位的实现代码
2008/04/09 PHP
PHP 防恶意刷新实现代码
2010/05/16 PHP
PHP生成自定义长度随机字符串的函数分享
2014/05/04 PHP
PHP多进程编程实例
2014/10/15 PHP
PHP实现linux命令tail -f
2016/02/22 PHP
SCP远程VPS快速搬家和WDCP升级php5.3安装memcached和eaccelerator教程
2017/07/27 PHP
thinkPHP3.2.2框架行为扩展及demo示例
2018/06/19 PHP
PHP的mysqli_ssl_set()函数讲解
2019/01/23 PHP
PHP去除空数组且数组键名重置的讲解
2019/02/28 PHP
Laravel事件监听器用法实例分析
2019/03/12 PHP
javascript的数组和常用函数详解
2014/05/09 Javascript
JavaScript中的原型链prototype介绍
2014/12/30 Javascript
Css3制作变形与动画效果
2015/07/24 Javascript
基于jquery实现的树形菜单效果代码
2015/09/06 Javascript
JS+CSS实现大气的黑色首页导航菜单效果代码
2015/09/10 Javascript
百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换
2016/02/19 Javascript
Web前端新人笔记之jquery入门心得(新手必看)
2016/05/17 Javascript
Bootstrap Table的使用总结
2016/10/08 Javascript
jQuery实现一个简单的轮播图
2017/02/19 Javascript
vue插件vue-resource的使用笔记(小结)
2017/08/04 Javascript
Node.js如何使用Diffie-Hellman密钥交换算法详解
2017/09/05 Javascript
React Native基础入门之初步使用Flexbox布局
2018/07/02 Javascript
Vue.js中 v-model 指令的修饰符详解
2018/12/03 Javascript
webpack4之如何编写loader的方法步骤
2019/06/06 Javascript
微信小程序 Storage更新详解
2019/07/16 Javascript
countup.js实现数字动态叠加效果
2019/10/17 Javascript
vue中使用GraphQL的实例代码
2019/11/04 Javascript
Python功能键的读取方法
2015/05/28 Python
澳大利亚领先的武术用品和健身器材供应商:SMAI
2019/03/24 全球购物
应届生财务会计求职信
2013/11/05 职场文书
四年级数学教学反思
2014/02/02 职场文书
医疗纠纷协议书
2014/04/16 职场文书
电子商务专业应届生求职信
2014/05/28 职场文书
董事会决议范本
2015/07/01 职场文书
SQLServer之常用函数总结详解
2021/08/30 SQL Server