Opencv_Python_7_高斯模糊

本文介绍了如何使用OpenCV中的cv.GaussianBlur()函数实现高斯模糊效果,并展示了如何为图像添加高斯噪声的方法。此外,还提供了具体的Python代码实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

高斯模糊使用函数cv.GaussianBlur()完成。
cv.GaussianBlur(src, ksize, sigmaX)
我们应该指定应该是正数和奇数的内核的宽度和高度。我们还应该分别指定X和Y方向的标准差,sigmaX和sigmaY。如果只指定sigmaX,则sigmaY与sigmaX相同。如果两者都是零,则它们是从内核大小计算的。
如果你愿意,你可以用函数cv.getGaussianKernel()创建一个高斯内核。

1, 给一张图片增加高斯噪声

def gaussian_noise(image):
    h, w, c = image.shape
    for row in range(0, h):
        for col in range(0, w):
            noise = np.random.normal(0, 20, 3)
            b = image[row, col, 0]  # blue
            g = image[row, col, 1]  # green
            r = image[row, col, 2]  # red
            image[row, col, 0] = clamp(b + noise[0])
            image[row, col, 1] = clamp(g + noise[1])
            image[row, col, 2] = clamp(r + noise[2])
    cv.imshow("noise image", image)

2, 对一张图片进行高斯模糊:

dst = cv.GaussianBlur(src=src, ksize=(5, 5), sigmaX=0)
其中各参数所表达的意义:
	src:原图像;
	ksize:高斯核的大小,其中的数值必须为正奇数
	sigmaX:x方向标准方差
高斯模糊应用场景:去高斯噪声

Tips:
保证像素值在0——255之间

def clamp(pv):  # 保证像素值在0——255之间
    if pv > 255:
        return 255
    if pv < 0:
        return 0
    else:
        return pv
### 实现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].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值