通过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 相关文章推荐
在DigitalOcean的服务器上部署flaskblog应用
Dec 19 Python
Python学习小技巧之列表项的推导式与过滤操作
May 20 Python
python爬虫headers设置后无效的解决方法
Oct 21 Python
利用Opencv中Houghline方法实现直线检测
Feb 11 Python
Python-OpenCV基本操作方法详解
Apr 02 Python
pandas 对series和dataframe进行排序的实例
Jun 09 Python
解决Python pandas df 写入excel 出现的问题
Jul 04 Python
Centos下实现安装Python3.6和Python2共存
Aug 15 Python
python实现简单日期工具类
Apr 24 Python
Django集成搜索引擎Elasticserach的方法示例
Jun 04 Python
Python通过递归函数输出嵌套列表元素
Oct 15 Python
Python列表元素删除和remove()方法详解
Jan 04 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
PHP 开源AJAX框架14种
2009/08/24 PHP
PHP字符过滤函数去除字符串最后一个逗号(rtrim)
2013/03/26 PHP
php按单词截取字符串的方法
2015/04/07 PHP
php curl 获取https请求的2种方法
2015/04/27 PHP
PHP实现的服务器一致性hash分布算法示例
2018/08/09 PHP
JavaScript聚焦于第一个字段的代码
2010/10/15 Javascript
jQuery实现鼠标经过图片变亮其他变暗效果
2015/05/08 Javascript
JavaScript统计网站访问次数的实现代码
2015/11/18 Javascript
angularjs实现的前端分页控件示例
2017/02/10 Javascript
基于JavaScript实现幸运抽奖页面
2020/07/05 Javascript
JavaScript常见事件处理程序实例总结
2019/01/05 Javascript
Angular脚手架开发的实现步骤
2019/04/09 Javascript
微信小程序实现渐入渐出动画效果
2019/06/13 Javascript
electron实现静默打印的示例代码
2019/08/12 Javascript
利用layer实现表单完美验证的方法
2019/09/26 Javascript
浅谈如何优雅处理JavaScript异步错误
2019/11/12 Javascript
微信小程序获取当前时间及星期几的实例代码
2020/09/20 Javascript
python使用心得之获得github代码库列表
2014/06/25 Python
Python编码类型转换方法详解
2016/07/01 Python
PyQt5打开文件对话框QFileDialog实例代码
2018/02/07 Python
python 获取指定文件夹下所有文件名称并写入列表的实例
2018/04/23 Python
Python + selenium自动化环境搭建的完整步骤
2018/05/19 Python
Kali Linux安装ipython2 和 ipython3的方法
2019/07/11 Python
Python使用qrcode二维码库生成二维码方法详解
2020/02/17 Python
python爬虫构建代理ip池抓取数据库的示例代码
2020/09/22 Python
详解Java中一维、二维数组在内存中的结构
2021/02/11 Python
使用css如何制作时间ICON方法实践
2012/11/12 HTML / CSS
维珍澳洲航空官网:Virgin Australia
2017/09/08 全球购物
比利时买床:Beter Bed
2017/12/06 全球购物
Kangol帽子官网:坎戈尔袋鼠
2018/09/26 全球购物
解释下面关于J2EE的名词
2013/11/15 面试题
五一活动标语
2014/06/30 职场文书
应届大学生求职信
2014/07/20 职场文书
个人售房合同协议书
2016/03/21 职场文书
HashMap实现保存两个key相同的数据
2021/06/30 Java/Android
springboot新建项目pom.xml文件第一行报错的解决
2022/01/18 Java/Android