**

工作中常用的OpenCV相关函数总结

**
声明:该文章的内容来自于网络的归纳总结,不断更新中,欢迎收藏,点赞评论,以及提供更多工作常用的函数。
1.cv2.imread()接口读图像,读进来直接是BGR 格式数据格式在 0~255
2.需要特别注意的是图片读出来的格式是BGR,不是我们最常见的RGB格式,颜色肯定有区别。
3.cv2.cvtColor(p1,p2) 是颜色空间转换函数,p1是需要转换的图片,p2是转换成何种格式。
4.cv2.COLOR_BGR2RGB 将BGR格式转换成RGB格式
5.cv2.COLOR_BGR2GRAY 将BGR格式转换成灰度图片
6.cv2.warpAffine(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]]) → dst
7.其中:src - 输入图像。M - 变换矩阵。dsize - 输出图像的大小。flags - 插值方法的组合(int 类型!)borderMode - 边界像素模式(int 类型!)borderValue - (重点!)边界填充值; 默认情况下,它为0。上述参数中:M作为仿射变换矩阵,一般反映平移或旋转的关系,为InputArray类型的2×3的变换矩阵。flages表示插值方式,默认为 flags= cv2.INTER_LINEAR,表示线性插值,此外还有:cv2.INTER_NEAREST(最近邻插值) cv2.INTER_AREA (区域插值) cv2.INTER_CUBIC(三次样条插值cv2.INTER_LANCZOS4(Lanczos插值)
8.vc = cv2.VideoCapture(0)
VideoCapture()中参数是0,表示打开笔记本的内置摄像头,参数是视频文件路径则打开视频,如vc = cv2.VideoCapture("…/testi.mp4")
9.vc.read()按帧读取视频,ret,frame是获cap.read()方法的两个返回值。其中ret是布尔值,如果读取帧是正确的则返回True,如果文件读取到结尾,它的返回值就为False。frame就是每一帧的图像,是个三维矩阵。
10.cv2.waitKey(1),waitKey()方法本身表示等待键盘输入,
参数是1,表示延时1ms切换到下一帧图像,对于视频而言;
参数为0,如cv2.waitKey(0)只显示当前帧图像,相当于视频暂停,;
参数过大如cv2.waitKey(1000),会因为延时过久而卡顿感觉到卡顿。
c得到的是键盘输入的ASCII码,esc键对应的ASCII码是27,即当按esc键是if条件句成立
11.调用release()释放摄像头,调用destroyAllWindows()关闭所有图像窗口。
12.稠密光流calcOpticalFlowFarneback详解 cv2.calcOpticalFlowFarneback
使用Gunnar Farneback算法计算密集光流。
相关参数:
prev 输入前一帧图像(8位单通道);
next 输入后一帧图像(与prev大小和类型相同);
flow 计算的流量图像具有与prev相同的大小并为CV_32FC2类型;
pyr_scale 指定图像比例(\ <1)为每个图像构建金字塔; pyr_scale = 0.5意味着一个古典金字塔,其中每个下一层比前一层小两倍。
levels 金字塔层数包括初始图像; levels = 1意味着不会创建额外的图层,只会使用原始图像。
winsize 平均窗口大小;较大的值会增加算法对图像噪声的鲁棒性,并可以检测更快速的运动,但会产生更模糊的运动场。
iterations 每个金字塔等级上执行迭代算法的迭代次数。用于在每个像素中查找多项式展开的像素邻域;
poly_n大小;较大的值意味着图像将近似于更光滑的表面,产生更稳健的算法和更模糊的运动场,一般取poly_n = 5或7。
poly_sigma用于平滑导数的高斯的标准偏差,用作多项式展开的基础;对于poly_n = 5,可以设置poly_sigma = 1.1,对于poly_n = 7,可以设置poly_sigma = 1.5;
flags 操作标志,可取计算方法有:
OPTFLOW_USE_INITIAL_FLOW 使用输入流作为初始流近似。
OPTFLOW_FARNEBACK_GAUSSIAN 使用Gaussian winsize×winsizewinsize×winsize过滤器代替光流估计的相同大小的盒子过滤器;通常情况下,这个选项可以比使用箱式过滤器提供更精确的流量,代价是速度更低;通常,应将高斯窗口的胜利设置为更大的值以实现相同的稳健性水平。
13. Cv.normalize()
normalize(InputArray src,OutputArraydst, double alpha = 1, double beta = 0, intnorm_type = NORM_L2, int dtype = -1, InputArray mask = noArray() )
src输入数组dst输出数组,支持原地运算alpha range normalization模式的最小值beta
range normalization模式的最大值,不用于norm normalization(范数归一化)模式。normType
归一化的类型,可以有以下的取值:NORM_MINMAX:数组的数值被平移或缩放到一个指定的范围,线性归一化,一般较常用。NORM_INF:此类型的定义没有查到,根据OpenCV 1的对应项,可能是归一化数组的C-范数(绝对值的最大值) NORM_L1 : 归一化数组的L1-范数(绝对值的和)NORM_L2: 归一化数组的(欧几里德)L2-范数dtypedtype为负数时,输出数组的type与输入数组的type相同;否则,输出数组与输入数组只是通道数相同,而tpye=CV_MAT_DEPTH(dtype).mask 操作掩膜,用于指示函数是否仅仅对指定的元素进行操作。
14.cv2.dnn.blobFromImage(image[, scalefactor[, size[, mean[, swapRB[, crop[, ddepth]]]]]])
作用:
对图像进行预处理,包括减均值,比例缩放,裁剪,交换通道等,返回一个4通道的blob(blob可以简单理解为一个N维的数组,用于神经网络的输入)
15.cv2.rectangle,是靠 确定对角线 来画矩形的。
cv2.rectangle(img, (bbox.left, bbox.top), (bbox.right, bbox.bottom), (0,0,255), 2)
import cv2
cv2.rectangle(img, (x1, y1), (x2, y2), (255,0,0), 2)
x1,y1 ------
|                |
|                |
|                |
--------x2,y2