赞
踩
opencv-python官方文档:Introduction to OpenCV-Python Tutorials — OpenCV 3.0.0-dev documentation
opencv-python客制中文文档:http://www.woshicver.com/
注意,在python中,opencv库的名字叫opencv-python,导入的时候是import cv2即库名叫cv2
最常见的读取图片,注意这里的读取是读取图片信息,不是所谓的展示图片,读取的结果会以numpy.array形式保存
用法:
- imread(img_path,flag) 读取图片,返回图片对象
- img_path: 图片的路径,即使路径错误也不会报错,但打印返回的图片对象为None
- flag:cv2.IMREAD_COLOR,读取彩色图片,图片透明性会被忽略。是默认参数,可以传入数字1代替。
- cv2.IMREAD_GRAYSCALE,按灰度模式读取图像,也可以传入0
- cv2.IMREAD_UNCHANGED,读取图像,包括其alpha通道,也可以传入-1
-
- 例:
- import cv2
- img = cv2.imread('1.jpg')
- img = cv2.imread('1.jpg',cv2.IMREAD_GRAYSCALE)
- #img = cv2.imread('1.jpg',0)
最常见的显示图片,当然这里显示图片是通过读取numpy.ndarray形式的数据来显示一张图的。
用法:
- cv2.imshow()
- imshow(window_name,img):显示图片,窗口自适应图片大小
- window_name: 指定窗口的名字
- img:显示的图片对象 #注意这里的img对象不能是一个文件 必须是np.ndarray类型的数据
- 可以指定多个窗口名称,显示多个图片
- 例:
- testdata = cv2.imread('img.jpg')
- cv2.imshow('window_name',testdata)
- cv2.waitKey(0) #等待输入任何按键,
- #当用户输入任何一个按键后即调用destroyAllWindows()关闭所有图像窗口
- cv2.destroyAllWindows() # 摧毁窗口
注意,imshow会自动创建一个窗口,如果已经有同名窗口,那么就在同名窗口上显示。
注意这里K大写
waitKey()的基本逻辑,他会在一定时间内等待接收键盘上的一个值(一般都是在展示imshow后面使用)
cv2.waitKey(delay)返回值:
这是一个显示(创建)窗口的函数
用法:
- cv2.namedWindow(‘窗口标题’, 默认参数)
- '''
- 默认参数有
- cv2.WINDOW_NORMAL # 用户可以改变这个窗口大小
- cv2.WINDOW_AUTOSIZE # 窗口大小自动适应图片大小,并且不可手动更改。
- cv2.WINDOW_FREERATIO # 自适应比例
- cv2.WINDOW_KEEPRATIO # 保持比例
- cv2.WINDOW_OPENGL # 窗口创建的时候会支持OpenGL
ORB是一种特征检测算法,具体原理等可参考:
https://www.csdn.net/tags/MtTaIg4sNTY2ODE2LWJsb2cO0O0O.html
用法:
- cv2.ORB_create(nfeatures = 500,
- scaleFactor = 1.2,
- nlevels = 8,
- edgeThreshold = 31,
- firstLevel = 0,
- WTA_K = 2,
- scoreType = HARRIS_SCORE,
- patchSize = 31,
- fastThreshold = 20)
#参数=XXX 代表某个参数需要设置,默认值为XXX
nfeatures - int
确定要查找的最大要素(关键点)数。
scaleFactor - float
金字塔抽取率,必须大于1。ORB使用图像金字塔来查找要素,因此必须提供金字塔中每个图层与金字塔所具有的级别数之间的比例因子。scaleFactor = 2表示经典金字塔,其中每个下一级别的像素比前一级低4倍。大比例因子将减少发现的功能数量。
nlevels - int
金字塔等级的数量。最小级别的线性大小等于input_image_linear_size / pow(scaleFactor,nlevels)。
edgeThreshold - - int
未检测到要素的边框大小。由于关键点具有特定的像素大小,因此必须从搜索中排除图像的边缘。 edgeThreshold的大小应该等于或大于patchSize参数。
firstLevel - int
此参数允许您确定应将哪个级别视为金字塔中的第一级别。它在当前实现中应为0。通常,具有统一标度的金字塔等级被认为是第一级。
WTA_K - int
用于生成定向的BRIEF描述符的每个元素的随机像素的数量。可能的值为2,3和4,其中2为默认值。例如,值3意味着一次选择三个随机像素来比较它们的亮度。返回最亮像素的索引。由于有3个像素,因此返回的索引将为0,1或2。
scoreType - int
此参数可以设置为HARRIS_SCORE或FAST_SCORE。默认的HARRIS_SCORE表示Harris角算法用于对要素进行排名。该分数仅用于保留最佳功能。 FAST_SCORE生成的关键点稍差,但计算起来要快一些。
patchSize - int
面向简要描述符使用的补丁的大小。当然,在较小的金字塔层上,由特征覆盖的感知图像区域将更大。
前两个参数(nfeatures和scaleFactor)可能是最有可能改变的参数。
一般用于特征检测中,表示detect关键点并且compute描述子。
用例:比如先使用函数cv.ORB_create()或使用 feature2d 通用接口创建一个 ORB 对象,然后调用feature2d类的detectAndCompute()函数。
用法:
- # 启动 ORB 检测器
- orb = cv.ORB_create()
- # 用 ORB 找到关键点并计算描述子
- kp,des = orb.detectAndCompute(img,None)
kp=keypoint,des=descriptor # [描述子(Descriptor)]
BFMatcher表示特征匹配中的暴力匹配法(Brute-Force Match)。
Brute-Force匹配算法很简单,它取第一个集合里一个特征A的描述子并用第二个集合里所有特征和A通过一些距离计算进行匹配。
用法:
-
- #对于BF匹配器,首先我们得用cv2.BFMatcher()创建BF匹配器对象.
- match = cv2.BFMatcher(*args,crossCheck=False)
-
- #它取两个可选参数
- #第一个是normType。它指定要使用的距离量度。默认是cv2.NORM_L2。对于SIFT,SURF很好。(还有cv2.NORM_L1)。对于二进制字符串的描述子,比如ORB,BRIEF,BRISK等,应该用cv2.NORM_HAMMING。
-
- #第二个crossCheck,默认为False。如果设置为True,那么匹配条件就会变严格,表示只有俩个集合里的俩个特征点相互匹配才能返回
opencv-python里的match()函数用于特征匹配,里面需要俩个参数,分别是俩个描述子集合。
用法:
match_result = match(d1,d2)
其中d1,d2分别是俩个描述子。返回的match_result是DMatch对象,每个DMatch对象表示关键点的一个匹配结果, 每个DMatch对下有下面的属性:
DMatch.distance - 描述子之间的距离。越低越好
DMatch.trainIdx - 训练描述子里的描述子索引
DMatch.queryIdx - 查询描述子里的描述子索引
DMatch.imgIdx - 训练图像的索引
获得单应矩阵的函数
用法:
- cv2.findHomography(srcPoints, dstPoints, method=None, ransacReprojThreshold=None, mask=None, maxIters=None, confidence=None)
- #其中src=source,代表源;dst=destination,代表目的。
- #对于第三个参数method: 表示计算单应矩阵的方法
- # 0: 利用所有点的常规方法;
- # RANSAC:基于RANSAC的鲁棒算法;
- # LMEDS:最小中值鲁棒算法;
- # RHO:基于PROSAC的鲁棒算法;
图片透视变换函数
用法:
- cv2.warpPerspective(src, M, dsize, dst=None, flags=None, borderMode=None, borderValue=None)
- # src 代表原图 或者说需要转换的图像
- # M 是单应矩阵
- # dsize是图片尺寸(没有通道数)
- # 这个函数返回一个dst 即输出图像
这是中值滤波的函数。
首先回顾一下,中值滤波是什么:是一种去除噪声的方式,尤其适合去除孤立杂点,比如椒盐噪声。
用法:
- cv2.medianBlur(src, ksize)
-
- #src代表原图,输入图
- #ksize是滤波核的大小,比如设置成3,那就是每次在3*3的区域做中值滤波
- #注意这里的ksize一定是比1大的奇数
注意全部小写.作用是对俩幅图像进行像素级别的异或(XOR)运算。
同理其实也有其他的比如bitwise_and函数
用法:
cv2.bitwise_xor(InputArray src1, InputArray src2,OutputArray dst, InputArray mask=noArray());
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。