深度学习基础-opencv(二)python实现

canny边缘提取算法

边缘:一个物体的边缘,可以是不封闭曲线。
轮廓:一个物体的轮廓,封闭曲线,一般属于边缘的子集,单像素构成线。但有时候对碰撞操作时,会有差别。且轮廓可以是几个特征点,不需要是一个一个像素组合而成的线
梯度:表示像素差异,不一定是一个像素
canny医学例子:
原图如下:
在这里插入图片描述
图像人脸的轮廓有一部分很浅,要提取出脸部轮廓,和原图一起作为先验,就要将轮廓更好的提取。所以采用对比度调整,然后在进行高斯滤波,然后进行canny提取,代码和效果如图:(其中增加了对比度的图片还可以进行闭操作,补洞之后在进行轮廓提取)

import cv2
img = cv2.imread("25.jpg", 0)
cv2.imshow('Canny2', img)
img = cv2.convertScaleAbs(img, alpha=6, beta=0)#进行对比度调整,获取到表示不明显地方的数据
cv2.imshow('Abs', img)
img = cv2.GaussianBlur(img, (5, 5), 1)
cv2.imshow("1",img)
canny = cv2.Canny(img, 100, 150)
cv2.imshow("2",canny)
canny = cv2.resize(canny, dsize=(500, 500))
cv2.imshow('Canny', canny)
cv2.waitKey(0)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

canny算法详解

步骤:
在这里插入图片描述
图像转灰度图(不需要在彩色图上进行),高斯滤波(锦上添花),计算图像梯度和幅值,即初步获取到图像轮廓,这时候的轮廓边不一定是单像素,非极大值抑制(变成单像素),双阈值链接处理,二值化图像输出。

梯度的幅值和角度:
幅值:幅值表示在该位置的边缘的亮度(即有值得地方,像素差距很大,就会表现出亮的特性)
角度:角度表示像素的颜色向哪一个方向变化的最快

非极大值抑制:
在这里插入图片描述
当前像素的梯度强度和沿着正负梯度的另外两个值进行比较,大于则保存,小于则替换

双阈值边缘链接处理:
在这里插入图片描述
找出来的有一些线可能会断,或者找出来的线是否需要,用该阈值操作来进行操作。
它的原理就是设置了两个阈值,找出来的线高于最大阈值,则保留,低于阈值则直接排除。
这两个值的设置是canny的两个参数,这两个参数是经验参数,如果调的好,取出来的轮廓线会很连贯。

轮廓查找和绘制

import cv2

img = cv2.imread('14.jpg')
# cv2.imshow("src", img)
imggray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值