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)
相关推荐
小弥儿4 小时前
GitHub今日热榜 | 2026-08-26:AI 大脑与知识管理扎堆
人工智能·学习·开源·github
荷蒲4 小时前
【小白量化Qbuddy】利用AI学习中文Python
人工智能·python·学习
继续商行4 小时前
数据库变更协作:研发与 DBA 如何约定 DDL 边界
人工智能
IT_陈寒5 小时前
Vue的响应式更新有时候真的不听话
前端·人工智能·后端
柳絮飞祭奠5 小时前
Dify Windows Docker Desktop 部署文档
人工智能·深度学习·语言模型·数据分析·transformer·边缘计算·集成学习
DeepLink_20255 小时前
Triton第四课:基于对称内存融合 AllGather 与 MatMul,提速1.56倍
人工智能·芯片·技术科普
zhangfeng11335 小时前
AMD Instinct MI50(gfx906)上为 Qwen 系列模型优化并可用的 vLLM 相关仓库、Docker 镜像与实践指南。
人工智能·docker·ai编程·qwen·算子开发·vllm·mi50
其实防守也摸鱼5 小时前
信创是什么:一文读懂信息技术应用创新
人工智能·阿里云·云计算·github·copilot
咖啡星人k5 小时前
2026 AI Agent 长期记忆:为什么 AI 助手总“聊完就忘“?MonkeyCode 免费上手
人工智能·深度学习·机器学习·语言模型·自然语言处理
帅哥的AI自修课5 小时前
AI 换个会话就装失忆?Letta 焊死「记忆即灵魂」,从 MemGPT 的 OS 梦到 Core/Recall/Archival 三层记忆一篇打通
人工智能