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)
相关推荐
天树星智源1 分钟前
J-Comm:不传文本传雅可比坐标,token 省下 74.8%
人工智能·机器人·大模型
谢白羽4 分钟前
从传统运维到 AI Infra: K8s 上调度 100 张 GPU踩坑笔记
运维·人工智能·缓存·kubernetes·vllm·sglang·vllm-omni
镜子AI6 分钟前
镜子AI工程实践:用熵权法 + TOPSIS 做多方案选型排序(零依赖 Python)
开发语言·人工智能·python
维基框架8 分钟前
OpenAI GPT-6.1 Terra发布AI开始真正操作电脑,使用成本也降了
大数据·人工智能·gpt
志尊宝10 分钟前
AI原生前端开发(028):AI辅助的调试与错误修复
人工智能·笔记·重构·ai-native
海宇服务20 分钟前
零信任架构实战:基于海宇个人大数据报告构建自动化汽车融资租赁资信核验网关
大数据·人工智能·架构·自动化
怎么全是重名23 分钟前
CLIP-Learning Transferable Visual Models From Natural Language Supervision
人工智能·深度学习·计算机视觉·异常检测
具身AGI25 分钟前
VLA 忘记物理世界,物理AI 物理推理 两个病因
人工智能
广州国启未来28 分钟前
企业 AI 落地三件套:RAG、私有化大模型、Agent 智能体
人工智能
米饭是菜qy31 分钟前
动手学深度学习(李沐)——现代循环神经网络读书笔记
人工智能·rnn·深度学习