opencv 形态学操作

1.滤波算法

opencv中的滤波算法包括:均值滤波、方框滤波、高斯滤波、中值滤波:

复制代码
blur = cv2.blur(img, (3, 3))                      #均值滤波

box = cv2.boxFilter(img,-1,(3,3), normalize=True) #方框滤波

gaussian = cv2.GaussianBlur(img, (3,3), 1)        #高斯滤波

median = cv2.medianBlur(img, 3)                   #中值滤波

可以看到这些滤波算法的滤波核的参数设置方式,除了中值滤波设置为3,其他的都设置为(3,3)传入函数即可。

注意:在opencv的形态学操作中,核不可以(3,3)的方式传入,如:

复制代码
img_erode = cv2.erode(img, (3,3))

这种方式就是错误的,必须要如下设置:

复制代码
kernel = np.ones((3,3), np.uint8)
img_erode = cv2.erode(img, kernel, iteration=1) #迭代次数为1

cv2.imshow('erode', img_erode)
cv2.waitKey(0)
cv2.destroyWindows()

因为在cv2.erode()函数中,核参数的数据结构就是一个Numpy数组,而不是类似(3,3)这样的元组结构。

如果是以c++代码实现opencv的腐蚀操作,则核参数需要设置为cv::Mat格式传入即可。

2.梯度计算

图像处理中的梯度计算:膨胀后的图像 - 腐蚀后的图像。

注意:

2.1 膨胀和腐蚀操作的核大小要一致;

2.2 计算梯度的核的尺寸没有固定值,取决于用户希望提取的轮廓的精细程度;

复制代码
kernel = np.ones((3,3), uint8)
img = cv2.imread('dige.png')
img_dilate = cv2.dilate(img, kernel. iterations=1)
img_erode = cv2.erode(img, kernel, iterations=1)
#梯度计算方法有两种,一种是直接用  膨胀的图像 - 腐蚀的图像
img_ed = img_dilate - img_erode
cv2.imshow('img_ed', img_ed)
cv2.waitKey(0)

#另一种就是直接调用函数
gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel, iterations=5) #迭代次数默认为1
cv2.imshow('gradient', gradient)
cv2.waitKey(0)
相关推荐
KK不Battle2 小时前
AI 配图缺的不是模型,是工程:开源 skill social-illustrator 上手教程
人工智能
2601_963749103 小时前
越华环保集团污水监测云边协同架构:数字化污水治理Modbus-MQTT链路实现方案
人工智能·架构
u0103055273 小时前
Java实用类应用精讲
人工智能·1024程序员节
城事漫游Molly3 小时前
用AI评估文献可靠性——相关性、可靠性、时效性三维框架
人工智能·ai for science·文献综述·文献阅读·科研方法·博士生必读·文献评估
聚铭网络3 小时前
狂飙的AI,失控的安全……
人工智能·安全
imbackneverdie3 小时前
写文献综述,时间脉络和主题分类到底怎么选?
人工智能·ai·aigc·论文·科研·ai写作·医学
weixin_446260853 小时前
生成式与智能体AI认知能力缺陷分类体系
人工智能·分类·数据挖掘
网渡科技3 小时前
GEO搜索优化:大模型引用率提升的六大实战策略
人工智能·搜索引擎·chatgpt
万少4 小时前
用 TraeWork 给小孩做一个家庭工作台
前端·人工智能·后端