Advertisement

计算机视觉openCV边缘检测

阅读量:

边缘检测

边缘检测 (一般直接转换为灰度图就可以了)

1)canny边缘检测算法
在这里插入图片描述
1、高斯滤波器

高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。
在这里插入图片描述
2、像素点的梯度强度和方向
在这里插入图片描述
在这里插入图片描述

3、非极大值抑制法

一个图截取好多个框框,选取识别率最高的
在这里插入图片描述
在这里插入图片描述
如果要计算直线跟矩形的两个交点,可以计算他们的距离比例
在这里插入图片描述

4、双阈值检测

大于max的时候例如(A)就把他当作边界
小于min的时候例如(D)就把他舍弃
在中间的时候并且什么都不相连例如(B)舍弃
只有在中间并且有线段有在边界上的例如(C)保留
在这里插入图片描述
算法实现

import cv2
img=cv2.imread(‘car.png’,cv2.IMREAD_GRAYSCALE)
v1=cv2.Canny(img,80,120)
cv2.imshow(‘img’,v1)
cv2.waitKey(0)
cv2.destroyAllWindows()

图像金字塔
在这里插入图片描述
向下采样法
在这里插入图片描述
向上采样法
在这里插入图片描述
代码
上采样可以放大图片,下采样可以缩小图片。实现代码如下:

up=cv2.pyrUp(img) #pyr表示金字塔,up表示放大
down=cv2.pyrDown(img) #down表示缩小

图像轮廓
需要注意的是cv2.findContours()函数接受的参数为二值图,即黑白的(不是灰度图),所以读取的图像要先转成灰度的,再转成二值图。需要注意的是,cv2.findCountours()返回两个参数,cv3则返回三个参数。
在这里插入图片描述

为了更高的准确率,图像需要先转成灰度然后二值化

img=cv2.imread(‘car.png’)
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) # 转换为灰度图
ret,thresh=cv2.threshold(gray,127,255,cv2.THRESH_BINARY) #图像二值化
def cv_show(img,name):
cv2.imshow(name,img)
cv2.waitKey()
cv2.destroyAllWindows()

cv_show(thresh,‘up’)

绘制轮廓
代码
contours,hierarchy=cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE) #contours为图像轮廓信息,hierarcgy为图像层数
draw_img=img.copy()
res=cv2.drawContours(img,contours,-1,(0,0,255),2) #-1一般基本不变,指全部轮廓,括号即为(BGR)三个通道的值
cv_show(res,‘res’)

轮廓近似
在这里插入图片描述
本文借鉴
https://mp.weixin.qq.com/s?__biz=MzI1ODEzMDQ3OQ==&mid=2247483820&idx=1&sn=5a4637c8fe50be004794ed34dd4e522d&scene=19&token=1038729941&lang=zh_CN#wechat_redirect

全部评论 (0)

还没有任何评论哟~