opencv
程序说明
图片转灰度图
这个操作可以在一开始读取照片时就完成,也可以自己根据每个像素点,把每个像素点的r,b,g三个参数调成一样的,也就能形成灰度图
1 | def imread(filename: str, flags: int = ...) |
这里的flags能选择读入图片的形式:0是灰度图,1是彩色图
1 | for i in range(img.shape[0]): |
这个就是把每个像素点上的r,g,b改为相同的数值
在图片读入后,每个图片的shape数据可能含有不同的参数数量:
比如在彩色图中就是(height,width,3)表示高度和宽度和3个色彩通道
HSV图
1 | cvtColor(src: Mat, code: int, dts: Mat = ..., dstCn: int = ...) |
在这个函数中,src是传入的图片,数据类型为int,dst是输出的图片,dstCn就是输出图片的数据类型
噪声
高斯噪声
1 | def gaussian_noise(img): |
1 | def gaussian_noise(img): |
其实高斯噪声就是图片上的每个像素点都不同程度的发白,也就是每个像素点上的r,b,g都会不同程度的增大,增大的程度满足于正态分布
椒盐噪声
1 | def sp_noise(img, prog): |
椒盐噪声就是图片上一些随机的点随机的变为黑色或者白色,这样也使得照片看起来就像被撒上了一把椒盐
函数中的prog就是生成椒盐噪声的点的比率
去噪
高斯去噪
1 | GaussianBlur(src: Mat, # 要处理的图片 |
去噪原理就是在卷积核矩阵内运用权重
中值去噪
1 | medianBlur(src: Mat, ksize, d: Mat = ...) # kesize是中值检测的范围大小 |
中值去噪就是在某一像素点一定范围内对所有的像素点的rgb值排序,然后取中值
均值去噪
1 | blur(src: Mat, ksize, dts: Mat = ) # kesize是检测的范围大小 |
均值去噪就是在某一像素点一定范围内对像素点取平均值,然后赋值给该像素点的rbg值
图像的轮廓提取
膨胀
1 | erode(imggray,(3,3).dst:Mat =) |
函数中第一个参数是输入的图片,最后一个参数表示输出的图片,中间的(3,3)表示每个像素点膨胀的大小
腐蚀
1 | dilate(src: Mat, kernel, dts: Mat) |
函数的第一个参数为输入的图片,第二个参数kernel是腐蚀的大小,最后一个参数是输出的图片
轮廓提取
1 | morphologyEx(img, cv2.MORPH_GRADIENT, (3,3)) |
这是第一种方法,第一个参数是传入的图片,第二个参数是选择模式,选择gradient就是梯度运算,也就是轮廓提取,如果选择0的话就是腐蚀,选择1就是膨胀,其他的就是原图
1 | imggray_2=cv2.Laplacian(imggray,cv2.CV_64F) |
这是第二种方法,也是梯度运算来提取图像轮廓的
图像检测
圆形检测
1 | circles = c.HoughCircles(img, # 输入图像 |
圆形检测就是检测图像中的圆形,并且返回值为一个数列的数列,每个数列里包含着三个参数,前两个参数是圆形的坐标,第三个参数是圆形的半径大小
直线检测
1 | lines = c.HoughLinesP(img, |
直线检测就是检测直线的函数,返回值是一个数列的数列,每个数列里含有四个参数,前两个是直线的起点坐标,后两个是直线的终点坐标
特征点检测
harries角点检测
1 | dst = cv2.cornerHarris(gray, # 传入图像 |
角点检测就是把图像中的角点给标注出来
sift特征点提取
1 | sift = cv2.SIFT_create() # 创造sift算子 |
sift特征点提取需要先定义一个sift算子,然后只能对灰度图处理,从灰度图里提取特征点的数据,最后画在原图上就可以
orb特征点提取
1 | orb = cv2.ORB_create() # 定义一个orb算子 |
orb特征点提取跟sift相似,也是需要先创建一个算子,然后再从灰度图里提取数据,最后画在原图上
BFMATCH特征点匹配
1 | sift = cv2.SIFT_create() |
特征点匹配就是把两张图片上的特征点分别提取出来,然后再找相似的特征点,随后筛选出比较好的,匹配度高的特征点,最后在画在图上
学习记录
图像
在每张图片上,每个像素点的数据中都包括三个参数rgb,表示这个像素点的颜色
转灰度图
这个操作可以在一开始读取照片时就完成,也可以自己根据每个像素点,把每个像素点的r,b,g三个参数调成一样的,也就能形成灰度图
这个就是把每个像素点上的r,g,b改为相同的数值
在图片读入后,每个图片的shape数据可能含有不同的参数数量:
比如在彩色图中就是(height,width,3)表示高度和宽度和3个色彩通道
HSV图特点
一种颜色空间, 也称六角锥体模型 (Hexcone Model)。 这个模型中颜色的参数分别是:色调(H),饱和度(S),明度(V)。
高斯噪声特点
其实高斯噪声就是图片上的每个像素点都不同程度的发白,也就是每个像素点上的r,b,g都会不同程度的增大,增大的程度满足于正态分布
椒盐噪声特点
椒盐噪声就是图片上一些随机的点随机的变为黑色或者白色,这样也使得照片看起来就像被撒上了一把椒盐
高斯去噪原理
去噪原理就是在卷积核矩阵内运用一定的权重计算来获得rgb的值
中值去噪原理
中值去噪就是在某一像素点一定范围内对所有的像素点的rgb值排序,然后取中值
均值去噪原理
均值去噪就是在某一像素点一定范围内对像素点取平均值,然后赋值给该像素点的rbg值
圆形检测原理
就是通过分析灰度图像来检测图像中的圆形
圆形检测就是检测图像中的圆形,并且返回值为一个数列的数列,每个数列里包含着三个参数,前两个参数是圆形的坐标,第三个参数是圆形的半径大小
直线检测原理
直线检测也是分析灰度图
直线检测就是检测直线的函数,返回值是一个数列的数列,每个数列里含有四个参数,前两个是直线的起点坐标,后两个是直线的终点坐标
harries 角点检测
检测的是角点,再检测图像中,如果选取的是周围颜色一致的点,那么在这个点周围是没有特点的,而在直线上,沿着直线行进时也是看不出来的,只有在角点上,只要图框移动,都能很清楚看出来,所以要检测角点。
sift 特征点提取
是一种检测局部特征算法,该算法通过求一幅图中的特征点及其有关scale和orientation的描述子来得到特征
SIFT所查找到的关键点是一些十分突出,不会因光照,仿射变换和噪音等因素而变化的点,如角点、边缘点、暗区的亮点及亮区的暗点等
orb 特征点检测
ORB算法分为两部分,分别是特征点提取和特征点描述
特征点匹配
一个图像的特征点由两部分构成:关键点(Keypoint)和描述子(Descriptor)
关键点指的是该特征点在图像中的位置,有些还具有方向、尺度信息
描述子通常是一个向量,按照人为的设计的方式,描述关键点周围像素的信息,通常描述子是按照外观相似的特征应该有相似的描述子设计的
首先提取图像中的关键点,这部分是查找图像中具有某些特征(不同的算法有不同的)的像素,然后根据得到的关键点位置,计算特征点的描述子,最后根据特征点的描述子,进行匹配