Opencv_Python_6_模糊操作

本文介绍了三种常见的图像模糊处理方法:均值模糊、中值模糊及自定义模糊,并详细阐述了各自的参数含义及其适用场景。

1, 均值模糊

dst = cv.blur(src=image, ksize=(3, 3), anchor=None)
其各参数所代表的意义:
	src:原图像
	ksize:内核的大小(内核中数值必须为正奇数)
	anchor:锚点(可省,默认为-1,-1代表内核中心)。
应用场合:普通去噪

2, 中值模糊

dst = cv.medianBlur(src=image, ksize=5)
其各参数所代表的意义:
	src:原图像
	ksize:内核大小(必须为正奇数)
应用场合:去椒盐噪声

3, 自定义模糊

def custom_blur_demo(image):
    # kernel = np.ones([5, 5], dtype=np.uint8)/25    # /25 是为了防止溢出
    kernel = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]], dtype=np.float32)    # 此卷积核起**锐化**作用
    dst = cv.filter2D(src=image, ddepth=-1, kernel=kernel)    # ddepth默认为-1
应用场景:自定义卷积核对图片进行锐化作用
### 实现Canny边缘检测、形态学操作以及寻找轮廓 要在Python中使用OpenCV实现Canny边缘检测、形态学操作和寻找轮廓的功能,可以通过以下方法完成: #### 导入库 首先需要导入必要的库 `cv2` 和 `numpy` 来支持图像处理功能[^1]。 ```python import cv2 import numpy as np ``` #### 图像预处理 加载图像并将其转换为灰度图以便后续处理。由于彩色图像可能含有噪声或其他干扰因素,因此通常建议先对其进行高斯模糊处理以减少这些影响[^4]。 ```python # 加载原始图片 original_img = cv2.imread("image.jpg") # 转换为灰度图 gray_img = cv2.cvtColor(original_img, cv2.COLOR_BGR2GRAY) # 对灰度图应用高斯模糊 blurred_img = cv2.GaussianBlur(gray_img, (3, 3), 0) ``` #### Canny边缘检测 通过调用 `cv2.Canny()` 方法来进行边缘检测。此函数接收两个主要参数作为高低阈值,用于控制哪些像素被认为是强边或弱边。 ```python edges = cv2.Canny(blurred_img, threshold1=50, threshold2=150) ``` #### 形态学操作 为了增强边缘的效果,在某些情况下可以采用开闭运算等形态学技术进一步优化结果。这里展示了一个简单的梯度计算例子[^4]。 ```python kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5)) gradient = cv2.morphologyEx(edges, cv2.MORPH_GRADIENT, kernel) ``` #### 查找轮廓 利用 `cv2.findContours()` 函数可以从二值化的边缘图中提取出所有的轮廓信息。注意该函数会改变传入的图像数据副本,所以如果还需要保留原样,则应复制一份给定的数据后再传递进去[^3]。 ```python contours, hierarchy = cv2.findContours(gradient.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) ``` #### 绘制轮廓 最后一步是在原图上画出找到的所有轮廓线框出来供查看验证之用[^3]。 ```python drawing = original_img.copy() cv2.drawContours(drawing, contours, -1, (0, 255, 0), 2) ``` #### 显示最终效果图 将各个阶段的结果分别显示出来便于观察整个流程的变化情况。 ```python cv2.imshow("Original Image", original_img) cv2.imshow("Gray Scale", gray_img) cv2.imshow("Blurred Image", blurred_img) cv2.imshow("Edges Detected by Canny", edges) cv2.imshow("Morphological Gradient", gradient) cv2.imshow("Detected Contours", drawing) cv2.waitKey(0) cv2.destroyAllWindows() ``` 以上就是完整的基于OpenCVPython实现Canny边缘检测、形态学操作及绘制图形轮廓的过程描述[^1].
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值