1.cv2安装
解析:下载OpenCV,然后解压,将文件D:\opencv\build\python\2.7\x64\cv2.pyd放入目录D:\Program Files\Anaconda2\Lib\site-packages下面即可。
2.图片读、写和显示操作
import cv2
img = cv2.imread("empire.jpg", 0)
cv2.imshow('image', img)
k = cv2.waitKey(0)
# press ESC to exit
if k == 27:
cv2.destroyAllWindows()
# press 's' to save and exit
elif k == ord('s'):
cv2.imwrite("empire.png", img)
cv2.destroyAllWindows()
说明:其中,
0表示以灰度的形式读取图像。我们可以指定imread()的加载模式,默认是以RGB模式处理图片。加载模式包括CV_LOAD_IMAGE_COLOR (三通道),CV_LOAD_IMAGE_GRAYSCALE (单通道),CV_LOAD_IMAGE_UNCHANGED(保持不变)。
3.获取图片属性
import cv2
img = cv2.imread("empire.jpg")
print img.shape
# (800L, 569L, 3L)
print img.size
# 1365600
print img.dtype
# uint8
4.缩放图像
import cv2
import matplotlib.pyplot as plt
img = cv2.imread("empire.jpg")
height, width = img.shape[:2]
res = cv2.resize(img, (2*width, 2*height), interpolation=cv2.INTER_CUBIC)
plt.imshow(res)
说明:
在resize()中,缩放有几种不同的插值(interpolation)方法,在缩小时推荐cv2.INTER_ARER,扩大时推荐cv2.INTER_CUBIC和cv2.INTER_LINEAR。默认都是cv2.INTER_LINEAR。
5.图像平移
import cv2
import numpy as np
img = cv2.imread("empire.jpg", 0)
rows,cols = 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.destroyAllWindows()
说明:
int cvWaitKey(int delay=0),返回值为int型,函数的参数为int型,当delay小于等于0的时候,如果没有键盘触发,则一直等待,此时的返回值为-1,否则返回值为键盘按下的码字;当delay大于0时,如果没有键盘的的触发,则等待delay的时间,此时的返回值是-1,否则返回值为键盘按下的码字。
6.图像旋转
import cv2
import matplotlib.pyplot as plt
img = cv2.imread('empire.jpg')
rows,cols = img.shape[:2]
#第一个参数:旋转中心,第二个参数:旋转角度,第三个参数:缩放比例
M = cv2.getRotationMatrix2D((cols/2,rows/2), 45, 1)
#第三个参数:变换后的图像大小
res = cv2.warpAffine(img, M, (rows,cols))
plt.imshow(res)
说明:
cv2.warpAffine(src, M, dsize)表示仿射变换,关键字参数src,M,dsize,分别表示源图像,变换矩阵,变换后图像的长宽。
7.通道的拆分/合并处理
import cv2
import matplotlib.pyplot as plt
img = cv2.imread('empire.jpg')
b, g, r = cv2.split(img)
img = cv2.merge((b, g, r))
plt.imshow(img)
8.图像边缘检测和轮廓检测
(1)图像边缘检测
在边缘部分,像素值会出现“跳跃”或者较大的变化。如果在边缘部分求取一阶导数,就会看到极值的出现。而在一阶导数为极值的地方,二阶导数为0,基于这个原理,就可以进行边缘检测。常用的图像边缘检测算法有Laplace,cv.MorphologyEx,Canny等。
(2)图像轮廓检测
轮廓检测主要是从一个种子点,用搜索的方法找到闭合的轮廓。常用的图像轮廓检测算法有Sobel,FindContours等。
9.图像分割
图像分割指的是将数字图像细分为多个图像子区域的过程,在OpenCV中实现了三种跟图像分割相关的算法,它们分别是:分水岭分割算法、金字塔分割算法以及均值漂移分割算法。
10.图像特征提取与匹配
图像特征提取指的是使用计算机提取图像信息,决定每个图像的点是否属于一个图像特征。OpenCV中实现了多种角点特征的提取方法,包括Harris角点、Shi-Tomasi角点、亚像素级角点、SURF角点、Star关键点、FAST关键点、Lepetit关键点、MSER区域、SIFT角点检测等等。
11.图像分类
根据各自在图像信息中所反映的不同特征,把不同类别的目标区分开来。常见的图像分类算法有KNN,贝叶斯分类器,SVM(包括多类SVM),CNN等。
12.图像聚类
图像聚类可以用于识别、划分图像数据集,组织与导航。常见的图像聚类算法有K-means,层次聚类,谱聚类等。
13.图像检索
在检索原理上,无论是基于文本的图像检索还是基于内容的图像检索,主要包括三方面:一方面对用户需求的分析和转化,形成可以检索索引的数据库;另一方面,收集和加工图像资源,提取特征,分析并进行标引,建立图像的索引数据库;最后一方面是根据相似度算法,计算用户提问与索引数据库中记录的相似度大小,提取出满足阈值的记录作为结果,按照相似度降序的方式输出。
14.图像复原与重建
解析:
(1)图像退化:图像在形成、记录、处理和传输过程中,由于成像系统、记录设备、传输介质和处理方法的不完善,导致图像质量的下降,这种现象叫做图像退化。
(2)图像复原:对退化的图像进行处理,尽可能恢复出原始图像的真实面貌。由退化后的图像估计出退化函数和噪声函数,然后可以得到恢复算子。恢复计算可以在空间域上进行恢复,也可以在频率域上进行恢复。
(3)图像重建:图像重建是指根据对物体的探测获取的数据来重新建立图像。
15.图像压缩
解析:图像压缩(图像编码)是指以较少的比特有损或无损地表示原来的像素矩阵的技术。
16.图像增强
解析:图像增强可分成两大类:频率域法和空间域法。前者把图像看成一种二维信号,对其进行基于二维傅里叶变换的信号增强。采用低通滤波(即只让低频信号通过)法,可去掉图中的噪声;采用高通滤波法,则可增强边缘等高频信号,使模糊的图片变得清晰。后者空间域法中具有代表性的算法有局部求平均值法和中值滤波(取局部邻域中的中间像素值)法等,它们可用于去除或减弱噪声。
17.图像融合
解析:图像融合是指协同利用同一场景的多种传感器图像信息,输出一幅更适合于人类视觉感知或计算机进一步处理与分析的融合图像。它可明显的改善单一传感器的不足,提高结果图像的清晰度及信息包含量,有利于更为准确、更为可靠、更为全面地获取目标或场景的信息。图像融合过程可以在不同的层次上进行,比如信号级、像素级(最多)、特征级,决策级。
18.超分辨率重建
解析:超分辨率是通过硬件或软件的方法提高原有图像的分辨率,超分辨率重建是通过系列低分辨率图像来得到一幅高分辨率图像的过程。超分辨率重建过程,如下所示:
(1)预处理,比如去噪,剪切。
(2)配准,估计低分辨率序列之间的运动矢量。
(3)重建,融合多帧低分辨率图像的信息。
参考文献: