提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一、Canny边缘检测
1、检测步骤
-
1)使用高斯滤波器,以平滑图像,滤掉噪声。
-
2)计算图像中每个像素点的梯度强度和方向
-
3)应用非极大值(Non-Maximum Suppression)抑制,以消除边缘检测带来的杂散响应
-
4)应用双阈值(Double-Threshold)检测来确定真实的和潜在的边缘。
-
5)通过抑制孤立的弱边缘最终完成边缘检测
-
cv2.Canny(img,minval,maxval)
- minval:低阈值。如果检测到的像素点的梯度比低阈值还小那就舍弃掉
- maxval:高阈值。如果检测到的像素点的梯度比高阈值还大则是边缘点保留下来
- 在两者之间的像素点,如果其梯度有比maxval大的则是潜在的边缘保留下来,其余舍弃掉
2、代码展示
import cv2
import show_img as si
import numpy as np
import matplotlib.pyplot as plt
# 读取图片并灰度化处理
lena = cv2.imread('../data/lena.jpeg',cv2.IMREAD_GRAYSCALE)
# canny边缘检测
v1 = cv2.Canny(lena,80,150)
v2 = cv2.Canny(lena,50,100)
# 对比效果
res = np.hstack((v1,v2))
si.show_img('res',res)
3、效果对比图及说明
- 先看原图
-
效果对比
-
我们我们看到左边这张是低阈值设置的80,高阈值设置的150,经过检测后所呈现出来的边缘信息比右边设置的低阈值50,高阈值100呈现出来的信息要少,是因为低阈值设置的高了,有的潜在边缘在低阈值以下就给舍弃掉了,而且有的边缘信息达不到你设置的高阈值也就被舍弃掉了。这就是左边内容不太丰富的原因。故我们在进行边缘检测时双阈值设置的要差不多合理(可以反复进行尝试)。
二、图像轮廓检测
1、cv2.findContours(img,mode,method)
- cv2.findContours(img,mode,method)
- mode:轮廓检索模式
- RETR_EXTERNAL:只检索最外面的轮廓;
- RETR_LIST:检索所有的轮廓,并将其保存到一条链表当中;
- RETR_CCOMP:检索所有的轮廓,并将他们组织为两层:顶层是各部分最外面的边界,第二层是空洞的边界;
- RETR_TREE:检索所有的轮廓,并重构嵌套轮廓的整个层次;
- method:轮廓逼近方法
- CHAIN_APPROX_NONE:以Freeman链码的方式输出轮廓,所有其他方法输出多边形(顶点的序列)
- CHAIN_APPROX_SIMPLE:压缩水平的、垂直的和斜的部分,也就是,函数只保留他们的终点部分
- mode:轮廓检索模式
- 之后我们用的时候主要用 RETR_TREE模式就可以了。
import cv2
import show_img as si
import numpy as np
# 读取图片
lena = cv2.imread('../data/lena.jpeg',cv2.IMREAD_GRAYSCALE)
# 进行阈值处理
ret,thresh = cv2.threshold(lena,127,255,cv2.THRESH_BINARY)
# si.show_img('thresh',thresh)
#轮廓检测
contours,hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)
# 绘制轮廓
# 传入绘制图像,轮廓,轮廓索引,颜色模式,线条厚度
# 注意需要copy,要不原图会变
draw_img = lena.copy()
res = cv2.drawContours(draw_img,contours,-1,(0,0,255),2)
# si.show_img('res',res)
#draw_img1 = lena.copy()
#res = cv2.drawContours(draw_img1,contours,0,(0,0,255),2)
# si.show_img('res',res)
2、效果展示
我们可以看到大致轮廓已经画出来了。文章来源:https://www.toymoban.com/news/detail-766844.html
文章来源地址https://www.toymoban.com/news/detail-766844.html
到了这里,关于opencv(七)Canny边缘检测和图像轮廓检测的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!