#冲刺创作新星#基于Python的Opencv边缘检测 原创

念980
发布于 2022-9-26 19:23
浏览
0收藏

图像梯度直观反应是图像当中各物体的轮廓,而在像素点上的体现其实就是相邻像素点之间的差值,差值越大,轮廓就会越清晰(可用于图像增强),边缘检测实际上就是对图像进行系统的梯度计算,包含了图像的噪声处理,非极大值抑制,双阈值检测等一系列图像处理方式,通过这些方式处理图像后得到图像的轮廓。这些方式在之前的博客都已经提到过了,而Opencv提供了一个非常方便的函数进行边缘检测,它将高斯滤波,梯度大小及方向计算,非极大值抑制,双阈值检测等几个边缘检测常用函数全部集成为一个函数,使用者只需要给出两个阈值的大小即可。

#冲刺创作新星#基于Python的Opencv边缘检测-鸿蒙开发者社区

相关函数

cv2.Canny(XT_gray,minVal,maxVal):XT_gray为要进行处理的图像,而minVal是最小阈值,maxVal则是最大阈值。这两个参数可以自己设定,范围是0~255,而最小阈值表示如果检测到的梯度像素点小于最小阈值,那么它将会被舍去(即赋值为0),而介于最小阈值和最大阈值之间的梯度像素点,如果该像素点与边界相连,则将其保留为边界,否则同样舍去,而如果梯度像素点大于最大阈值,则直接将其认定为边界像素点,这样我们就舍去了图像模糊的部分,得到了图像明显的边界。

注意:在实际操作中,如果想要保留图像更多细节,则可以适当降低最小阈值,而反过来,如果想要简化图像,只想得到图像大体轮廓,则应该增大最小阈值。

#冲刺创作新星#基于Python的Opencv边缘检测-鸿蒙开发者社区

代码示例

import cv2#导入相关包
import numpy as np
import matplotlib.pyplot as plt
XT_gray = cv2.imread("XT.jpeg",cv2.IMREAD_GRAYSCALE)#读入图像并将格式转化为灰度图
def cv2_imshow(name,img):#定义展示图像的函数
    cv2.imshow(name,img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
cv2_imshow("XT",XT_gray)#展示读入为灰度图的图像
X = cv2.Canny(XT_gray,30,100)#最小阈值比较小的情况
Y = cv2.Canny(XT_gray,150,200)#最小阈值比较大的情况
All = np.hstack((X,Y))#拼接两张图像以进行对比
cv2_imshow("All",All)#展示图像


运行结果 

原图

#冲刺创作新星#基于Python的Opencv边缘检测-鸿蒙开发者社区

灰度图 

#冲刺创作新星#基于Python的Opencv边缘检测-鸿蒙开发者社区

不同阈值的对比图,可以看到,左边最小阈值较小的图像细节会比较明显,但是看起来轮廓就不太清晰了 

#冲刺创作新星#基于Python的Opencv边缘检测-鸿蒙开发者社区



©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
已于2022-10-1 12:16:40修改
收藏
回复
举报
回复
    相关推荐