OpenCV 基础

OpenCV 基础

OpenCV是Open Source Computer Vision Library的简称,是一个被业界广泛使用的图像处理和计算机视觉开发工具库。OpenCV项目由英特尔公司于1999开始开发,2006年,英特尔公司发布OpenCV 1.0 版本,2009年10月发布OpenCV 2.0 版本,目前,OpenCV已经发布了4.0 版本。2012年8月,英特尔公司把OpenCV的营运交由一个非营利组织(OpenCV.org)维护。OpenCV提供了C++、 Python、Java 版本,能够安装在Linux、 MacOS、Windows、iOS、Android等操作系统上。

OpenCV的模块

  • Core:核心库,定义了基本数据结构和函数,被其他模块库调用
  • Imagproc库: 图像处理库,包括图像滤波,几何变换,颜色空间转换,直方图
  • Imgcodecs库: 图像文件的读取和写入
  • Videoio库: 视频文件的抓取,读取和写入
  • Highgui库: 高层图形用户界面,功能包括:创建和操作显示图像的窗口;为窗口界面提供键盘和鼠标操作的控件
  • Video库: 视频分析库,包括背景提取,运动估计,物体跟踪算法
  • Calib3d库: 相机配准和3D重构库,包括多维视角几何算法,立体对应算法,姿态估计,平面和立体配准,3D重构
  • features2d: 2维特征框架库,包括特征检测,描述子,描述子匹配
  • objdetect: 物体检测库,检测预先定义的物体,例如人脸,汽车,马路,猫,狗,桌子,瓶子邓等
  • dnn: 深度神经网络库,创建一个新层的接口,从层构造和修改神经网络的接口,从不同的深度学习框架导入串型网络
  • ml: 机器学习库,一组类和函数,用于分类,回归,聚类等等
  • flann: 聚类和搜索库,实现快速邻居搜索
  • shape: 外形距离计算和匹配库,根据外形实现匹配,检索和比较
  • superres: 方案提升库,提升现有算法性能
  • viz: 三维度可视库,实现与场景和组件的交互
  • stitching: 图像缝补库,videostab: 视频稳定化库,photo: 计算摄影学库

在这里插入图片描述
图 1. OpenCV 2.0 的模块

OpenCV-Python 安装

在 Python 中使用 OpenCV 十分简单,只要安装 opencv-python 包即可,但因为安装包很大,预设是从 pypi 网站下载,所以先将安装镜像档先修改到国内,可以有效的降低安装时间。

# 设定镜像源:
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
# pip安装源的可信问题:
pip config set install.trusted-host pypi.tuna.tsinghua.edu.cn
# pip安装源的超时设置:
pip config set global.timeout 6000
# 安装 OpenCV-Python 
pip install opencv-python

读取图像
imread(filename, flag=1)
读取图像。图像应该在工作目录或图像的完整路径应给出。第二个参数是一个标志,它指定了读取图像的方式。

  • IMREAD_COLOR: 加载彩色图像。任何图像的透明度都会被忽视。它是默认标志。
  • IMREAD_GRAYSCALE:以灰度模式加载图像。
  • IMREAD_UNCHANGED:加载图像,包括alpha通道。

imshow(winname, mat)
显示图像,带两个参数,winname图像窗口名,mat图像矩阵。注意,在 jupyter 环境下,opencv 的 cv.imshow() 函数无法正常显示图片,所以用 plt.imshow() 函数替代。

waitkey(delay=0)
等待敲击键盘, delay为等待时间,毫秒,默认为0,表示一直等待,返回被敲的键的ASC编码;如果时间终止没有敲击,返回-1。

destroyWindow(winname)
销毁指定的窗口 winname,若没指定,则是销毁所有窗口。

参考源码 .py

import cv2
#加载彩色图像
img1 = cv2.imread('../data/gd.jpg',cv2.IMREAD_COLOR)
#加载灰度图像
img2 = cv2.imread('../data/gd.jpg',cv2.IMREAD_GRAYSCALE)

cv2.imshow('win1',img1)
cv2.imshow('win2',img2)
cv2.waitKey(0)
cv2.destroyWindow()

参考源码 .ipynb

from matplotlib import pyplot as plt
import cv2
#加载彩色图像
img1 = cv2.imread('../data/gd.jpg',cv2.IMREAD_COLOR)
img2 = cv2.imread('../data/gd.jpg',cv2.IMREAD_GRAYSCALE)
plt.figure(figsize=(8,12))
plt.subplot(211)
plt.imshow(img1)
plt.subplot(212)
plt.imshow(img2,plt.cm.gray)
plt.show()

在这里插入图片描述
图 2. OpenCV 读取图像

图像感兴趣区域ROI
有时候,我们不得不处理一些特定区域的图像。对于图像中的眼睛检测,首先对整个图像进行人脸检测。在获取人脸图像时,我们只选择人脸区域,搜索其中的眼睛,而不是搜索整个图像。它提高了准确性(因为眼睛总是在面部上和性能(因为我们搜索的区域很小)。使用 Numpy 索引再次获得 ROI(Region of Interest) 。我们选择球并将其复制到图像中的另一个区域:

参考源码

from matplotlib import pyplot as plt
import cv2
#加载彩色图像
img1 = cv2.imread('../data/messi.jpg',cv2.IMREAD_COLOR)
img1=cv2.cvtColor(img1, cv2.COLOR_BGR2RGB)
#plt.figure(figsize=(12,8))
figure, plots = plt.subplots(ncols=3, nrows=1,figsize=(12,6))
plots[0].imshow(img1)
ball_ = img1[400:500, 450:550]
plots[1].imshow(ball_)
img1[400:500, 100:200] = ball_
plots[2].imshow(img1)
plt.show()

在这里插入图片描述
图 3. 复制感兴趣区域

参考资料

  • OpenCV API, https://docs.opencv.org/
  • matplotlib.pyplot.subplot, https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.subplot.html#matplotlib.pyplot.subplot
  • matplotlib.pyplot.imshow, https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.imshow.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值