Title
2020

函数积累

1.高斯模糊:去噪音点

img = cv2.GaussianBlur(img, kernel_size, sigma)

 

2.边缘检测:

edge = cv2.Canny(image, threshold1, threshold2[, edges[, apertureSize[, L2gradient ]]])

#threshhold1,threshhold2偏小的话,检测出来的边缘越详细,越大检测出来的边缘越少

 

3.填充多边形:

cv2.fillConvexPoly(img,area,color): 填充凸多边形,只需要提供凸多边形的顶点即可

cv2.fillPoly(img,area,color): 填充任意形状的图形,可以用来绘制多边形,也可以一次填充多个图形

 

4.霍夫变换直线检测

原理:霍夫变换主要是从图像中分离出具有相同特征的几何形状(直线,圆等),最基本的就是从黑白图像中检测出直线

(1)直线的表示方式

  在霍夫变换中,用(r,theta)来表示一条直线,其中r为该直线到原点的距离,theta为该直线的垂线与x轴的夹角

 

 

 (2)如何判断多个点在一条直线上

  由于过一个点的直线有无数条,假设这个点为i,则通过这个点的直线用(ri,thetai)表示;再设另外一个点j,通过它的直线为(rj,thetaj)。

  因两点决定一条直线,故当i,j在一条直线上时,必定有ri=rj,thetai=thetaj

  对于三个点来说,假设第三个点是k,则通过k的直线是(rk,thetak),当这三点在这一条直线上时,必定有ri=rj=rk=r,thetai=thetaj=thetak=theta

  (3)如何检测出直线

  设经过一个点的直线有n条,则我们可以找到n个(r,theta),对这Nn个(r,theta),利用统计学,统计到theta=thetai时,多个点的r近似等于ri时,则这多个点在一条直线(r,theta)上

  (4)举例说明

  如何检测空间上这三个点是否在一条直线上

 

 

这个例子中,对于每个点均求过该点的6条直线的(r,theta)坐标,共求了3*6个(r,theta)坐标。可以发现在theta=60时,三个点的r都近似为80.7,由此可判定这三个点都在直线(80.7,60)上。 

参考:https://blog.csdn.net/weixin_40196271/article/details/83346442

cv2.HoughLinesP(image,rho,theta,threshhold[,lines[,minLineLength[,maxLineGap]]])

image:是canny边缘检测后的图像,单通道8位二进制图像。

rho:r,以像素值为单位的分辨率

theta:theta,以弧度为单位的分辨率

threshold:检测一条直线所需最少的曲线交点
lines:检测到的直线参数对,也就是线段两个端点的坐标

minLineLength:能组成一条直线的最少点的数量,点数量不足的直线被抛弃

maxLineGap:能被认为在一条直线上的两点的最大距离

 

5.operrator.itemgetter():获取某一对象特定维度的数据

input:

  a=[1,2,3,4]

  b = operator.itemgetter(1)    #获取下标为1的元素

  b(a)

output:

  2

input:

  b = operator.itemgetter(1,0)

       b(a)

output:

  (2,1)

>>> a=[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
>>> sorted(a, key=operator.itemgetter(1,2)) #先按照元组中下标为1的值对对象排序,当下标为1的值相同时,再按照下标2来排序
[('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]
>>> sorted(a, key=operator.itemgetter(1,2), reverse=True) #从大到小
[('jane', 'B', 12), ('dave', 'B', 10), ('john', 'A', 15)]
>>> sorted(a, key=operator.itemgetter(2), reverse=True) #仅仅   按照元组中下标为2的值对对象排序,从大到小。
[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]

 6.cv2.getStructuringElement(shape,ksize,anchor=None):返回指定形状和尺寸的卷积核

shape的选择有三个:

MORPH_RECT:矩形

MORPH_CROSS:交叉形

MORPH_ELLIPSE:椭圆形

ksize: 内核尺寸

 

7.cv2.VideoWriter(filename,fourcc,fps,frameSize[,isColor])   保存视频

filename:文件要保存的路径

fourcc:指定编码器

fps:要保存的视频的帧率

frameSize:要保存的视频的画面大小

isColor:保存的视频是彩色还是黑白

#视频常见编码格式有:x264,h264,mpeg-4

8.blob = cv2.dnn.blobFromImage(image, scalefactor=1.0, size, mean, swapRB=True,crop=False,ddepth = CV_32F ) 返回的是输入的图像从缩放,减均值,通道交换的结果

 image:传入的图像

scalefactor:执行减均值后需要缩放图像,缩放比例默认是1,scalefactor = 1 / \sigma,这是真正乘上的值

size:神经网络,真正支持的值

mean:减去的均值,可以是R,G,B三元组,或者是一个值,每个通道都减去这个值。如果输入的图像的通道顺序是B,G,R,确保swapRB=Ture。

swapRB:OpenCV认为图像 通道顺序是B、G、R,而减均值时顺序是R、G、B,为了解决这个矛盾,设置swapRB=True即可。

crop: 当crop=True时,先等比例缩放,直至宽高尺寸一个等于对应的size尺寸,另一个大于或者等于对应的size尺寸,然后再从中心进行裁剪。如果crop=False,则直接调整大小而不进行裁剪并保留纵横比。

ddepth:输出的blob的深度,CV_32F,或者CV_8U,如果进行减均值操作,不能选CV_8U

  

9.math.inf

math.inf常量是在math模块中定义的预定义常量,它返回浮点正无穷大(等效于float('inf')) 

-math.inf可用于找到浮点负无穷大(等效于float('-inf'))  

 

posted @ 2021-08-10 17:50  俗了清风  阅读(82)  评论(0)    收藏  举报
Title